用VC++实现俄罗斯方块的程序的设计说明

上传人:枫** 文档编号:564369805 上传时间:2023-06-06 格式:DOCX 页数:19 大小:225.69KB
返回 下载 相关 举报
用VC++实现俄罗斯方块的程序的设计说明_第1页
第1页 / 共19页
用VC++实现俄罗斯方块的程序的设计说明_第2页
第2页 / 共19页
用VC++实现俄罗斯方块的程序的设计说明_第3页
第3页 / 共19页
用VC++实现俄罗斯方块的程序的设计说明_第4页
第4页 / 共19页
用VC++实现俄罗斯方块的程序的设计说明_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《用VC++实现俄罗斯方块的程序的设计说明》由会员分享,可在线阅读,更多相关《用VC++实现俄罗斯方块的程序的设计说明(19页珍藏版)》请在金锄头文库上搜索。

1、课程设计课程名称:程序设计课题名称: 俄罗斯方块游戏的设计 班 级: 计算机学院09-1BJ班完成人:曾灵芝(14092400558)扌旨导教师:甘靖理工学院计算机学院2011年4月14日用VC+实现俄罗斯方块的程序设计、课程设计的目的与要求1.1 课程设计的目的综合运用所学知识,熟练掌握 VC+程序设计的编码与 MFC!架结构。1.2 课程设计的要求要求用VC + +设计与实现俄罗斯方块游戏。要求包括系统的需求分析;系统总框 图及每个模块的设计分析; MFC应用程序架构;框架的扩展;算法的设计与实现;游 戏的部实现 ; 游戏区域绘图的实现;系统存在的问题及错误处理;列出所有定义的函数 及说明

2、;附上程序源代码。二、设计正文2.1 需求分析2.1.1 游戏需求随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一条便消掉,记分,当达到一定的分数时,过关, 设置六关,每关方块下落的速度不同,若在游戏中各形状填满了给定区域,为输者。 游戏功能要求如下:2.2.2 游戏界面需求 :良好的用户界面,有关数显示和分数显示。让方块在一定的区域运动和变形, 该区域用一种颜色表明 , 既用一种颜色作为背景 ,最好设为黑色。还需用另一种颜色把黑 色围起来 , 宽度适中,要实现美感。2.1.3 游戏形状 (方块)需求:良好的方块形状设计,绘制七种常见的基

3、本图形(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。2.2算法分析2.2.1程序流程图13.GameE nd(V、新游戏3.Gamestart()丁游戏结束游戏开始6.invalidatecurren *t()4.DrawGame()、9新7.0 nTimer()否下一 个图彳行/广、!E达到指定位、按键 、5.RectDow n()8.GamePaush9.0n Draw()置10.lsBottom()达到指定位置按向上键信图2.2.3程序运行调用图显示息11.KeyDow n(12.RectCha ng1.Ma

4、i n()f2.Rect,iew()2.2.2定义方块的数据结构对于方块在某一瞬间的位置标识,我们采用一个4X2的小数组标识出来,即用4个存储单位空间存储当前下坠物的每一子块的位置,也就是说,用4个存储单位空间存储当前下坠物的每一子块的位置来对整个下坠物件的位置进行标识,而每个存储空间的大小就是一个典的坐标值(x,y),而每个方块按照从左到右的方式进行编号,并且在编号过程中对于同一列的方(xo,yo)(xi,yi) 1(X2,y2)(X3,y3)(X0.V0)(X1,y1)(X2,y2)(X3.V3)块实行从上到下进行编号图3.1方块编号2。ActiveStatusOO 和ActiveStat

5、us01 则是第0号方块的横坐标 x和纵坐标y ;ActiveStatus20 和ActiveStatus21 则是第2号方块的横坐标 x和纵坐标y。2.2.3 游戏设计分析有前面的功能描述可知,我先虚拟出俄罗斯方块游戏的类对象,并抽象出核心的数据 属性和操作方法等,然后再作细化,最后将整个虚拟类的外壳脱掉,再移植到视图类中去, 其实现如下:CRectGameView : public CView/ 部存取数据结构int m_stateMapMAX_ROWMAX_COL;/ 初始化操作GameInitnal(); / 游戏的初始化/ 用于判断数据相关状态的操作IsLeftLimit(); /

6、IsRightLitmit(); / IsBottom(); / IsGameEnd(); /下坠物件是否可向左移动是否已经到达了底部是否游戏已经结束/ 方块物件下坠过程中的操作RectChange(); / RectDown(); / RectArrow(); / / 状态控制操作 GameStart(); / GamePause(); / GameEnd(); /下坠物件变形下坠物件正常下落下坠物件方向移动 ( 左,右,下加速)游戏开始游戏暂停游戏结束通过上面的代码可以看出,在虚拟类中抽象出了核心的部数据和一些基本的操作函 数。对于操作函数,可以把它们分为部实现的基本核心操作(如判断操作)

7、以及明显提供给 外部使用的整体模块外部操作(如状态控制操作)。而部的基本操作又可以分为判断操作和 执行操作这样两种类型 3 。三系统设计3.1创建界面的主框架首先建立一个项目工程,名为skyblue_Rect,并在AppWizard的架构选择过程中选择单文档方式,其他保持默认选项。其项目的架构类视图信息如图所示:在构架类视图中是 MF(基本架构组合:App (应用程序)类、Document(文档)类、View(视图)类、Frame(框架)类和用于提示关于作者的对话框CAboutDlg类,至于COptionDlg类是用作俄罗斯方块参数选择的对话框类对象。I J2L l=j bkyLlucljat

8、iKeM1J CAb oulDIg lJ 帀5 CMainFramc 由 P COptionDIg 由 CSIkyblvcRcctApp 包 F CSIkybluc ReclDoc 叶I F CSkvhlajrr Hnr-tView .+1 l I Glnhals3.2正常流程的设计3.2.1 定时制机制从分析游戏的特性可以知道,定时器的产生与生效应该在游戏开始的时候,而在游戏暂停或者游戏结束时则将已经设定的定时器失效/销亡(对于暂停的情况,使它销亡,当游戏从暂停状态又进入游戏状态时候,则重新创建一个定时器并激活它的运作),所以分别在游 戏的开始函数、暂停函数已经结束函数中实现定时器的激活与去

9、激活工作。这里,先在资源 编辑器菜单资源里面添加三个菜单选项,分别是游戏的“开始”、“暂停”、和“结束”, 然后利用ClassWizard直接在视图类对象 Cskyblue_RectView中为它们添加空白的处理函数, 具体如表2所示。3.2.1菜单选项功能对应表菜单选项名称快捷键资源ID响应处理函数开始游戏&SID_GAME_STATOn GameStart()暂停游戏&PID_GAME_PAISHOn GamePaush()结束游戏&EID_GAME_ENDOn GameE nd()322定时处理经过定时器的设置后,这里通过利用ClassWizard跳到定时器到时候的处理函数OnTimer

10、()去实现,当固定时间片间隔到达后,先检测当前下坠物是否已经到达了底部,不 是则进行 RectDown()下坠物向下移动一个单位的操作,是则到底后产生一个新的下一个 下坠物”,并代替旧的,将原先旧的“下一个下坠物”用作当前激活状态下正在使用的下坠 物,并对使用后的一些状态进行检测:是否马上到达底部,使则进行销行操作;是否在到达底部的同时到达游戏区域的顶部,从而判定游戏是否因违规而结束。共有七种形状,并从7种方块中随机抽取图形。而m_currentRect除了记录下坠物的类型外还需记录其当前的变形状态,最多用两位表示,第1位用作类型标识(17),第2位用作同种类型的不同表现方式,最多有4种状态(

11、14)。在产生新的下一个下坠物前,需要先将当前状态物的记录和旧的下一个下坠物保存下来,然后用随机函数Ran dom()产生一个最大值不大于指定值的随机正整数,将这个新生成的正整数用作新的“下一个下坠物”的形状值。四、系统实施4.1底部到达的判断与销行的实现图3.2.3处理方块到达图将新的下坠物放置到游戏区域中去,这时可能出现马上到达底部的情况,因此需要对它进行判断,如果是到达底部,则进行销行处理,并且修改相应的数据状态。而判断是否已经到达了底部,可以通过当前下坠物件所对应的接触面的方块位置为被占用状态(MAP_STATE_NOT_EMPT来确定,利用数组 InterFace744 记录17种下

12、坠物的14 种形态的接触面信息。统计分数:在消行处理里面有一个专门用来统计消行数的变量,然后根据变量的值决定分数的多少,程序统计分数是:消一行得100分,同时消2行得400分,销掉x行,则分数为:x*(x*100)。如果总分数达到过关条件就过关,改变游戏速度,游戏初始化,开启新 的一关,然后再加载方块。没有达到过关分数或者没有满行,则加载下一个方块继续游戏。4.2 中断操作流程的实现( 1) 处理键盘事件关于按键命令消息的响应,可以通过对WM_KEYDOW息的处理函数进行截获并重写来实现,下面是对该处理函数On KeyDow n()的重写。/ 功能:处理用户的输入,方块的左,右移,加速及变形v

13、oid CSkyblue_RectView:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)switch(nChar)case VK_LEFT:RectArrow(LEFT);break;case VK_RIGHT:RectArrow(RIGHT);break;case VK_UP:RectChange();break;case VK_DOWN:RectArrow(DOWN);break;CView:OnKeyDown(nChar, nRepCnt, nFlags);4.3 变形的实现当按下向上键时,将会执行方块变化事件 (change() )。

14、常见的方块有 7种(长条形、 Z 字形、反Z形、田字形、7字形、反7形、T字型),所有图形都是用两个一维数组来统计它 的横坐标和纵坐标,每个方块有 4 种不同的变化形状。例计算变形后的小方块的坐标和显示的状态值/ 变形后位置在数组中的存放顺序仍需遵循先左后右,在同一列中先上后下xx1=x1; xx2=x2; xx3=x3; xx4=x4; yy1=y1; yy2=y2; yy3=y3; yy4=y4; switch(m_currentRect)case 1:xx1=x1+1; yy1=y1-1; xx3=x3-1; yy3=y3+1; xx4=x4-2; yy4=y4+2; m_lscurrentRect = 11;break;case 11:xx1=x1-1; yy1=y1+1; xx3=x3+1; yy3=y3-1; xx4=x4+2; yy4=y4-2; m_lscurrentRect = 1;break;/ 省

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

当前位置:首页 > 学术论文 > 其它学术论文

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