井字棋的博弈树

3
首先,我是Java的初学者,正在尝试模拟一个TicTacToe游戏。我想使用一棵游戏树来创建所有状态的可能树。树中的每个节点都代表一个状态,并使用此树来决定下一步该做什么。我的计划如下:
  1. 接口类包括表示单个移动所需的信息。
  2. 抽象/接口类包括以下方法:

    a. 返回表示应用该移动后游戏状态的新状态对象。

    b. 如果当前状态表示其中一个玩家的胜利,则返回此游戏的获胜者ID。

    c. 返回当前玩家和下一个玩家的ID。

  3. 在一个类中包括以下方法:

    a. 游戏状态在游戏树中表示为此节点

    b. 给定一个移动,向此节点添加一个子节点。

    c. 给定一个移动,返回适当的子节点。

  4. 在另一个类中包括以下方法:

    a. 使用初始状态构建一棵树。

    b. 返回游戏的当前状态

    c. 给定一个移动,更新树,以便树的根节点保存游戏的新状态。

    d. 生成此树的子节点到给定深度。

我知道树的概念(二叉树或AVL树或红黑树),但我有点困惑从哪里开始以及如何继续。对于这个上下文的任何建议都将非常有帮助。
谢谢
Sinx
1个回答

1
树在3x3网格上有点过头了,只需使用一个二维玩家ID数组来模拟场景。要检查胜利情况,请循环遍历每个行中的每个单元格(三行、三列和两个对角线)。如果任何这些行中的所有单元格都属于同一玩家,则该玩家获胜。
为简单起见,这些行可以只是坐标列表的列表。
[[[0, 0], [0, 1], [0, 2]],
...
[[0, 0], [1, 1], [2, 2]],
...

顺便说一下,我正在使用Javascript / ThreeJS制作一个3D井字游戏作为学校项目,这种方法在4x4x4网格上运行良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接