算法的乐趣 · 第六十八节
《算法的乐趣》第六十八节
本节介绍俄罗斯方块AI算法中穷举板块摆放方法的实现。摆放穷举分两步:先遍历板块的每种旋转形态,再对每种形态从游戏区域第0列开始逐个位置尝试。
本节介绍俄罗斯方块AI算法中穷举板块摆放方法的实现。摆放穷举分两步:先遍历板块的每种旋转形态,再对每种形态从游戏区域第0列开始逐个位置尝试。核心函数ComputerAIPlayer()模拟人类的摆放方式:先由GetTouchStartRow()依据top_row和板块高度确定起始行,若上方空间不足则游戏结束;再用while循环调用CanShapeMoveDown()让板块下沉到底,随后临时放置板块、评估该位置、再移除板块恢复局面,并按评估值更新最佳结果,最后由PutShapeInPlace()旋转并放置板块、消行计分。
测试时随机生成10万个板块逐个交给AI摆放,最好成绩是消除26万行,平均约8万行,AI过程中常出现"自杀"举动,说明评估函数仍有改进空间。
本章总结指出,AI算法可从数据结构(如用一维位组代替二维数组)和评估策略(如区分封闭与开放空洞、支持下落中平移旋转)两方面继续优化。