我有一个类似于 minimax 的函数,可以预测 2048 年的一步棋是否是一个好棋步并给它打分。然而,它唯一缺少的是一种记住游戏中每个状态的方法。
例如,如果你向上移动一个棋盘(相当于按下键盘上的向上键),当我需要深入返回并将原始状态向右移动时,我最终如何才能回到那个游戏状态?这样做的最佳方法是什么?
电路板本身存储为二维数组 fyi。
最佳答案
2048 的每个状态转换都完全包含在两个事件中:
1- 前一步
2-新瓷砖的位置和值(value)
如果您知道起始棋盘(随机生成的前两 block 棋子)和转换顺序,您可以在游戏的任何步骤重建棋盘状态。
存储此开始状态的数据结构,事件序列可以像元组列表一样简单。
换句话说,“回到过去”的方法更像是“重新向前运行时间,直到达到你想要观察的状态”。它叫做event sourcing并且,在某种程度上,这就是 Git 图所做的事情,crypro-currencies 分类帐所做的事情,以及 future 会计软件可能也会做的事情。
这里有一个很好的视频介绍event sourcing
在您的特定情况下,如果您真正想做的是撤消 或回滚 最后几步,memento pattern可能是更好的选择:
一种简单的方法是将每个连续的状态存储在列表/数组中,并从序列中的状态索引中检索每个步骤的状态;如果需要,您还可以轻松地将步数限制为最后 n 步。
关于python - 在 python 中使用游戏树时存储 2048 板游戏状态的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51795961/