俄罗斯方块

1.    简介

俄罗斯方块(Tetris, 俄文:Тетрис)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。

2.    游戏设计

1.    流程图

俄罗斯方块的流程相对比较简单,游戏开始时,方块按照一定的时间间隔下落,然后要根据用户的操作发着改变,还要验证操作的合法性(判断越界),最后就是要消行计分了。其流程图如下所示:

 

2-1流程图

 

 

 

2.    设计思路

1.盘的设计

首先要解决的是显示问题。如何正确的在屏幕上显示俄罗斯方块呢?我们可以注意到其实每一种俄罗斯方块都是由小方块组成的,而要在屏幕上正确显示方块,就要在正确的位置画出小方块就好了。而要做的就是用一个二维数组来保存要显示的方块(如图2-2)。这样二维的格子中,哪一个格子被现有的方块占据了就把它标为非0,空的就为0.然后在画的时候判断格子状态,就可以实现方块的显示了

 

 

2-2 显示方块的格子板

 

 

 

2.方块的设计

传统的俄罗斯方块主要包含七种方块。如图2-3所示。

 

 

2-3 方块类型

 

从图2-3我们可以看出,其实每个方块都是由四个小方块组成,这样我们就可以用4*2的数组来保存一种方块的位置,保存组成的四个小方块的行和列。再加一个变换的标志,用来保存当前类型的方块的变换形态。

3.游戏逻辑

初始化之后游戏开始,随机创建一个方块类型,计算它的边界,这个边界,包括它的左边界(用来检测是否有碰撞),右边界(用来检测是否右边是否有碰撞),下边界(用来检测下方是否有碰撞),并将其放置到网格盘上,设置方块的下落时间,这个时间就可以作为等级的标准了。每间隔一个时间,就让方块下落一格,这个就可以通过设置方块的4*2数组来实现了(每次让行数加一)。

在下落过程中要检测按键输入,根据按键来进行方块的变形和移动,但这些操作都要检测其有效性,即是否操作完会有碰撞。最后当方块落地后,要检查是否可以消行,对方块所占的行进行检测,如果可消,就将此行消掉,然后将上面所有行下降一行并进行计分,最后将下一块的方块类型赋于当前方块,开始新的方块的下落。

4. 

3.    类图

 



 

 

主要设计了四个类,一个是CGameEngine,用来封装一下HGE的一些函数,CListener的作用是具体实现了HGEFrameFuncRenderFuncCGameBoard就是主要发生游戏逻辑的地方了,一个描述俄罗斯方块所在的盘(估且这么叫)的类。CBlock就是方块的类了,总共包括了七个类弄的方块。

3.    游戏效果

 


第一版的游戏效果图

 

 

4.    不足之处

1.    界面太丑,且没有UI

2.    没有声音和消行的效果

3.    感觉类的设计还是有点耦合。


下载地址:

http://download.csdn.net/detail/sunstar1989/4095189