俄罗斯方块 1. 简介 俄罗斯方块(Tetris, 俄文:Тетрис)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。 2. 游戏设计 1. 流程图 俄罗斯方块的流程相对比较简单,游戏开始时,方块按照一定的时间间隔下落,然后要根据用户的操作发着改变,还要验证操作的合法性(判断越界),最后就是要消行计分了。其流程图如下所示:
2. 设计思路 1.盘的设计 首先要解决的是显示问题。如何正确的在屏幕上显示俄罗斯方块呢?我们可以注意到其实每一种俄罗斯方块都是由小方块组成的,而要在屏幕上正确显示方块,就要在正确的位置画出小方块就好了。而要做的就是用一个二维数组来保存要显示的方块(如图2-2)。这样二维的格子中,哪一个格子被现有的方块占据了就把它标为非0,空的就为0.然后在画的时候判断格子状态,就可以实现方块的显示了
2.方块的设计 传统的俄罗斯方块主要包含七种方块。如图2-3所示。
从图2-3我们可以看出,其实每个方块都是由四个小方块组成,这样我们就可以用4*2的数组来保存一种方块的位置,保存组成的四个小方块的行和列。再加一个变换的标志,用来保存当前类型的方块的变换形态。 3.游戏逻辑 初始化之后游戏开始,随机创建一个方块类型,计算它的边界,这个边界,包括它的左边界(用来检测是否有碰撞),右边界(用来检测是否右边是否有碰撞),下边界(用来检测下方是否有碰撞),并将其放置到网格盘上,设置方块的下落时间,这个时间就可以作为等级的标准了。每间隔一个时间,就让方块下落一格,这个就可以通过设置方块的4*2数组来实现了(每次让行数加一)。 在下落过程中要检测按键输入,根据按键来进行方块的变形和移动,但这些操作都要检测其有效性,即是否操作完会有碰撞。最后当方块落地后,要检查是否可以消行,对方块所占的行进行检测,如果可消,就将此行消掉,然后将上面所有行下降一行并进行计分,最后将下一块的方块类型赋于当前方块,开始新的方块的下落。 4. 3. 类图
主要设计了四个类,一个是CGameEngine,用来封装一下HGE的一些函数,CListener的作用是具体实现了HGE的FrameFunc和RenderFunc。CGameBoard就是主要发生游戏逻辑的地方了,一个描述俄罗斯方块所在的盘(估且这么叫)的类。CBlock就是方块的类了,总共包括了七个类弄的方块。 3. 游戏效果
4. 不足之处 1. 界面太丑,且没有UI 2. 没有声音和消行的效果 3. 感觉类的设计还是有点耦合。 下载地址: |