俄罗斯方块代码Word文档格式.docx
《俄罗斯方块代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块代码Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
//当前的部件
POINTptIndex;
//部件数组在全局数组中的索引
//产生一个新的部件
voidNewComponet(void);
//是否还可以下落
boolCanDown(void);
//刷新函数
voidMyInvalidateRect(POINTptStart,intintDimension);
//消去行
voidDisappear(void);
//判断游戏是否结束
boolCheckFail(void);
//是否还可以旋转
boolCanRotate(void);
//是否还可以左移
boolCanLeft(void);
//是否还可以右移
boolCanRight(void);
//检查是否有足够的空位显示新的部件,否则游戏结束
boolCanNew();
};
CRusBlockView:
:
CRusBlockView()
//TODO:
addconstructioncodehere
for(inti=0;
i<
HIGH;
i++)
for(intj=0;
j<
WIDE;
j++)
m_intState[i][j]=0;
m_intLevel=NORMAL;
//初始化难度
srand((unsigned)time(NULL));
//初始化随机数
m_intScore=0;
m_CurrentCom.intComID=-1;
m_CurrentCom.intDimension=0;
m_CurrentCom.pintArray=NULL;
//初始化7个部件
//0:
方块
m_Componets[0].intComID=0;
m_Componets[0].intDimension=2;
m_Componets[0].pintArray=newint[4];
for(i=0;
4;
m_Componets[0].pintArray[i]=1;
//11
//11
//1:
-|
m_Componets[1].intComID=1;
m_Componets[1].intDimension=3;
m_Componets[1].pintArray=newint[9];
m_Componets[1].pintArray[0]=0;
m_Componets[1].pintArray[1]=1;
m_Componets[1].pintArray[2]=0;
//010
m_Componets[1].pintArray[3]=1;
//111
m_Componets[1].pintArray[4]=1;
//000
m_Componets[1].pintArray[5]=1;
m_Componets[1].pintArray[6]=0;
m_Componets[1].pintArray[7]=0;
m_Componets[1].pintArray[8]=0;
//2
m_Componets[2].intComID=2;
m_Componets[2].intDimension=3;
m_Componets[2].pintArray=newint[9];
m_Componets[2].pintArray[0]=1;
m_Componets[2].pintArray[1]=0;
m_Componets[2].pintArray[2]=0;
//100
m_Componets[2].pintArray[3]=1;
//110
m_Componets[2].pintArray[4]=1;
m_Componets[2].pintArray[5]=0;
m_Componets[2].pintArray[6]=0;
m_Componets[2].pintArray[7]=1;
m_Componets[2].pintArray[8]=0;
//3
m_Componets[3].intComID=3;
m_Componets[3].intDimension=3;
m_Componets[3].pintArray=newint[9];
m_Componets[3].pintArray[0]=0;
m_Componets[3].pintArray[1]=0;
m_Componets[3].pintArray[2]=1;
//001
m_Componets[3].pintArray[3]=0;
//011
m_Componets[3].pintArray[4]=1;
m_Componets[3].pintArray[5]=1;
m_Componets[3].pintArray[6]=0;
m_Componets[3].pintArray[7]=1;
m_Componets[3].pintArray[8]=0;
//4
m_Componets[4].intComID=4;
m_Componets[4].intDimension=3;
m_Componets[4].pintArray=newint[9];
m_Componets[4].pintArray[0]=1;
m_Componets[4].pintArray[1]=0;
m_Componets[4].pintArray[2]=0;
m_Componets[4].pintArray[3]=1;
m_Componets[4].pintArray[4]=1;
m_Componets[4].pintArray[5]=1;
m_Componets[4].pintArray[6]=0;
m_Componets[4].pintArray[7]=0;
m_Componets[4].pintArray[8]=0;
//5
m_Componets[5].intComID=5;
m_Componets[5].intDimension=3;
m_Componets[5].pintArray=newint[9];
m_Componets[5].pintArray[0]=0;
m_Componets[5].pintArray[1]=0;
m_Componets[5].pintArray[2]=1;
m_Componets[5].pintArray[3]=1;
m_Componets[5].pintArray[4]=1;
m_Componets[5].pintArray[5]=1;
m_Componets[5].pintArray[6]=0;
m_Componets[5].pintArray[7]=0;
m_Componets[5].pintArray[8]=0;
//6
m_Componets[6].intComID=6;
m_Componets[6].intDimension=4;
m_Componets[6].pintArray=newint[16];
m_Componets[6].pintArray[0]=0;
m_Componets[6].pintArray[1]=1;
m_Componets[6].pintArray[2]=0;
//0100
m_Componets[6].pintArray[3]=0;
m_Componets[6].pintArray[4]=0;
m_Componets[6].pintArray[5]=1;
m_Componets[6].pintArray[6]=0;
m_Componets[6].pintArray[7]=0;
m_Componets[6].pintArray[8]=0;
m_Componets[6].pintArray[9]=1;
m_Componets[6].pintArray[10]=0;
m_Componets[6].pintArray[11]=0;
m_Componets[6].pintArray[12]=0;
m_Componets[6].pintArray[13]=1;
m_Componets[6].pintArray[14]=0;
m_Componets[6].pintArray[15]=0;
}
~CRusBlockView()
//释放内存
for(inti=0;
MAXCOM;
delete[]m_Componets[i].pintArray;
delete[]m_CurrentCom.pintArray;
voidCRusBlockView:
OnDraw(CDC*pDC)
CRusBlockDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
adddrawcodefornativedatahere
//画游戏区域
CBrushbrushBK(RGB(135,197,255));
CBrush*pbrushOld=pDC->
SelectObject(&
brushBK);
pDC->
Rectangle(LEFT-1,TOP-1,LEFT+WIDE*SIZE+1,
TOP+HIGH*SIZE+1);
//画不能移动的方块
CBrushbrushStick(RGB(127,127,127));
brushStick);
if(m_intState[i][j]==1)
pDC->
Rectangle(LEFT+SIZE*j,TOP+SIZE*i,LEFT+SIZE*(j+1),
TOP+SIZE*(i+1));
//画下落的部件
if(m_CurrentCom.intComID>
=0)
{
CBrushbrushCom(RGB(0,255,0));
pDC->
brushCom);
intintDimension=m_CurrentCom.intDimension;
for(inti=0;
intDimension*intDimension;
{
if(m_CurrentCom.pintArray[i]==1)
{
intm=ptIndex.x+i/intDimension;
//找出部件对应整体数组中的位置
intn=ptIndex.y+(i%intDimension);
Rectangle(LEFT+SIZE*n,TOP+SIZE*m,LEFT+SIZE*(n+1),
TOP+SIZE*(m+1));
}
}
}
//显示得分
CStringstrOut;
strOut.Format("
得分%d"
m_intScore);
TextOut(LEFT+WIDE*SIZE+50,TOP+100,strOut);
pbrushOld);
OnTimer(UINTnIDEvent)
Addyourmessagehandlercodehereand/orcalldefault
intintDimension=m_CurrentCom.intDimension;
if(CanDown())//可以下落
//擦除
MyInvalidateRect(ptIndex,intDimension);
//下落
ptIndex.x++;
//显示新位置上的部件
else
m_intState[m][n]=1;
Disappear();
//消去行
if(CheckFail())//游戏结束
m_CurrentCom.intComID=-1;
KillTimer
(1);
MessageBox("
GameOver!
"
);
else
NewComponet();
//新部件
CView:
OnTimer(nIDEvent);
OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags)
switch(nChar)//left37,right39,up38
case37:
if(CanLeft())
//擦除
MyInvalidateRect(ptIndex,intDimension);
//左移
ptIndex.y--;
//显示新位置上的部件
break;
case39:
if(CanRight())
//右移
ptIndex.y++;
case38:
if(CanRotate())
//转动
int*pintNewCom=newint[intDimension*intDimension];
for(inti=0;
intintR=intDimension*(intDimension-(i%intDimension)-1)+(i/intDimension);
pintNewCom[i]=m_CurrentCom.pintArray[intR];
for(i=0;
m_CurrentCom.pintArray[i]=pintNewCom[i];
delete[]pintNewCom;
OnKeyDown(nChar,nRepCnt,nFlags);
NewComponet(void)
intintComID=rand()%7;
//产生随机数
m_CurrentCom.intComID=intComID;
intintDimension=m_Componets[intComID].intDimension;
m_CurrentCom.intDimension=intDimension;
//删除上一个部件的内存分配
m_CurrentCom.pintArray=newint[intDimension*intDimension];
//拷贝部件
m_CurrentCom.pintArray[i]=m_Componets[intComID].pintArray[i];
ptIndex.x=0;
//行
ptIndex.y=5;
//列
if(CanNew())
//显示该部件
m_CurrentCom.intComID=-1;
KillTimer
(1);
MessageBox("
boolCRusBlockView:
CanDown(void)
boolboolDown=true;
POINTintNewIndex=ptIndex;
//假设可以下落
intNewIndex.x++;
if(m_CurrentCom.pintArray[i]==1)
intm=intNewIndex.x+i/intDimension;
intn=intNewIndex.y+(i%intDimension);
if(m>
=HIGH||m_intState[m][n]==1)//被挡住或出游戏区域
boolDown=false;
returnboolDown;
//可以左移
CanLeft(void)
boolboolLeft=true;
POINTptNewIndex=ptIndex;
//假设可以左移
ptNewIndex.y--;
intm=ptNewIndex.x+i/intDimension;
intn=ptNewIndex.y+(i%intDimension);
if(n<
0||m_intState[m][n]==1)//被挡住或出游戏区域
boolLeft=false;
returnboolLeft;
//可以右移
CanRight(void)
boolboolRight=true;
//假设可以右移
ptNewIndex.y++;
if(n>
=WIDE||m_intState[m][n]==1)//被挡住或出游戏区域
boolRight=false;
returnboolRight;
//可以旋转
CanRotate(void)
boolboolRotate=true;
//假设可以转动
//新的矩阵存储转动后的部件
int*pintNewCom=newint[intDimension*intDimension