1、 1 一、一、题目题目 利用 C+编写俄罗斯方块游戏,是俄罗斯游戏能够在 Microsoft Visual C+ 6.0 上运行该游戏。 二、二、实验目的实验目的 一方面通过对程序算法的设计和分析提高我们对问题进行文字论述和文字 表达的能力并且培养我们进行知识综合,软件开发和软件的调试技术,开发较大 程序的能力。 另一方面培养了我们相互合作的精神并培养了我们的创新意识。 三、三、需求分析需求分析 功能需求功能需求 随机给出不同的形状下落填充给定的区域,若填满一条便消掉,记分,设 计不同的游戏难度, 即方块下落的速度不同, 若在游戏中各形状填满了给定区域, 为输者。 方块及各种变换需求方块及各种
2、变换需求 本游戏需要有 7 种方块,而每种方块还可以进行旋转。每种方块每行每列 最多只有 4 个小方块。可以将它们放在一个 n*m 的区域内,该区域可以看作是 有许多个等面积小方块构成的区域,而这些区域的状态只有两种,被方块占据或 空闲。因此,对于整个游戏区域的空间是占据或空闲,可以用一位数来标识。对 于 7 种方块和它们旋转后的形态我们可以用不同的标识进行标记。对于旋转,游 戏中所有方块都是按照逆时针旋转的规则进行的, 而且在旋转过程中它们不会因 为旋转而下降, 总会保持在同一高度。 任何方块经过一个旋转周期还会变回原型。 操作的需求操作的需求 向上键 产生方块旋转操作,方块并非任何情况都能
3、旋转,如果旋转后与小方格矩 阵显示的方块有冲突或超出边界时,均不能发生旋转。因此首先要判断是否有足 够的空间进行旋转。然后选择是否旋转。 向下键 产生方块加速下落操作,如果方块已经到达游戏区域底部或者已经有其他 方块遮挡,则方块停止下降。 向左键 产生下落方块左移操作。首先要判断此方块是否能够发生左移,当越界或 被其他显示方块阻挡时,则不能左移。 向右键 2 产生下落方块右移操作。首先要判断此方块是否能够发生右移,当越界或 被其他显示方块阻挡时,则不能右移。 四、四、详细设计详细设计 主要功能设计主要功能设计 根据分析, 俄罗斯方块这个程序一共要实现如下几个功能, 开始游戏 (F8) 、 游戏
4、的暂停继续(S)和退出游戏(Q)。其中游戏控制最为主要和重要,它控制着 整个游戏的画面和有关数据的操作,是游戏的核心部分。暂停和退出功能做成一 体,在退出的提示下不做任何操作即可实现暂停的功能。 程序流程图程序流程图 根据分析后的程序结构图设计出相应的流程图。俄罗斯方块的内容主要包 括游戏开始,画背景和边框,显示分数等级和下一个方块的预览图;根据速度没 隔一定时间方块自动下落,当有按键操作时,根据相应按键执行动作,每次动作 前要判断是否动作可以执行。下落方块满一行时,消去该行,根据消去行数得到 相应分数。分数达到一定程度,等级提升,速度加快。同时可以响应 Esc 按键, 提示是否退出程序。 3
5、 游戏界面游戏界面 俄罗斯方块的游戏界面包括游戏区域边框、下落方块绘制、右部计分和预 览图显示等。 游戏区域边框的绘制比较简单,循环中确定光标的位置输出特定字符,即 可完成边框绘制。游戏区方块的绘制,循环从数据数组中依次读出数据,根据读 4 到的数据显示“” ,最后组成方块的形状,完成方块的绘制。计分和预览图部 分先画出一个矩形区域,然后控制光标在其中显示分数、等级、预览图和提示信 息。 生成方块生成方块 本程序中生成的方块有 7 种形状,每一种方块以 shapeindex 标记,在程序 运行生成方块时,调用 shapeindex=rand()%5+1;语句,确定当前要显示的是哪 一个方块形状
6、。而在实际运行中,第一次需要调用两次生成方块函数 make(), 将先产生的赋给游戏当前方块, 第二个赋给预览图方块。 以后每次产生一个方块, 把预览方块赋给当前方块,把新产生的赋给预览方块。 方块变形方块变形 俄罗斯方块的特点就在于通过方块的变形拼满整行来消去该行方块从而使 游戏可以继续下去,很难想象不能变形的俄罗斯方块是什么样子。而变形的过程 就是根据当前方块形状改变方块的相对位置,这样就可以改变方块的形状了。在 程序中每当按下“”键,程序判断可以变形后,根据当前方块的形状序号 shapeindex和变化形状序号changeindex调用相应的方块数值赋给draw()函数, 通过刷新重画就可以显示变化后的方块了。 方块显示方块显示 以上方块的操作都是数据层面的操作, 而真正要在游戏窗口中看到数据的 变化,还必须把方块不断的绘制出来。这就是 draw()函数的作用。把当前运动 的方块对应节点存储在一个 4*4 数组里, 变形和生成方块的过程就是更新该数组 数据的过程。然后在 draw()函数里检测数组的各个值,并控制光标跳到一定位 置