基于Pierre Dellacherie的俄罗斯方块-05Pierre Dellacherie算法
Pierre Dellacherie算法感觉上像是一个遍历算法,给与各个参数不同的权重,使得更加合理的摆放方块
评估主要是6个参数:
LandingHeight:下落后的高度,方块最后不能下落之后,方块的重心(也就是中心点的高度),相当于高度越低越安全,我这里并没有记录每一个图形的中心点,统一为高度减去1,如图小方块Z下落之后高度为4,我这里需要重心,我就选择重心 - 1 = 3
ErodedPieceCellsMetric:消除贡献值=消除行数该方块参与消除的格子数。
例如,该情况下消除了2行,该方块提供了2个单位的格子。那么贡献值=2*2=4
RowTransitions:行变换数。按行遍历,从哪一行有方块开始计算,边界定义为有方块,从方块到空记作一次变换,从空到有方块在记作一次变化,如图
从有方块开始计算从上到下一次是4 + 4+2+4
BoardColTransitions:列变换数:同行变换数,只不过换成了按列遍历。(上下两侧算做边界)
BoardBuriedHoles:空洞数,空洞指的是,每列中某个方块下面没有方块的空白位置,该空白可能由 1 个单位或多个单位组成,但只要没有被方块隔断,都只算一个空洞。注意,空洞的计算以列为单位,若不同列的相邻空格连在一起,不可以将它们算作同一个空洞。如图所示
BoardWells:井数,就像是水井一样,空白的个数。井指的是某一列中,两边都有方块的连续空格,(左右两边看做实体)一定要注意两边都有方块才能看做是井。还需要注意井深度,井的深度是连续累加的。如图所示最右边深度为2,就是1+2,需要把井的深度做累加,如图所示已经标识的很清楚
权重的话,有人用小数,我这里为了方便计算全部乘以10作为整数计算了
#define LANDINGHEIGHT -45
#define ROWSELIMINATED 34
#define ROWTRANSITIONS -32
#define COLUMNTRANSITIONS -93
#define NUMBEROFHOLES -79
#define WELLSUMS -34