1 布雷算法的应用
在扫雷游戏中,将雷均匀地分布在局面中依靠一种布雷算法。众所周知,在原始版本的Windows扫雷中,由于布雷算法的缺陷,使得其存在Board Cycle(局面循环)。而标准扫雷游戏中,要求每一个位置是否为雷都是独立随机事件,因此需要设计一种数学上可靠的布雷算法。
标准的扫雷游戏是在第一次左键弹起时开始布雷的,由于布雷的速度非常快(快于一帧),玩家一般不易感觉到游戏的停顿。但是在玩超大尺寸的扫雷时,仍然需要保证玩家感觉不到游戏的停顿,这就需要有一种快速可靠的布雷算法。
此外,在测算各局面的3BV的概率分布时,目前的主流做法仍然是通过大量的局面仿真。为得到精确可靠的3BV的概率分布,曾有玩家连续仿真超过1万亿局高级局面。在这个过程中,布雷算法的性能是否优越,极大地影响到仿真能否快速完成。
2 扫雷的布雷算法
本文介绍几种扫雷的布雷算法。为突出重点,所有算法不考虑起手不能点到雷的规则,并且所有布雷算法的输出均为一维数组,其长度为高×宽;在这个一维数组中,雷用数字-1表示,非雷用0表示。代码均采用Python编写,在代码中,Row为局面的高,默认为16;Column为局面的宽,默认为30;Num为总雷数。每个代码均执行10000次,并在普通pc上重复运行若干次,取最短用时为这种算法的用时。
2.1 算法一——朴素的算法
最朴素简单的算法就是,随机选一个位置,如果没有雷就摆一个雷,这个方法与现实中物理手段的布雷很像。具体步骤是这样的:
Step1:随机寻找一个位置