您好,欢迎来到微智科技网。
搜索
您的当前位置:首页俄罗斯方块代码(C++类实现)

俄罗斯方块代码(C++类实现)

来源:微智科技网
// Bsae_box.h: interface for the CBsae_box class. //

//////////////////////////////////////////////////////////////////////

#if !defined(AFX_BSAE_BOX_H__AAF9E542_5B12_453F_A0D8_0F2542E527FD__INCLUDED_)

#define AFX_BSAE_BOX_H__AAF9E542_5B12_453F_A0D8_0F2542E527FD__INCLUDED_

#if _MSC_VER > 1000 #pragma once

#endif // _MSC_VER > 1000 #include \"Bsae_box.h\"

class pixe //形状容器类 {

public: int getimg(); int cx,cy; int row[4]; int col[4]; int img; pixe(); ~pixe(); void cleanarr(); pixe* operator=(pixe &px); };

class pix //单个元素属性类 {

public: BOOL data; //数据 int img; //图形 pix():data(0),img(0){} ~pix(){} };

class CBsae_box //形状基类 {

public: virtual void setpnow(pixe *p)=0; CBsae_box(); virtual ~CBsae_box(); virtual void rotate(BOOL clockwise=1)=0; };

class CLbox :public CBsae_box //L形状类 {

public: CLbox(int Index,pixe *pn,pixe *pr,int img); ~CLbox(); void rotate(BOOL clockwise=1); private: pixe *m_pnow,*m_prot; int now; int img; public: void setprot(pixe *p); void setpnow(pixe *p); void rotates(int Index); };

class CJbox :public CBsae_box // J形状类 {

public: CJbox(int Index,pixe *pn,pixe *pr,int img); ~CJbox(); void rotate(BOOL clockwise=1); private: pixe *m_pnow,*m_prot; int now; int img; public: void setprot(pixe *p); void setpnow(pixe *p); void rotates(int Index); };

class CZbox :public CBsae_box // Z 形状类 {

public: CZbox(int Index,pixe *pn,pixe *pr,int img); ~CZbox(); void rotate(BOOL clockwise=1); private: pixe *m_pnow,*m_prot; int now; int img; public: void rotates(int Index); void setprot(pixe *p); void setpnow(pixe *p); };

class CSbox :public CBsae_box // S 形状类

{

public: CSbox(int Index,pixe *pn,pixe *pr,int img); ~CSbox(); void rotate(BOOL clockwise=1); private: pixe *m_pnow,*m_prot; int now; int img; public: void rotates(int Index); void setprot(pixe *p); void setpnow(pixe *p); };

class CTbox :public CBsae_box // T 形状类 {

public: CTbox(int Index,pixe *pn,pixe *pr,int img); ~CTbox(); void rotate(BOOL clockwise=1); private: pixe *m_pnow,*m_prot; int now; int img; public: void rotates(int Index); void setprot(pixe *p); void setpnow(pixe *p); };

class CIbox :public CBsae_box // I 形状类 {

public: CIbox(int Index,pixe *pn,pixe *pr,int img); ~CIbox(); void rotate(BOOL clockwise=1); void setprot(pixe *p); void setpnow(pixe *p); private: pixe *m_pnow,*m_prot; int now; int img; public: void rotates(int Index); };

class CObox :public CBsae_box //田字形状类 {

public: CObox(int Index,pixe *pn,pixe *pr,int img); ~CObox(); void rotate(BOOL clockwise=1); void setprot(pixe *p); void setpnow(pixe *p); private: pixe *m_pnow,*m_prot; int now; int img; public: void rotates(int Index); };

class Cbox //俄罗斯方块类 {

public: BOOL over; long getsuc(); void cleanbox(); CBsae_box* getbenext(); CBsae_box* getbenow(); int rand(); CPoint getnow(); void nextonow(); void createbox(int i,int j,int img); void delline(int line); BOOL isdown(int r,int c,pixe* ppx); void isline(int line); Cbox(); ~Cbox(); void Left(); void Right(); void Rotate(); void Down(); pixe *pnow,*pnext,*prot; pix m_boxs[23][10]; private: long suc; CBsae_box *m_now,*m_next; int col; int row; };

#endif

// !defined(AFX_BSAE_BOX_H__AAF9E542_5B12_453F_A0D8_0F2542E527FD__INCLUDED_)

// Bsae_box.cpp: implementation of the CBsae_box class. //

//////////////////////////////////////////////////////////////////////

#include \"stdafx.h\" #include \"Bsae_box.h\"

#ifdef _DEBUG #undef THIS_FILE

static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif

////////////////////////////////////////////////////////////////////// // Construction/Destruction

////////////////////////////////////////////////////////////////////// pixe::pixe() { for(int i=0;i<4;i++) { row[i]=0; col[i]=0; } }

pixe::~pixe() { }

pixe* pixe::operator=(pixe &px) { if(&px!=this) { cx=px.cx; cy=px.cy; img=px.img; for(int i=0;i<=3;i++) { row[i]=px.row[i]; col[i]=px.col[i]; }

} return this; }

void pixe::cleanarr() { cx=0; cy=0; img=0; for(int i=0;i<=3;i++) { row[i]=0; col[i]=0; } }

CBsae_box::CBsae_box() { }

CBsae_box::~CBsae_box() { }

CLbox::CLbox(int Index,pixe

i):now(Index%4),m_pnow(pn),m_prot(pr),img(i%6) { rotates(now); *m_pnow=*m_prot; }

CLbox::~CLbox() { }

void CLbox::rotate(BOOL clockwise) { if(clockwise) { now++; if(now==4) now=0; } else { now--; if(now==-1) now=3; }

*pn,pixe *pr,int

rotates(now); }

void CLbox::setpnow(pixe *p) { m_pnow=p; }

void CLbox::setprot(pixe *p) { m_prot=p; }

void CLbox::rotates(int Index) { switch(Index) { case 0://shap ┖ m_prot->row[0]=0;m_prot->col[0]=0; m_prot->row[1]=1,m_prot->col[1]=0; m_prot->row[2]=2,m_prot->col[2]=0; m_prot->row[3]=2,m_prot->col[3]=1; m_prot->cx=2;m_prot->cy=3; m_prot->img=img; break; case 1://shap ┙ m_prot->row[0]=0;m_prot->col[0]=2; m_prot->row[1]=1,m_prot->col[1]=0; m_prot->row[2]=1,m_prot->col[2]=1; m_prot->row[3]=1,m_prot->col[3]=2; m_prot->cx=3;m_prot->cy=2;m_prot->img=img; break; case 2://shap ┒ m_prot->row[0]=0;m_prot->col[0]=0; m_prot->row[1]=0,m_prot->col[1]=1; m_prot->row[2]=1,m_prot->col[2]=1; m_prot->row[3]=2,m_prot->col[3]=1; m_prot->cx=2;m_prot->cy=3;m_prot->img=img; break; case 3://shap ┍ m_prot->row[0]=0;m_prot->col[0]=0; m_prot->row[1]=0,m_prot->col[1]=1; m_prot->row[2]=0,m_prot->col[2]=2; m_prot->row[3]=1,m_prot->col[3]=0; m_prot->cx=3;m_prot->cy=2;m_prot->img=img;

break; } }

CJbox::CJbox(int Index,pixe *pn,pixe *pr,int i):now(Index%4),m_pnow(pn),m_prot(pr),img(i%6) { rotates(now); *m_pnow=*m_prot; }

CJbox::~CJbox() { }

void CJbox::rotate(BOOL clockwise) { if(clockwise) { now++; if(now==4) now=0; } else { now--; if(now==-1) now=3; } rotates(now); }

void CJbox::setpnow(pixe *p) { m_pnow=p; }

void CJbox::setprot(pixe *p) { m_prot=p; }

void CJbox::rotates(int Index) { switch(Index) { case 0://shap ┚ m_prot->row[0]=0;m_prot->col[0]=1; m_prot->row[1]=1,m_prot->col[1]=1; m_prot->row[2]=2,m_prot->col[2]=0; m_prot->row[3]=2,m_prot->col[3]=1;

m_prot->cx=2;m_prot->cy=3;m_prot->img=img; break; case 1://shap ┑ m_prot->row[0]=0;m_prot->col[0]=0; m_prot->row[1]=0,m_prot->col[1]=1; m_prot->row[2]=0,m_prot->col[2]=2; m_prot->row[3]=1,m_prot->col[3]=2; m_prot->cx=3;m_prot->cy=2;m_prot->img=img; break; case 2://shap ┎ m_prot->row[0]=0;m_prot->col[0]=0; m_prot->row[1]=0,m_prot->col[1]=1; m_prot->row[2]=1,m_prot->col[2]=0; m_prot->row[3]=2,m_prot->col[3]=0; m_prot->cx=2;m_prot->cy=3;m_prot->img=img; break; case 3://shap ┕ m_prot->row[0]=0;m_prot->col[0]=0; m_prot->row[1]=1,m_prot->col[1]=0; m_prot->row[2]=1,m_prot->col[2]=1; m_prot->row[3]=1,m_prot->col[3]=2; m_prot->cx=3;m_prot->cy=2;m_prot->img=img; break; } }

CZbox::CZbox(int Index,pixe

i):now(Index%2),m_pnow(pn),m_prot(pr),img(i%6) { rotates(now); *m_pnow=*m_prot; }

CZbox::~CZbox() { }

void CZbox::rotate(BOOL clockwise) { if(clockwise) { now++; if(now==2) now=0; } else { now--;

*pn,pixe *pr,int

if(now==-1) now=1; } rotates(now); }

void CZbox::setpnow(pixe *p) { m_pnow=p; }

void CZbox::setprot(pixe *p) { m_prot=p; }

void CZbox::rotates(int Index) { switch(Index) { case 0://shap z~ m_prot->row[0]=0;m_prot->col[0]=1; m_prot->row[1]=1,m_prot->col[1]=0; m_prot->row[2]=1,m_prot->col[2]=1; m_prot->row[3]=2,m_prot->col[3]=0; m_prot->cx=2;m_prot->cy=3;m_prot->img=img; break; case 1://shap z m_prot->row[0]=0;m_prot->col[0]=0; m_prot->row[1]=0,m_prot->col[1]=1; m_prot->row[2]=1,m_prot->col[2]=1; m_prot->row[3]=1,m_prot->col[3]=2; m_prot->cx=3;m_prot->cy=2;m_prot->img=img; break; default: break; } }

CSbox::CSbox(int Index,pixe

i):now(Index%2),m_pnow(pn),m_prot(pr),img(i%6) { rotates(now); *m_pnow=*m_prot; }

CSbox::~CSbox() { }

*pn,pixe *pr,int

void CSbox::rotate(BOOL clockwise) { if(clockwise) { now++; if(now==2) now=0; } else { now--; if(now==-1) now=1; } rotates(now); }

void CSbox::setpnow(pixe *p) { m_pnow=p; }

void CSbox::setprot(pixe *p) { m_prot=p; }

void CSbox::rotates(int Index) { switch(Index) { case 0://shap s~ m_prot->row[0]=0;m_prot->col[0]=0; m_prot->row[1]=1,m_prot->col[1]=0; m_prot->row[2]=1,m_prot->col[2]=1; m_prot->row[3]=2,m_prot->col[3]=1; m_prot->cx=2;m_prot->cy=3;m_prot->img=img; break; case 1://shap s m_prot->row[0]=0;m_prot->col[0]=1; m_prot->row[1]=0,m_prot->col[1]=2; m_prot->row[2]=1,m_prot->col[2]=0; m_prot->row[3]=1,m_prot->col[3]=1; m_prot->cx=3;m_prot->cy=2;m_prot->img=img; break; default: break; }

}

CTbox::CTbox(int Index,pixe

i):now(Index%4),m_pnow(pn),m_prot(pr),img(i%6) { rotates(now); *m_pnow=*m_prot; }

CTbox::~CTbox() { }

void CTbox::rotate(BOOL clockwise) { if(clockwise) { now++; if(now==4) now=0; } else { now--; if(now==-1) now=3; } rotates(now); }

void CTbox::setpnow(pixe *p) { m_pnow=p; }

void CTbox::setprot(pixe *p) { m_prot=p; }

void CTbox::rotates(int Index) { switch(Index) { case 0://shap ┴ m_prot->row[0]=0;m_prot->col[0]=1; m_prot->row[1]=1,m_prot->col[1]=0; m_prot->row[2]=1,m_prot->col[2]=1; m_prot->row[3]=1,m_prot->col[3]=2; m_prot->cx=3;m_prot->cy=2;m_prot->img=img; break;

*pn,pixe *pr,int

case 1://shap ┤ m_prot->row[0]=0;m_prot->col[0]=1; m_prot->row[1]=1,m_prot->col[1]=0; m_prot->row[2]=1,m_prot->col[2]=1; m_prot->row[3]=2,m_prot->col[3]=1; m_prot->cx=2;m_prot->cy=3;m_prot->img=img; break; case 2://shap ┬ m_prot->row[0]=0;m_prot->col[0]=0; m_prot->row[1]=0,m_prot->col[1]=1; m_prot->row[2]=0,m_prot->col[2]=2; m_prot->row[3]=1,m_prot->col[3]=1; m_prot->cx=3;m_prot->cy=2;m_prot->img=img; break; case 3://shap ├ m_prot->row[0]=0;m_prot->col[0]=0; m_prot->row[1]=1,m_prot->col[1]=0; m_prot->row[2]=1,m_prot->col[2]=1; m_prot->row[3]=2,m_prot->col[3]=0; m_prot->cx=2;m_prot->cy=3;m_prot->img=img; break; } }

CIbox::CIbox(int Index,pixe *pn,pixe *pr,int i):now(Index%2),m_pnow(pn),m_prot(pr),img(i%6) { rotates(now); *m_pnow=*m_prot; }

CIbox::~CIbox() { }

void CIbox::rotate(BOOL clockwise) { if(clockwise) { now++; if(now==2) now=0; } else { now--; if(now==-1) now=1; }

rotates(now); }

void CIbox::setpnow(pixe *p) { m_pnow=p; }

void CIbox::setprot(pixe *p) { m_prot=p; }

void CIbox::rotates(int Index) { switch(Index) { case 0://shap - m_prot->row[0]=0;m_prot->col[0]=0; m_prot->row[1]=1,m_prot->col[1]=0; m_prot->row[2]=2,m_prot->col[2]=0; m_prot->row[3]=3,m_prot->col[3]=0; m_prot->cx=1;m_prot->cy=4;m_prot->img=img; break; case 1://shap | m_prot->row[0]=0;m_prot->col[0]=0; m_prot->row[1]=0,m_prot->col[1]=1; m_prot->row[2]=0,m_prot->col[2]=2; m_prot->row[3]=0,m_prot->col[3]=3; m_prot->cx=4;m_prot->cy=1;m_prot->img=img; break; } }

CObox::CObox(int Index,pixe i):now(Index%1),m_pnow(pn),m_prot(pr),img(i%6) { rotates(now); *m_pnow=*m_prot; }

CObox::~CObox() { }

void CObox::rotate(BOOL clockwise) { if(clockwise) {

*pn,pixe *pr,int

now++; if(now==2) now=0; } else { now--; if(now==-1) now=1; } rotates(now); }

void CObox::setpnow(pixe *p) { m_pnow=p; }

void CObox::setprot(pixe *p) { m_prot=p; }

void CObox::rotates(int Index) { switch(Index) { case 0://shap ∷ m_prot->row[0]=0;m_prot->col[0]=0; m_prot->row[1]=0,m_prot->col[1]=1; m_prot->row[2]=1,m_prot->col[2]=0; m_prot->row[3]=1,m_prot->col[3]=1; m_prot->cx=2;m_prot->cy=2;m_prot->img=img; break; } }

Cbox::Cbox():col(0),row(0),m_now(0),m_next(0) { cleanbox(); suc=0; pnow=new pixe; pnext=new pixe; prot=new pixe; over=0; }

Cbox::~Cbox()

{ if(m_next) delete m_next; if(m_now) delete m_now; if(pnow) delete pnow; if(pnext) delete pnext; }

void Cbox::Rotate() { *prot=*pnow; m_now->rotate(); int c; if((col+prot->cx)>10) c=10-prot->cx; else c=col; if(isdown(row,c,prot)) { col=c; *pnow=*prot; } }

void Cbox::isline(int line) { BOOL isb; int i=line+4; if(i>22) i=22; for(;i>=line-1;i--) { isb=TRUE; for(int j=0;j<10;j++) { if(!(m_boxs[i][j]).data) { isb=FALSE; break; } } if(isb) { delline(i); i++; suc+=10; } } }

BOOL Cbox::isdown(int irow,int icol,pixe* ppx) { for(int i=3;i>=0;i--) if(m_boxs[ppx->row[i]+irow][ppx->col[i]+icol].data) return FALSE; if(icol<0 || (icol+ppx->cx)>10) return FALSE; if((irow+ppx->cy)>23) return FALSE; return TRUE; }

void Cbox::Down() { if(!isdown(row+1,col,pnow)) { for(int i=0;i<=3;i++) { m_boxs[row+pnow->row[i]][col+pnow->col[i]].data=TRUE; m_boxs[row+pnow->row[i]][col+pnow->col[i]].img=pnow->img; } isline(row); nextonow(); } else row++; }

void Cbox::Left() { if(isdown(row,col-1,pnow)) col--; }

void Cbox::Right() { if(isdown(row,col+1,pnow)) col++; }

void Cbox::delline(int line) { for(int i=line;i>0;i--) for(int j=0;j<=9;j++) { m_boxs[i][j].data=m_boxs[i-1][j].data; m_boxs[i][j].img=m_boxs[i-1][j].img; }

}

void Cbox::createbox(int i, int j,int img) { i=i%7; if(m_next) delete m_next; switch(i) { case 0: m_next=new CLbox(j,pnext,prot,img); break; case 1: m_next=new CTbox(j,pnext,prot,img); break; case 2: m_next=new CIbox(j,pnext,prot,img); break; case 3: m_next=new CZbox(j,pnext,prot,img); break; case 4: m_next=new CSbox(j,pnext,prot,img); break; case 5: m_next=new CObox(j,pnext,prot,img); break; case 6: m_next=new CJbox(j,pnext,prot,img); break; } ASSERT(m_next!=0); }

void Cbox::nextonow() {

/* for(int i=0;i<=3;i++) { pnow->row[i]=pnext->row[i]; pnow->col[i]=pnext->col[i]; }*/ *pnow=*pnext; m_now=m_next; m_now->setpnow(pnow);

row=0;col=4; m_next=0; createbox(rand(),rand()+1,rand()+3); }

CPoint Cbox::getnow() { CPoint p; p.x=col; p.y=row; return p; }

int Cbox::rand() { SYSTEMTIME systime; ::GetLocalTime(&systime); return systime.wSecond; }

CBsae_box* Cbox::getbenow() { return m_now; }

CBsae_box* Cbox::getbenext() { return m_next; }

void Cbox::cleanbox() { pix *pb=&m_boxs[0][0]; for(int i=0;i<230;i++) { pb->data=FALSE; pb->img=0; pb++; } }

long Cbox::getsuc() {

return suc; }

int pixe::getimg() { return img; }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务