类型:益智休闲
大小:1.95MB
评分:5.0
平台:
问题 by nitish712
我最近偶然发现一款叫2048的游戏。你需要通过上下左右方向键来移动合并值相同的方块(Title)。每一次移动之后,一个值为2或者4的新方块会随机出现在某个空位置。如果所有位置都塞满方块,并且没有值相同的方块可以合并的时候,游戏结束。游戏的目标是合并出一个值为2048的方块。
我需要遵循一套定义良好的策略来实现这个目标。所以我想到写个程序来实现。我当前的算法如下:
我所做的是,在任何时刻,我都尝试合并值为2或者4的方块,也就是我会尝试让值为2和4的方块越少越好。如果我尝试那么做,其它的方块会自动的合并,看起来像是个好策略。
但是当我真正使用这套算法的时候,我大概只能得到4000分,游戏就结束了。游戏的最高分应该是20000多点,远超我当前的分数。有比上面策略更好的算法吗?
最佳回答 by ovolve
我是AI程序的作者,前面也有人提到AI程序。你可以看AI版游戏,或者直接阅读源代码。
当前,这套运行在我笔记本浏览器的javascript程序能够达到90%左右的胜率,每次移动的思考时间是100毫秒。尽管不是最完美,但做得还不赖。
既然这个游戏是一个离散状态空间,信息完备的回合制游戏,类似于象棋和国际跳棋,那么我就使用了针对这些游戏的证明过的行之有效的方法。一套叫minimax search的算法,结合了alpha-beta pruning。既然已经有很多信息解释了这套算法,那么我就仅谈谈我在static evaluation function中使用到的两个重要概念。这将会把一些人在这里表达的直觉形式化。
单调性(Monotonicity)
这个概念保证方块的值沿着上下左右方向的,要么增加,要么减少。这个概念单独地解释了一个大家提到的直觉,值较大的方块应该聚集到某一个角落。这将有助于阻止值小的方块被孤立起来,也将让面板保持良好的组织结构,使得值小的方块渐进层叠式的并逐步合并为值大的方块。
(您有什么疑问或想说的,尽管说,我们会第一时间做出反馈!) 回复 [ ] 楼取消回复