1.17 俄罗斯方块游戏

1.17 俄罗斯方块游戏

基本问题:

1 如何设计各种数据结构来表示游戏中的各种元素,如每一个可活动的积木块,在底层堆积的积木等

  • 首先用一个二维数组\(area[M][N]\)来表示\(M*N\)的游戏区域,其中,数组中值为0表示没有积木块,1表示有积木块
  • 积木块也用数组表示,但是由于积木块的尺寸不同,并且旋转后的尺寸也有可能发生变化,如果为不同的积木设计不同尺寸的数组,则可能造成程序管理的混乱,因此采用统一尺寸的数组来容纳所有的可能的积木块,\(4*4\)的数组可以满足要求
  • 积木块一共7种,每一种积木块4个方向\(BlocksSets[7][4][4][4]\)表示7中积木块的4个旋转方向的形状
  • 旋转之后积木的形状\(rotatedBlock = BlockSets[n][m%4]\)\(m\)为旋转的次数
  • 如何判断方块的水平移动范围,我们记录木块左上角相对于游戏区域的唯一,并且要考虑积木块有可能无法占满\(4*4\)的数组

2 现在已经知道了底层积木的状态,然后在游戏区域上方出现了一个新的积木块,如何运用刚才设计的数据结构来判断新的积木要如何移位和旋转,才能有效率的消除底部累计的积木?

采用积分制进行量化,具体来讲就是如果这种摆放达到了某要求就增加一定的分数,反之扣除。

3 有些版本有一个预览窗口,从预览窗口可以看到下一个积木块是什么样子,如果有了这个新的参数,我们如何改进程序,才能够有效额消除底部累积的积木?

穷举法依然适用,但是估计要经历剪枝减少时间的复杂度

posted @ 2020-12-02 11:07  BOTAK  阅读(90)  评论(0编辑  收藏  举报