首先,我是java的初学者,我正在尝试模拟TicTacToe游戏。我想使用游戏树为所有州创建一个可能的树。树中的每个节点都将表示状态,并使用此树来决定下一步要进行的操作。我计划如下处理,
abstract / interface class包含以下方法:
一个。返回一个新的状态对象,表示在游戏后的状态 应用这一举动。
湾如果当前状态代表其中一个胜利,则此游戏的获胜者的ID 球员。
℃。返回当前玩家和下一个玩家ID。
在类中包含方法,
一个。在游戏树中以此节点表示的游戏状态
湾给定一个Move,将一个子节点添加到该节点。
℃。给定一个Move,返回相应的子节点。
在另一个类中包含方法,
一个。构造具有初始状态的树。
湾返回游戏的当前状态
℃。给定一个Move,更新树,以便树的根保持新的状态 游戏。
d。生成此树的子节点到给定深度。
我知道树的概念(二进制或avl或红黑)但我有点困惑从哪里开始以及如何继续。对此背景的任何建议都非常有用。
由于
选择Sinx
答案 0 :(得分:1)
树木对于3x3网格来说太过分了,只需使用2D数组的玩家ID来为场景建模。要检查获胜,请遍历每一行中的每个单元格(三行,三列和两个对角线)。如果这些行中的所有单元都属于同一个玩家,那么该玩家就赢了。
为简单起见,这些行可能只是一个坐标列表列表,即
[[[0, 0], [0, 1], [0, 2]],
...
[[0, 0], [1, 1], [2, 2]],
...
FWTW,我正在Javascript / ThreeJS中为学校项目制作3D tictactoe游戏,这种方法在4x4x4网格上运行良好。