问题标签 [gomoku]

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 投票
2 回答
1162 浏览

c# - 时间:2019-05-10 标签:c#gomokugamelabelarray

我正在尝试使用 Windows 窗体和 c# 为两个玩家制作一个简单的五连击 (gomoku) 游戏。我放了一个带有图片的图片框并将其拉伸到表格上。现在我想在画板上的所有交叉点上放置标签,以便用户可以单击它们并将其背景颜色更改为黑色或白色。

  1. 如何使创建的标签在表单上可点击?

    /li>
  2. 我应该制作一维 [361] 还是二维数组[{A,1}, {A,2}....{D,1}]来轻松检查获胜者?如何将它连接到创建的标签,以便数组数据与板上的对象相对应?

0 投票
0 回答
178 浏览

java - 评估功能不起作用

我正在尝试评估一个 Gomoku Board (8x8),我必须连续获得 5 个。我似乎无法弄清楚为什么我的评估功能不起作用。有没有更简单的方法来编写这个而不是编写大量的 if 语句?

0 投票
0 回答
93 浏览

c# - 如何获取 WinForms 按钮的真实位置?

我现在正在编写一个名为“GoMoku”的小型两人游戏。就像“connect 4”一样,不同的是你可以在球场上的任何地方设置石头。我通过使用 for 循环创建的一些按钮实现了这一点,并在按钮数组中设置了播放器的数量。它工作得很好,但是当我单击表单框架附近的按钮时,它总是说我有一个超出范围的异常。我调试并检查了位置,它们有时是错误的,有时不是;有点随机。我做错了什么,我该如何解决这个问题?

这是我的代码:

0 投票
0 回答
524 浏览

algorithm - 五子棋人工智能算法

我能找到的五子棋 AI 算法具有“权重”,因此 AI 可以找到最合适的位置。

但是,我什至无法弄清楚“重量”是什么,以及如何获得重量。

有谁可以向我解释一下重量是多少以及如何获得它?

0 投票
1 回答
105 浏览

c - 用C语言获得计算机决策速度的方法

我正在尝试找出用计算机玩 Gomoku(5 x 5 版本的 tictactoe)的算法。在这种情况下,我发现最常用的算法是 Min-max(或 Alpha-beta),但这些算法对我来说太难处理了。所以我决定使用以下代码,这些代码很容易理解但很耗时。它显示了计算机如何做出合理的选择。

对于 3 x 3 矩阵,它工作得很好。然而,对于 4 x 4,留下下一块石头需要很长时间。由于耗时长的原因是前三四个决定,我认为只让计算机只在人类最后一个选择(点)周围搜索最佳点将是一个解决方案。在前三四个决定之后,上面的正式算法将适用于剩下的几个点。你怎么看?并给出一些修改当前算法的建议。

0 投票
1 回答
3190 浏览

artificial-intelligence - 如何提高 Alpha-beta 修剪性能

这是我的五子棋 AI 代码。所以现在我的 AI 目前运行超过 5 秒,但时间限制是 5 秒。我正在尝试提高性能,所以我尝试移动订购,但它似乎不起作用。我首先在 getChildStates(int player) 函数中计算分数,然后将向量按降序排序。但它只是行不通。一些身体可以帮助我吗?

另外,我的深度是两个。转位表好像没什么用,所以没试过。

}

0 投票
1 回答
130 浏览

java - 我的 MCTS Gomoku 播放器出现 Java 堆空间问题

当我运行我的程序时,我得到这个错误:

我将相同的 MCTS 代码用于 3x3 板尺寸,它不会崩溃并快速返回有竞争力的动作。但是当我尝试将它用于 15x15 板尺寸时,游戏在 1235 次迭代后崩溃,并出现上述错误。

我想我已经通过在 1235 次迭代后不允许扩展任何节点来解决问题的症状。这最终确实会带来竞争性举措,尽管这需要很长时间才能发生。

对我来说,根本原因是我试图创建的树的大小,因为相同的代码适用于 3x3 板,但不适用于 15x15 板;包含所有节点对象的树的大小太大了。因此,这只是这种方法的问题,而不是我的编码问题。

我确实认为我可以尝试:在 x 次迭代之后,如果一个节点已被访问 y 次但获胜分数低于 z,则删除该节点。我的想法是,如果经过 x 次迭代,并且被访问 y 次但获胜分数仍然很低,那么这个节点可能会占用树中不必要的空间,因此可以删除。

我的问题是:

有没有更好的方法让我的程序返回移动而不是崩溃,而不仅仅是减少扩展的数量并且不必实施上述检查?(即使最好的移动需要很长时间才能计算出来)。

这是我的一些未经编辑的代码:

已编辑** MCTS 扩展功能:

MCTSPlayer 功能:

新包含在下面**

选择初始节点函数(将继续,直到可能的移动列表大小 == 为 0):

"+initialNode.childrenList()); //System.out.println("剩余节点可能的移动:"+initialNode.getPossibleMovesSize()); } return initialNode; }

选择功能:

childrenLeft函数:

0 投票
2 回答
558 浏览

java - 如何在 Gomoku javafx 游戏中启用轮换

我很难在我的程序中启用轮换。

点击棋盘上的一个图块并将这些坐标传递给 playMakeMove() ,它在棋盘矩阵中进行移动并设置文本以直观地表示移动。

尽管当涉及 2 个玩家(玩家,RandomAI)时,在使用循环交替转弯后,该方法不起作用。RandomAI 只是连续移动所有动作,玩家只在完全相同的位置移动一次(不等待鼠标点击)。

我认为可以通过等待点击瓷砖(运行方法 playerMakeMove)然后让 RandomAI 轮流来解决这个问题。不知道如何实现这一点。

下面是两个类 BoardGUI 和 Game 还有另一个类(不包括在内)称为 Board。

0 投票
1 回答
135 浏览

c++ - 五子棋获胜条件c ++使用指针和数组

我目前正在用 C++ 开发五子棋游戏。但我坚持获胜条件。我是 C++ 新手。我需要为此游戏添加使用指针的获胜条件。请我需要帮助。我不知道如何开始。到目前为止,我只能将玩家移动插入到数组中。我需要指针来确定获胜条件的 8 个方向。

获胜条件是:水平、垂直、对角线连续 5 次(但也必须更改为连续 3 次、连续 4 次等)

头文件

此文件与头文件链接

主文件

0 投票
1 回答
811 浏览

c++ - C++ 中五子棋游戏的计算机播放器

前段时间我用 C++ 制作了一个类似于五子棋的游戏,需要两个玩家参与。

现在我想让它成为 Player vs Computer。我试图以最简单的方式做到这一点,通过使计算机的功能来选择一个随机单元格,但我仍然没有成功。我知道为了得到一个随机数,我可以使用 rand() 和这样的字母:

有人可以帮助我并描述如何实现计算机播放器吗?到目前为止,这是我的实现: