为了提高极小极大连接-4AI算法的效率,我决定使用α-beta剪枝。这无疑有助于程序的长时间运行(我以前认为这是一个无限递归),但是AI并没有按照我希望的方式工作。AI只是选择下一个可用的空位来标记,即使这会导致损失.
我试着增加和降低深度级别,并确保检查获胜者的功能实际上是有效的。此外,我将先前用于板的2d矢量转换为一维矢量,并相应地更新了其他功能。任何帮助,为什么AI的行为方式,这将是非常感谢。//'X' if AI wins, 'O' if
此外,当AI玩家自动做出选择时,人类玩家会收到做出决定的提示。可能有无限数量的玩家子类,每个子类都有一个人和人工智能版本。因为Java没有真正的多重继承,所以我目前的解决方案是使用AI玩家继承的AI接口和Human继承的人工接口。这些接口中的每一个都有一个唯一的makeDecision()方法,用于每个可能的决策。从决策界面重写代码很好,因为不同类型的玩家不应该拥有相同的AI。下面是我的代码结构的一个简单示例:{
int
我正在调用我的AI类中的一个方法,该方法旨在计算我绘制的角斗士对象实际需要结束的位置。我向该方法传递了一个列表,其中包含我想要放置的所有对象。AI类之前的一个方法已经确定了它们之间的距离,我将其存储为gladiator0..1..2..etc.movementGoal。这意味着我迭代列表的标准方法将不起作用,因为我需要关于另一个角斗士的移动决策的信息,以便在这些决策交互时找出任何一个角斗士的实际移动。我在Ai类中的方法如下所示:
public void moveAI(List<Gladiator&g