俄罗斯方块之四——四格拼板的冲突和限制
四格拼版是有自己的活动区域限制的,而且还有和其它的四格拼板的冲突问题。这其实就是我们所玩的俄罗斯方块游戏的规则问题。
1、初始化位置规则
对于俄罗斯方块游戏,我们设置每一个四格拼板的起始位置,也就是四格拼板的中心位置,是在游戏区域的中上方位置,这没有任何异议。
但是四格拼板是由四个小方格组成,并不是所有的四格拼板只占有一行位置,其中心位置在游戏区域的中上方显示出来之后,组成四格拼板的其它小方格由于在游戏区域的二维数组中占有的是下标为负数的位置,哪个根据 Python 列表的下标特性,其所呈现的结果并不是我们所想象的位置。如下图:
四格拼板错位](images/05-01.png)
上图所示是一个倒 T 字型的四格拼板,在游戏区域的中上方显示出其中心位置做在的那一行的小方格之后,由于其中一个小方格所在的二维数组中的坐标位置行数是 -1,根据列表的特性,是显示在最后一行的位置,明显不符合我们的预期。那么我们就需要做一个条件限制,来屏蔽坐标为负数的小方格的显示。
2、左右规则
这个应该容易想象出来,就是我们在控制四格拼板左右移动的时候,四格拼板不能超出游戏区域的范围。这需要我们在设计程序的时候,要注意游戏区域的二维数组的边界问题,不能让组成四格拼板的小方格所对应的列位置有负数或超出列的最大值。
此处要注意一点,就是四格拼板在到达左右边界之后是无法再或左或右运动了,但是其可以继续自由滑落,并不是停止运动。
3、底部规则
底部规则其实有三个细节要求:
- 四格拼板滑落到游戏区域底部之后,要停止运动。
- 新的四格拼板要从初始位置继续滑落。
- 旧有的已滑动到底部的四格拼板要一直显示。
4、冲突规则
冲突规则要注意以下三个细节要求:
- 四格拼板遇到向下位置的四格拼版的时候,要停止运动。
- 遇到左边或右边位置的四格拼板的时候,无法再向左或向右,只能继续滑落。
- 四格拼板的变形要遵守以上两条规则。
不管是向下,向左,向右或变形,我们在设计程序的时候,不是要提前判断其下一步动作是否冲突,而是等四格拼板事实占据该位置之后,再判断该位置上是否与其它四格拼板发生了冲突。
5、滑落规则
四格拼板在符合以上规则的时候,会继续滑落,其实在程序设计当中就是将二维数组中的横坐标,在每次循环加一即可。
6、满行规则
四格拼板停止滑落,固定在游戏区域中之后,如果满行,将清空改行的小方格,改行位置以上的内容自动下滑一行。
代码实现的思路,是将二维数组反序排列,从行数较大的位置开始筛查,遇到满行之后清空,并将行数较小位置向较大位置移动。