需求分析
俄罗斯方块游戏产生多种形状的方块。这些方块通过方向键的控制产生旋转,左右移动和加速前进,方块自动往下掉直到遇到下面已经有方块挡住停下来。如果一行完全排列满,消掉,如果排列到了顶部,游戏失败。
核心思路
- 把所有的方块看成一个4*4的二维数组,有“砖”的地方表示为1,没有“砖”的地方表示为0;背景看成是14*20的二维数组。
- 游戏流程:随机从方块的4个4*4的矩阵中挑选出来一个,并且随机的挑选一个他的初始化状态(对于状态变化,我们同样可以把他们表示在一个4*4的矩阵中)。然后这个被挑选的矩阵,在一个14*20的矩阵中不断的按照一种速度进行往下运动。同时可以使用方向键使得它可以左右运动,并循环的变化他的状态。如果这个矩阵在运动的方向上遇到了数值为1的时候则停止运动,在左右运动上表现为不能移动,在往下运动的时候则表现为这个方块运动的结束。把这个矩阵的数值复制到背景矩阵中去。这时检查背景矩阵,如果背景矩阵中有一个行全部为1,那么在y轴上比该行小的所有行向下移动一行,用户得分增加100,判断得分是否超过游戏胜利临界值。检查所有的行,并且做同样动作。检查完成后,进入下个方块的随机挑选,下落。当某个方块下落完成的时候。他的y坐标在背景中为0的时候。游戏结束。作为游戏的界面,我们需要在游戏的状态发生改变的时候,把背景矩阵和运动矩阵都绘制出来。数值为0的地方不绘图,数值为1的地方绘制图片。
实现细节
- form响应键盘事件需要先将KeyPreview属性设为true
- 注意一局游戏结束后要将相应的变量清零或重新赋值