问题标签 [othello]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 我正在为我的黑白棋游戏研究 Minimax 算法,但不知道如何评估棋盘
我的 Minimax 算法运行良好,我什至通过记录值的层次结构来检查它。但是如果我尝试评估板子(当我最初作为函数参数给出的深度被击中时),我这样做的方式效率很低。我也尝试过另一种方式(我将其放在本文下方)但这次是错误的。
这是评估的初始代码(我认为它是原始的(有点),因为它确实评估了可以做出的潜在举动,而不是整个董事会):
这是我尝试做的另一种方式:
我不认为放置 Minimax 算法代码是必要的;但如果您认为需要它,请发表评论。
python - 如何使散列矩阵(奥赛罗棋盘)的自定义散列函数编号
我必须做需要自定义散列矩阵函数的项目。项目是关于黑白棋(黑白棋)游戏,这意味着我需要散列固定的 8x8 矩阵。
这是初始化矩阵的样子:
以下是电路板外观的一个示例:
如您所见,一位玩家是 1(始终是我),第二位玩家是 2(始终是计算机)并且.
是空棋盘位置。
我做了某种散列函数。它看起来像这样:
函数接受板(矩阵)并首先创建包含所有板字段的字符串,其顺序和状态与板中一样。之后,我使用for
循环中的公式对该字符串进行哈希处理。函数ord
返回字符的 ASCII 值。
我知道这不是一个好的哈希函数,所以我很想听听一些改进这个或实现一些完全不同的想法。我看到了基于用两个 64 位二进制数表示棋盘的想法,其中第一个数字包含玩家 1 在所有其他地方都有棋子和零的地方,第二个数字包含玩家 2 在所有其他地方都有棋子和零的地方地方。在那之后,我记得,我必须使用某种算法对这两个数字进行哈希处理。问题是,我不知道这是否是一个好的散列函数,以及我是否可以实现它。
需要注意的重要一点是,我不能使用内置哈希函数或从某个库导入的任何其他函数。我必须使用某种算法制作自定义哈希函数。
提前致谢。
python - 如何在游戏奥赛罗(黑白棋)中实现由可能的动作组成的树
我需要帮助从游戏奥赛罗的可能动作中制作树,稍后我将使用 MiniMax 算法。游戏在 Player vs AI 模式下进行,我在船上总是“1”,而 AI 在船上总是“2”。这就是我目前为 AI 获得最佳移动的功能的样子:
所以,我的想法是,在标记的地方,我在那一刻为 AI 的每一个可能的移动制作树,然后在上面做 MiniMax 并获得最好的移动。问题是,我不知道如何制作树。我有class TreeNode
,class Tree
但显然,我不知道如何使用它们。这就是这两个类的样子。
另外,如果需要,这就是我初始化板的方式。
我真的很感激任何形式的帮助,因为我觉得应该用递归来完成,但这真的不是我最强的一面。
这是我尝试过的:
提前致谢。
java - Othello minimax OOP 创建子板列表
我正在尝试使用 OOP 在 java 中创建 Othello AI。我正在使用对象“板”,在这个对象中,我试图创建一个包含所有“孩子”的 ArrayList,其中每个孩子都是板的克隆,其中一个合法的动作 - 我正在努力解决这个问题。我在 board.java 的 addChild 类中遇到的一个问题是每次调用 addChild 时都尝试创建一个新板,我不确定如何执行此操作。目前,每一个合法的动作都被应用于一个名为 child 的棋盘,这是 children ArrayList 中唯一的棋盘。任何帮助将非常感激。
另外,我想知道 Minimax 的最佳方法,我的想法是从当前棋盘遍历游戏树,进入孩子,直到我碰到一个叶子(所选棋盘没有孩子),通过对这个叶子的评估将叶子与其所有兄弟节点进行比较,然后将父节点与其所有兄弟节点进行比较,依此类推。
谢谢,斯图尔特
MiniMax.java
板子.java
java - 从当前董事会列出每个合法后续董事会状态的问题
我正在尝试制作 Othello AI,目前正在尝试实现 MiniMax。我创建了一个棋盘对象,从当前棋盘我想创建一个所有“子”棋盘的列表,这些是当前棋盘的副本,但每个棋盘都有一个合法的移动。我在创建多个“子”板时遇到问题,到目前为止,我的代码仅将所有合法动作应用于一个板,并且仅在子板列表中包含该单个板。任何帮助将非常感激。
MiniMax 类中的 minimax 方法
公共课板{
java - 深度克隆问题 - 尝试为 MiniMax(奥赛罗)创建所有后续板状态的 ArrayList
我正在尝试为棋盘游戏 Othello 编写 MiniMax 代码。我有板对象,当前板是Main.grid
. 我有一种方法可以在给定当前棋盘的情况下获取所有合法移动,使用返回的合法移动我想创建一个 ArrayList,其中的每个项目都是一个深度克隆,Main.grid
但对其进行了一次合法移动。我的问题是克隆使每个棋盘都具有相同的指针,因此每个合法动作都被添加到单个棋盘中,导致下图,蓝色星是选择的棋,放置在白色,2 个红色星星是白棋本可以进行的另外两个合法棋步——都放在棋盘上。任何帮助将非常感激。
minimax 方法中的子列表输出为:
表明它们都共享相同的指针/正在产生浅拷贝。