我想我终于开始了解极小极大和Alpha beta修剪,但实现它是另一回事!
根据我的理解,基础是: 您将启发式函数分数分配给某些移动(Gomoku作为示例)。
当我们真的必须在Java中实现它时,我的问题出现了!
我有一个Color [] []板(8x8),其中黑色是玩家1,白色是玩家2,null表示空白,我对我们将如何
感到困惑一些帮助和指导表示赞赏!我查看了YouTube教程,来自各种在线资源的讲义,但在编写代码时,没有一个对我有用。
如果它有所作为,游戏是Gomoku在8x8板上播放
答案 0 :(得分:2)
首先,你必须定义游戏的状态。在您的示例中,它将是表示电路板配置的二维数组。
创建一个存储游戏配置和电路板状态的java类。此类现在将成为minimax树的节点。
定义极小极大树的节点后,您必须根据游戏规则定义子节点。这代表了你的举动。
有了这个你有minimax树!
搜索棋盘以查找对方移动并为其指定值
要分配每个电路板配置的值,请将其存储在类本身中。此外,您不必搜索董事会以找到反对行动,因为它由您的孩子代表。 [请注意,董事会与每个班级一起存储]
搜索棋盘以查找我的移动并为其指定值
同样,如果给定的类代表玩家1移动,则子代表玩家2的移动。
然后选择最好的举动
这是由算法定义的。如果您处于最大节点,则选择与最大值对应的移动。即你选择价值最高的孩子 如果是min节点,则选择最小值子节点。
PS :您不必事先定义整个minimax树。它可以在执行dfs时动态创建。这将大大减少记忆。
PPS :有关详细信息,请参阅Chess Programming。