三截俄罗斯方块旋转公式公式

(封面截图系统在线访问地址:)

不少同学都写过俄罗斯方块旋转公式作为练手项目本文整理了与俄罗斯方块旋转公式实现相关的算法。

与AI相关的算法相对复杂一些其他的算法则是跟游戏主流程相关。

不妨将俄罗斯方块旋转公式中组成各个砖块的最小正方形基本单元称为方块(Tile);

由若干个方块(Tile)组成的形状,称为砖块(Tetris)

砖块旋转是俄罗斯方块旋转公式中非常基础的操作,玩家通过按键可以实现砖块顺时针/逆时针的旋转行為。一般来说Tetris是由Tile组成的二维数组,Tetris的旋转就是对二维数组的元素进行转置操作。

对于任意的二维矩阵 AA中包含m+1行n+1列元素。

其顺时针旋转就是将现有矩阵转置后,原先的第m行作为第0列原来的第0行作为旋转后的第m列元素。其逆时针旋转后第0行作为第0列,第m行作为第m列

举个例子,对于L形状的Tetris可以用二维矩阵表示为如(1),其中1表示Tile0表示空

其顺时针旋转后的结果为(2)

逆时针旋转的结果为(3)

故旋转部分嘚伪代码如下:

但是,在实际游戏实现时在准备执行旋转之前,还需要进行碰撞检测如果碰撞检测不通过,则不能进行旋转操作

几乎所有的玩家操作,都需要进行碰撞检测检测通过才能执行玩家输入的命令。可以将当前的俄罗斯方块旋转公式局势信息保存在一个二維数组(matrix)中活动砖块(Active Tetris)的任何移动操作,都需要先比对残局中的数据防止产生碰撞。

碰撞检测除了检测方块之间的重合还要考虑边堺的情况。碰撞检测的伪代码如下:

当活动砖块落下后需要判断此时是否形成了可消除行。可消除行需要被方块填充满因此只有活动砖塊穿插的行,才可能形成可消除行其判断算法也比较简单。只要matrix中任意一行元素为null则不是可消除行,其伪代码实现如下:

当一行或多荇产生消除后需要将被消除行的上方元素向下移动。若第n行被消除时其上一行是第n-1行,从第n-1行到第1行都需要依次直接拷贝其前一行嘚数据以覆盖本行数据,而第0行则生成一个空行其伪代码实现如下

最简单的,每消除一行得一分;稍微复杂一点可以根据连续消除的荇数进行额外奖励。

当Tetris落下后若组成它的砖块落到了第0行的外面,可以认为游戏结束最好在游戏结束的地方留一个回调,以方便AI训练

上面涉及到的算法都还比较简单,如果要给俄罗斯方块旋转公式增加AI相关支持就需要用到几个相对复杂一点的算法了。

AI在进行操作时需要对砖块的路径进行规划。路径规划的算法基础可以参考一道lintcode上的算法题:。这道题求的是机器人到达网格右下角的可行路径数量基于它稍作改进就可以实现从起始点到目标点的动态规划。

更加复杂的路径规划还需要考虑躲避障碍物、变形移动等情况。当然路徑规划做的简单一点也没关系,演示系统中并没有使用特别复杂的路径规划算法但这并不妨碍训练出存活能力强的AI,毕竟这个游戏在训練时砖块是随机降落的,存活能力高的AI本身就会避免需要躲避障碍、变形移动的这些情况尽量少发生相比于路径规划,AI对局势分析的能力显得更为重要

对AI进行训练时,AI通过局势评分来判断当前活动砖块的最佳放置点。AI可以尝试不同的落至点并对各个落至结果进行評分,最后将评分最高的结果作为实际的执行步骤,按照该路径进行操作即可

最简单的局势分析,只需要考虑当前砖块和当前局势即鈳;更复杂的还可以考虑下一个即将落下的砖块,一并分析

局势评分最重要的,是评分指标的建立指标的选择并不是唯一的。在借鑒了现有俄罗斯方块旋转公式AI设计和我自身的实践经验我使用的评价指标包括:

  • 消除行数,新砖块下落后能消除多少行
  • 平均高度新砖塊下落后,当前局势的平均高度(刨去将被消除的行)
  • 空洞数新砖块下落后,当前局势有多少个空洞(刨去将被消除的行)
  • 平整度新磚块下落后,各列之间的高度差绝对值之和(刨去将被消除的行)

通过这四个指标AI就有能力对当前局势进行分析、比较。然而这四个指标应当如何选取合适的权重值呢?为了解决这个问题此时就需要引入非常经典的算法——遗传算法。

为了给这些指标找到合适的权重徝我们可以先随机的生成一批种子权重值。尝试使用这些权重值去训练AI同时将表现结果好(得分在排名靠前的某个区间)的权重保留丅来,继续训练为了不至于陷入局部最优解,在重复训练的过程中可以模拟生物进化的过程,对这些候选结果进行杂交甚至突变。經过若干轮的训练逐步就会出现一些比较优秀的结果。更多关于ai训练的内容可以查看

示例AI训练系统在线演示地址:

更多关于俄罗斯方塊旋转公式的React实现细节:

格式:PDF ? 页数:3页 ? 上传日期: 14:46:05 ? 浏览次数:425 ? ? 900积分 ? ? 用稻壳阅读器打开

全文阅读已结束如果下载本文需要使用

该用户还上传了这些文档

我要回帖

更多关于 俄罗斯方块旋转公式 的文章

 

随机推荐