1、 1 用用 C+C+实现的俄罗斯方块程序设计实现的俄罗斯方块程序设计 一、一、 需求分析。需求分析。 1.1、游戏需求、游戏需求 随机给出不同的形状(长条形、Z 字形、反 Z 形、田字形、7 字形、反 7 形、T 字型)下落填充给定的区域,若填满一条便消掉,记分,当达到一定的 分数时,过关,设置四关,各关下落速度不同,若在游戏中各形状填满了给定区 域,为输者,弹出相应提示。 1.2、游戏界面需求、游戏界面需求 良好的用户界面,有关信息显示(如操作方法、等级等)和分数显示。 让方块在一定的区域内运动和变形,该区域用一种颜色表明,即用一种颜色作为背 景,本游戏的背景设为黑色。还需用另一种颜色把黑色
2、围起来,宽度适中,要实现 美感。而不同的方块用不同的着色表示,使游戏界面更加清晰、有条理。消层时 采用一定的时间延迟,增加视觉消行的感官效果。 1.3、游戏方块需求、游戏方块需求 良好的方块形状设计,绘制七种常见的基本图形(长条形、Z 字形、 反 Z 形、田字形、L 字形、反 L 形、T 字型)以及另外本程序另外加入的点形方 块,各个方块要能实现它的变形,可设为顺时针或逆 时针变形,一般为逆时针。 为体现游戏的趣味性和扩展性,本游戏象征性的增加了点形方块,其他更多形状 的方块可用类似方法增加。 1.4、游戏控制的需求、游戏控制的需求 游戏控分为多个方面,包括画面绘制,控制命令的获取,控制命令的
3、分 配、控制命令的处理,方块的绘制,方块的移动,方块的旋转,方块下落和消层 以及计分等。对各个命令的合理处理和综合控制十分重要,一旦出错可能导致整 个程序的崩溃,因此需要小心设计。 二、 系统设计系统设计。 2.1、程序流程图、程序流程图: 2 到 达 开 到 达 底 部, 到 达 底 结束 销行操作 生成下一个下坠物 将新生的下坠物代替旧的“下一 个下坠物“ 将旧的“下一个下坠物”用作当前 下坠物 销行操作 游戏结束处理 下降一个单位 开始 3 2.22.2、游戏设计概述、游戏设计概述 从整体上而言,在该游戏可设计一个方块类,其中包括对方块的信息描 述(如:ID)、方块的操作(如:旋转、下沉
4、) 。再设计一个控制类,实现各种控 制(如:获取控制信号,分发控制信号) 。另定义一个游戏区类,用以处理游戏 区绘制等内容。框图如下: 方块类(GAME_BLOCK) Private: BLOCKINFO g_CurBlock; (新方块) BLOCKINFO g_NextBlock; (下一方块) Public: GAME_BLOCK () GAME_BLOCK () void NewBlock();/生成方块 bool CheckBlock(BLOCKINFO _block);/检测方块能否放下 void DrawBlock(BLOCKINFO _block,DRAW_draw=SHOW)
5、; void OnRotate();/旋转方块 void OnLeft();/ 左移方块 void OnRight();/ 右移方块 void OnDown();/ 下移方块 void OnSink(CGAME / 沉底 方块 BLOCKINFO BLOCKINFO 4 游戏控制类(CGame) Private: Void DispatchControl(CTRL); Public: void InitGame();/初始化游戏 void Start_Game();/开始游戏 void Game_Over();/游戏结束 void NewGame();/新游戏 void Quit_Game()
6、;/退出游戏 CTRL GetControl(bool _onlyresettimer = false);/获 取控制命令 在主函数中(按照 2.1 中框图) ,先通过控制类初始化游戏,再通过随机 时间函数获得一个随机数,该随机数确定一个方块,即用该随机数产生一个 ID 从而确定产生的为方块。然后从键盘取得各种操作信号,通过控类函数对操作信 号进行分发、处理,进而控制方块的行为改变。与此同时,监控游戏区中已有方 块的状态,一旦满足消行即进行消行控制,同时进行计分和等级划分,而如果游 戏区已满则游戏结束,弹出提示。而对界面和方块的展现主要通过第三方软件 EasyX 实现,通过其画图位置的改变与时间的结合达到方块视觉移动的效果。 2.32.3、定义方块的数据结构、定义方块的数据结构 方块是本游戏的基本要素,对于方块的设计,本游戏用 4*4 的矩阵画出 来,在相应的位置置为1和0以实现各种方块的形状,以“立 L 形”为例 如下: 0 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 而在程序设计中则赋予