俄罗斯方块游戏的设计与制作具体设计流程:1、背景框图的绘制与显示2、方块创建与显示3、方块移动处理(移动判断,方块擦除、重绘)4、按键处理设计(方块移动,变形)5、得分及游戏结束处理设计(方块销毁,重绘)6、特殊功能的设计(发声、加速)1、背景框图的绘制与显示Tc2.0中有两种显示模式,一种是我们所熟知的字符模式,另一种是图形模式。在字符模式下只能显式字符,如ASCII字符。一般是显示25行,每行80个字符。程序缺省的是字符模式。在字符模式下不能显式图形和进行绘图操作。要想进行图形显示和绘图操作,必须切换到图形模式下。初始化包含头文件"graphics.h"调用以下函数进行背景框图的绘制:initgraph()初始显示模式setcolor()设置画笔颜色line()画线rectangle()画矩形框floodfill()用设定颜色填充封闭区域outtextxy()显示文本2、方块创建与显示定义方块结构体typedefstructtagBlock{charc[4][4];/*方块存取数组*/intx;inty;charcolor;/*方块颜色*/charsize;/*方块大小*/charname;/*方块名字*/}Block;随机产生任意一种类型的方块,并初始化void_INNER_HELPERGenerateBlock(Block*block){intkey=(random(13)*random(17)+random(1000)+random(3000))%7;block->size=3;/*becausemostblocks'size=3*/memset(block->c,0,16);switch(key){case0:block->name='T';block->color=RED;block->c[1][0]=1;block->c[1][1]=1,block->c[2][1]=1;block->c[1][2]=1;break;case1:block->name='L';block->color=YELLOW;block->c[1][0]=1;block->c[1][1]=1;block->c[1][2]=1,block->c[2][2]=1;break;case2:block->name='J';block->color=LIGHTGRAY;block->c[1][0]=1;block->c[1][1]=1;block->c[1][2]=1,block->c[0][2]=1;break;………………}}用floodfill()函数将其显示出来floodfill(bdLeft+cellSize*(i+block->x)+cellSize/2,bdTop+cellSize*(j+block->y)+cellSize/2,BorderColor);用构造出的nextBlock对当前方块curBlock赋值3、方块移动处理(移动判断,方块擦除、重绘)首先用三维数组unsignedcharBoard[BoardWidth][BoardHeight][2]对窗口所有方格的颜色和存活状态进行保存移动处理分两种情况:没有按键情况和有按键情况没有按键情况:只判断下一步能否向下移动,不能移动说明到达窗口底端,或者是到达下面已堆积方块处,不能移动时,将方块的状态颜色等数据赋值给窗口数组,再调用void_INNER_HELPERPaintBoard()函数对窗口进行重绘。有按键的情况:根据按键信息判断方块能否左右移动,是否发生与窗口壁相撞的现象,若能够移动,则根据按键信息调用相应的方块重绘函数对方块进行重绘,不能移动,则在当前位置继续下落。4、按键处理设计(方块移动,变形)直接降落处理:intDropBlock(Block*block){EraseBlock(block,BoardLeft,BoardTop,CellSize);while(CanMove(0,1)){curBlock.y++;}DrawBlock(block,BoardLeft,BoardTop,CellSize);return0;}//先对方块进行擦除,不能移动时进行重绘,减少重绘次数变形处理:case3://逆时针旋转temp=c[0][0];c[0][0]=c[2][0],c[2][0]=c[2][2],c[2][2]=c[0][2],c[0][2]=temp;temp=c[0][1];c[0][1]=c[1][0],c[1][0]=c[2][1],c[2][1]=c[1][2],c[1][2]=temp;//size=3时的处理5、得分及游戏结束处理设计(方块销毁,重绘)方块销毁及重绘:当方块不能够再向下移动,说明方块到达底端,先将方块状态数据赋值给窗口数组,此时对窗口中每行方格进行检测,发现有满的方格行,就将它之上的所有方格都向下移动一行,再重绘窗口。移动处理:for(i=0;i