问题标签 [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.

0 投票
0 回答
602 浏览

python - 使用位板在奥赛罗中产生动作

我制作了两个非常相似的奥赛罗 AI。在第一个中,板表示为长度为 100 (10x10) 的数组,其中 8x8 板表示在数组的“中间”,数组的其余部分是边缘周围的缓冲区(索引 11 位于左上角8x8 板的一角,索引 88 是右下角)。要在 position 移动index,我使用以下代码:

为了生成移动,然后我检查可能的索引(内部 8x8 板上的图块)并检查是否len(changed) > 1. 如果是,我将棋盘上的图块设置changed给该玩家。

在第二个 AI 中,我原以为移动速度会更快,棋盘被表示为两个 64 位的位板——一个用于目标最大化分数的玩家,另一个用于试图最小化分数的玩家。为了采取行动,我使用与此处相同的代码,刚刚转换为 Python:

使用位板表示,玩 1000 个随机游戏大约需要 7 秒,而数组表示需要 4 秒。

如何使位板表示在生成和移动时更快,是否可以检查可能的移动并同时返回新的位板?

0 投票
2 回答
163 浏览

haskell - 预期类型:字符串,Haskell 中的实际类型 [[Char]] 错误消息

我正在开发棋盘游戏奥赛罗的 Haskell 实现,但仍处于流程的开始阶段。我目前正在尝试创建一个显示板的功能。此刻,我只是试图让函数输出每个单元格的坐标值。我的想法是我可以遍历每一行,然后遍历每个单元格并输出每个单元格的值。然后我在 main 中调用这个函数并将板输出为字符串。

但是,我在字符串连接方面遇到问题并遇到错误“预期类型:字符串,实际类型:[[Char]]。

我知道在 Haskell 中,String 本质上是 [Char] 的化名,但是当我使用“++”函数时,我不明白为什么会得到 [[Char]]。

理想情况下,我希望这个函数输出这个:

抱歉,如果我的代码不是很易读或我的想法不清楚,我仍在努力学习 Haskell 的基础知识。提前感谢您的时间和帮助。

0 投票
0 回答
64 浏览

c++ - 奥赛罗项目,棋盘显示不正确,直到程序停止,并且检查第一步是否合法时出现问题

目前正在为我的班级做一个奥赛罗项目,我们只是试图让第一个合法的举动可用。在专门显示我的棋盘和检查输入动作是否合法的功能时,我一直遇到同样的问题。当我运行我的程序时,我的棋盘随机显示不正确,直到程序停止,当我尝试进行合法移动时,程序不会将其视为合法移动。这是我对奥赛罗课的看法;对可能出现的问题非常困惑,任何帮助都会很棒!

0 投票
2 回答
215 浏览

python - Python / TkInter - 从for循环制作的按钮网格中查找哪个按钮被按下的方法

我正在尝试使用 Tkinter 和 Python 进行一个非常简单的 Othello 迭代并有一个想法,但是我不知道一种方法来检索按下哪个按钮(通过整数?)。我使用了一个按钮网格

我计划在按下时配置按钮,并通过添加和减去按钮的值来检查所有 8 个方向,以找到左侧(-8)、右上角(+7)等按钮。我很新编码并希望得到任何反馈,谢谢。

0 投票
1 回答
105 浏览

python - 尽管存在,但无法从列表中删除元素 - Reversi

我正在尝试用 Python 编写一个简单的黑白棋游戏。

在我的代码中有两个主要列表:

takered - 包含红色玩家占据的位置

takeblue - 包含蓝色玩家占据的位置

在玩家的每一次移动之后,我都会更新这些列表以包含每个玩家的更新位置

这是我的问题:

当我使用输入运行代码时:

R

02

23

我收到一条错误消息,指出在列表中找不到最后一个索引,因此无法删除它。

到目前为止,我尝试的是使用 for 循环中的缩进,因为其余代码对我来说似乎是正确的。

我的代码:

欢迎任何帮助!

终端:

0 投票
2 回答
173 浏览

arrays - 如何构建我试图用 C 构建的奥赛罗棋盘阵列?

我正在尝试用 C 编写一个基于文本的 Othello 引擎,作为开始学习 C 的一种方式。我已经在更高级别的语言中使用它,所以决定在 C 中尝试一下,因为基本逻辑是正确的并且有效。

我试图将板表示为 8x8 数组,可以使用函数动态重置。

董事会应该是这样的:

我正在尝试将指向存储板的数组的指针传递到 resetBoard 函数中,以便我可以随时重置板。我怎样才能让板子用相应的字符更新数组?

这就是我正在尝试的:

当我尝试编译时,我收到以下错误消息:

我尝试将字符分配给 board[i] 而不是 board[i][j] ,但这会提供此错误:

所以我知道我有很多问题。我对 C 编程或任何低级编程完全陌生,因此欢迎任何帮助!

非常感谢!

0 投票
1 回答
54 浏览

javascript - 奥赛罗有效移动算法不起作用javascript

我正在尝试编写一个黑白棋游戏,现在我正在尝试编写返回有效位置的算法。我首先检索旁边有黑色或白色石头的空方块的方向,但我的代码没有运行。我不知道我是否做错了什么,但似乎当我启动程序时,代码运行缓慢,因为算法过于矫枉过正。我能为此做些什么?

这是我的代码(顺便说一下,我使用 React.js):

方阵的数据结构如下:

算法(现在,只返回旁边有一块石头的方块(上、上和右、下、左等)):

这就是我试图实现它的地方:

顺便说一句,我检查了该命令是否已到达 GameBoard 组件内的元素。它没有任何问题,问题发生在我实现算法时。

0 投票
1 回答
46 浏览

javascript - 奥赛罗游戏切换回合在 React.js 中不起作用

我正在使用 React 开发 Othello 游戏,并且我已经实现了切换玩家回合的代码。它确实从一个切换到另一个(在白色和黑色之间)。但是,如果即将到来的玩家没有可用的移动,则转牌保持不变。虽然我已经完成了这一切,但现在我在尝试游戏时遇到了这种情况,虽然它确实会定期切换玩家回合,但我的代码不会考虑在必要时保持不变。你知道为什么吗?我该如何解决?

这是我的代码:

我在哪里改变它:

我在哪里调用函数:

0 投票
0 回答
11 浏览

javascript - 我正在尝试为奥赛罗游戏制作“flank()”方法。但是我不知道如何遍历每一块并在找到我的一个时停止

这是我一直在尝试的方法:

在上面提到的方法中,我使用了我制作的第二种方法:

位置类型的输入变量是一个人放置他/她的棋子的瓷砖。

“GridDirection.EIGHTDIRECTION”是一个数组列表,它使我可以从 Location loc 检查网格上的每个方向。(它包含如下值:NORTH、NORTHEAST、EAST、SOUTHEAST...等)

“board.get(nextPosition)”检查“nextPosition”位置上的内容。

“board.isOnGrid(nextPosition)”检查位置是否在棋盘上。

现在我的问题是,当我清楚地有一排我的对手的棋子是这样的。 然后我还是只拿到了第一名,别的什么都没有。 是我从打印“对手位置”列表中得到的。

而且我不知道为什么它不迭代抛出所有位置并将它们全部添加。

0 投票
0 回答
45 浏览

python - 奥赛罗的极小极大函数,不假思索地选择第一个点

我正在尝试为奥赛罗游戏编写极小极大算法。当有更好的位置可供使用时,我的代码会从它应该选择的列表中选择第一个可用位置:

例如,这是我的驱动程序代码:

我的代码选择了 [0,0],而它真正应该选择 [2,3]

这是我实际的 AI minimax 代码:

任何帮助将不胜感激