俄罗斯方块设计步骤

俄罗斯方块设计步骤

ID:19889501

大小:105.00 KB

页数:25页

时间:2018-10-07

俄罗斯方块设计步骤_第1页
俄罗斯方块设计步骤_第2页
俄罗斯方块设计步骤_第3页
俄罗斯方块设计步骤_第4页
俄罗斯方块设计步骤_第5页
资源描述:

《俄罗斯方块设计步骤》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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

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

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

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

5、的Command消息处理函数。 表1菜单属性IDCaptionPromptID_GAME_START开始游戏开始ID_GAME_END结束游戏结束ID_LEVEL_EASY容易 ID_LEVEL_NORMAL普通 ID_LEVEL_HARD较难  (3)在视图类上单击鼠标右键,打开“AddWindowMessageHandler…”对话框,添加键盘和定时器事件。(4)完成以上工作后,即可在生成的程序框架中添加必要的代码。源程序清单:(1)在视图类的头文件中定义宏、类成员变量和自定义类成员函数。#defineMAXCOM7//部件数#defineWIDE13//游戏区域宽#defin

6、eHIGH26//高#defineSIZE12//组成游戏区域的方格大小#defineTOP50//游戏左上角坐标#defineLEFT50#defineEASY500//游戏难度#defineNORMAL300#defineHARD200 typedefstructtagComponet{intintComID;//部件的ID号intintDimension;//存储该部件所需的数组维数int*pintArray;//指向存储该部件的数组}Componet; classCRusBlockView:publicCView{//此处略去若干行系统生成的代码private:intm_i

7、ntComID;//当前下落的部件intm_intState[HIGH][WIDE];//当前状态Componetm_Componets[MAXCOM];//所有部件的内部表示intm_intScore;//分数intm_intLevel;Componetm_CurrentCom;//当前的部件POINTptIndex;//部件数组在全局数组中的索引voidNewComponet(void);//产生一个新的部件boolCanDown(void);//是否还可以下落v

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。