俄罗斯方块设计步骤

上传人:夏** 文档编号:563940043 上传时间:2023-03-13 格式:DOC 页数:30 大小:83KB
返回 下载 相关 举报
俄罗斯方块设计步骤_第1页
第1页 / 共30页
俄罗斯方块设计步骤_第2页
第2页 / 共30页
俄罗斯方块设计步骤_第3页
第3页 / 共30页
俄罗斯方块设计步骤_第4页
第4页 / 共30页
俄罗斯方块设计步骤_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《俄罗斯方块设计步骤》由会员分享,可在线阅读,更多相关《俄罗斯方块设计步骤(30页珍藏版)》请在金锄头文库上搜索。

1、综合实例俄罗斯方块1。 问题描述屏幕中央有一个矩形容器,程序刚开始时是空的;当鼠标单击“开始菜单时,矩形容器内从上向下随机出现俄罗斯方块的部件。通过键盘上的左右键分别左右移动部件(一个单位),向上键顺时针旋转度.当部件到达容器底部或已停止的部件上时,停止;当容器的同一行被部件填满时,该行消失。其他行依次向下移动.计分方法:一次消去一行100分,同时消去行、行或行分别为00、500和90分。在适当位置显示当前累计分。当部件总行数超过矩形容器高度时,提示“游戏失败信息并停止.设有三个级别的游戏难度供选择.难度越大、下落越快.2。 编程要求()屏幕中央有一个矩形容器,选择“开始”菜单,俄罗斯方块的部

2、件随机产生并在容器中从上向下下落.(2)有七种标准俄罗斯方块部件,并随着键盘上的左右键分别左右移动,随着键盘上的向上键分别顺时针旋转90度。(3)当部件到达容器底部或已停止的部件上时,停止;当同一行部件完整拼接上时,该行消失,其他行向下移动,在适 当位置显示当前累计分。()当部件总行数超过矩形容器高度时,提示“游戏失败”信息并停止。 要点分析本题主要涉及到的知识点有:键盘消息、菜单、随机函数、定时器和序列化。同时也需要有画笔画刷使用,动态存储空间的分配与回收等工作,难度偏大。该题的部件以及已经停止的部件均用小方格来表示。整个游戏区域对应一个二维数组,数组为时,表示空白,为时表示已有方格。该数组

3、存储所有已经不能再移动的部件。部件采用一维数组来表示,这些一维数组实际是一个nn的矩阵。如表示一个方块使用一个2的矩阵,实际存储为(1, 1,1, 1);则表示一个长条使用一个4的矩阵,实际存储为(0,, 0, 0, 0,1, 0, 0, 0, 1, 0,0)。实际显示的时候,先画出已停止的方格,然后换算出正在下落的部件的正确坐标位置并将其画出.旋转部件时,变换存储部件的矩阵,使其对应为旋转后的形态。判断部件是否可以下落、旋转、左移或右移时,将表示部件的数组对应到游戏区域的二维数组中,再判断是否允许改操作。当部件无法再动时,将部件数组中对应项填入游戏区域对应的二维数组中。使一层消失可以通过判断

4、游戏区域的二维数组是否某一行全为1;如果该数组的第一行有一项为1或者已没有空白使新的部件可以加入到游戏区域中,则游戏结束。3。 解题步骤()首先用ApWzrd生成一个名为usBlok的SDI程序框架,其他选项均可用缺省设置。(2)在“RsouceVew”中选择Menu资源项中的菜单ID“IB_INFAME”,双击,增加“游戏”菜单,并在其中增加“开始和“结束”菜单;再增加“难度菜单,在其中添加“容易”、“普通和“较难菜单,如下表1,设置了菜单的属性。利用ClssWiza自动添加菜单的Comad消息处理函数.表1 菜单属性IDationrmptD_GE_TRT开始游戏开始I_GAEN结束游戏结束

5、I_LVL_ESY容易_LEVEL_NRAL普通ID_LEVHA较难()在视图类上单击鼠标右键,打开“Add Wdow MessageHnder”对话框,添加键盘和定时器事件。(4)完成以上工作后,即可在生成的程序框架中添加必要的代码.源程序清单:(1)在视图类的头文件中定义宏、类成员变量和自定义类成员函数。efineAXCOM 7/ 部件数define I 13 / 游戏区域宽dene HIGH / 高eine SIZE12/ 组成游戏区域的方格大小#dfieO 0/游戏左上角坐标defie LET 5#defi EAS00 /游戏难度#efine ORAL30defin HRD 200ty

6、peef struct tagompnetit intCom;/ 部件的ID号t tision; /存储该部件所需的数组维数int pitArray;/ 指向存储该部件的数组 Coponet;cass CRsBlcViw:public CVew/此处略去若干行系统生成的代码priat:int m_inComI; 当前下落的部件it m_inSt HIH WIDE; / 当前状态Coponetm_Componts MAXOM;/ 所有部件的内部表示tm_ntScore;/ 分数int mntLvel;Compet mCretCm; / 当前的部件POIT ptIne; / 部件数组在全局数组中的

7、索引void ewComponet(vid);/ 产生一个新的部件bol Caown(void); / 是否还可以下落voidMyInaliateRet (PON tStrt,int ntDimension); /刷新函数void Disppear (void); / 消去行bool Ceckal (void); / 判断游戏是否结束bl CaRoat (vod); / 是否还可以旋转 CaLft (vod);/ 是否还可以左移bo Cnigh (voi);/ 是否还可以右移/检查是否有足够的空位显示新的部件,否则游戏结束l CanNew ( );(2)在类构造函数中创建记录部件形状的数组。u

8、Blokiew:RsBlocw()or (int i 0;i HIGH; +)r (nt j 0; IDE;j +)m_inttat i j= 0;m_intLeve=NORMAL; / 初始化难度sran ( (unsigne)time(NUL)); /初始化随机数m_nScor= ;CurrntCom。inomD = ;_CurntCom.intDienson = 0;mCrrenCom itAray = NUL;/ 初始化7个部件/:方块_Cmponets0.ntmD= ;m_Compnts 0. intDimenon ;m_Comonet 0。 intAry w in4;for (i=

9、 0; i ;i +) _omponet。pinAryi = 1; / 1/ 1_Copnets 1. itComID =;Componet 1。nDenson= 3;mompoets 1. pintAray = new int9;m_mponets pintArray 0 = ;m_Cmonets1.ptrry = 1;Compnet 1。 pitAry 2 =0; / 0 0m_Compon 1。pitArray 3 = 1; / 11mComonets1.pntArray 4 =1;/0m_Compoes 。 pintrry 5 ;m_Comoes 1. pntAra6= 0;_Comp

10、onets1.pintArray 7 =0;m_Comonet iAray 8 = 0;/2_Cmpoet 2intCmI= 2;poet2。 itDmenion = 3;m_CompoetpitArray new int 9;m_Cmponet 2. ry 0 = 1;m_oonts 2。pinArray1= 0;m_Compoes 2。 nrray 2 =0; / 0 m_Compnes 2。 inArray 3 = 1; / 11 0_Componet2。 pitArray4 = ;/ 1 0_Copnts 。 pitArray5 =0;m_Cmots 2.pnray 6= 0;_Com

11、pnts 。 pintray 7 = 1;mCmpoet 2.pntAray =0;/ 3momts 3。 intComID = 3;m_Compnets 3。 Diension 3;_Coonets3.pitAray new it9;ompots 3. pntray 0=0;_Copone。 pntAry = 0;m_omponet 3. pntray ; / 00 1mComponets 3. pitAray 3 = 0; / 01_ompets 3.itAra 4 = 1; / 0m_Componets 3. nAr = ;_Componets 3。 pintArry 6 = 0;m_C

12、pones 3. nAray = 1;m_mpoets 3。 inAy8= 0;/ 4m_Comoets4intComID = 4;momponet . intinsn = 3;mCmonets . pntrry =nw int 9;m_opons 4 intray 0 1;mCmpoet 4。 pintrray =0;m_omponts 4. pinArray 2 = 0;/ 1 0m_ompoets 4 pitArry 3 = 1; / 11_Compets . itArray4 =1;/ 0 0m_Comones 。 pintrray 5 =1;mCmponet 。 pintArr 6=0;m_Compet。 pntAray 7 =0;m_ompoets 4. nArry =0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号