问题标签 [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 投票
3 回答
42647 浏览

php - PHP 会话不能与 JQuery Ajax 一起使用?

更新,已解决: 毕竟我发现我在更新 ajax 中调用了旧版本的代码。'boardControl.php' 而不是 'boardUpdate.php' 这些是使编程变得有趣的错误类型。


我正在写一个浏览器五子棋游戏。我有允许玩家演奏一段的 ajax 语句。

价值 = 板方位置
出价 = 板 ID

在为玩家识别创建用户登录之前,服务器端 php 有一个临时解决方案。单击时它会旋转方块的棋子状态,而不是知道为哪个玩家创建它们。

创建登录内容后,我为玩家的 ID 设置了一个会话变量。我希望在 ajax 请求期间从 php 读取会话 ID,并从那里找出他们是什么玩家。

...

出于某种原因,当我运行完整的网络应用程序时,即使我删除了代码以使它们循环,这些片段仍然循环。此外,登录后,如果我在浏览器中手动加载 php 页面,它会正确修改数据库(它只播放属于该播放器的片段)并输出正确的结果。

在我看来,当与 Ajax 一起使用时,会话并没有被延续。然而,谷歌搜索告诉我,会话确实适用于 Ajax。


更新:我正在尝试提供更多信息。

  1. 登录工作正常。我的 ID 已被识别,我将其打印在白板旁边,以确保我正确检索了它。

  2. ajax 请求确实更新了板。传递的值是正确的,并通过 firebug 的控制台确认。然而,不是只为他们所属的玩家放置棋子,而是通过棋子状态 (0,1,2) 循环。

  3. 当手动浏览到 boardUpdate.php 并输入从 Ajax 发送的相同值时,在回显响应中看到的结果表明每次都按预期播放相应的片段。

  4. 新加载 Firefox 后,我的笔记本电脑上的结果相同。

  5. 手动浏览到 boardUpdate.php 而不事先登录,使板保持不变(如在会话中未找到用户时所预期的那样)。

  6. 我已经仔细检查了 session_start() 是否在 php 文件中,并仔细检查了会话 ID 变量。

希望这些额外的信息对您有所帮助,我已经没有什么可以告诉您的了。我应该加载完整的代码吗?


更新 2:

在检查了 fire-bug 中的 Ajax 响应后,我意识到“播放”请求没有得到结果,并且直到下一次“更新”才更新电路板。我还在研究这个,但我也会在这里为你们发布。

boardUpdate.php 值得注意的地方有: Refresh Board(line6) Place Piece(line20) function boardUpdate($turnCount) (line63)


请帮忙,如果需要,我很乐意提供更多信息。提前感谢=)

0 投票
1 回答
6516 浏览

algorithm - 我如何从 Gomoku 开始?

我读到了Gomoku,它可以使用 Minimax 和 Alpha-Beta Pruning 算法来实现。所以,我阅读了这些算法,现在了解了游戏将如何解决。但是当我坐下来写代码时,我遇到了如何处理它的问题。

如 ,

  • 如何设计 getNextMove 或 Max(Move) 等原型函数?
  • 下一步将如何搜索?
  • 直到我应该应用极小极大算法。
  • 我知道我可以在网上找到代码,但我想自己做。

谁能指出我正确的方向?

0 投票
6 回答
10199 浏览

algorithm - 五子棋基于数组的人工智能算法?

很久以前(想想 20 多年前),我在一本杂志上遇到了一个五子棋游戏源代码,我为我的电脑输入了该代码,并从中获得了很多乐趣。

这场比赛很难赢,但计算机AI的核心算法真的很简单,没有太多的代码。我想知道是否有人知道这个算法,并且有一些关于它的来源或理论的链接。

我记得的事情是它基本上分配了一个覆盖整个电路板的数组。然后,每当我或它放置一块棋子时,它都会在棋盘上可能影响棋子的所有位置添加一些重量。

例如(请注意,权重肯定是错误的,因为我不记得了):

然后它简单地扫描阵列以寻找具有最低或最高值的开放位置。

我很模糊的事情:

  • 也许它有两个数组,一个给我,一个给自己,并且有一个最小/最大权重?
  • 该算法可能还有更多内容,但其核心基本上是一个数组和加权数字

这是否对任何人敲响了警钟?有人有什么可以帮助的吗?

0 投票
5 回答
1072 浏览

c - 五子棋:搜索时间有限

我正在创建一个 C 程序来玩Gomoku。它使用Minimax搜索来决定最佳移动。但是,它只能搜索 10 秒的最佳着法。如何确定我的搜索功能何时搜索了 10 秒。如果您能给我提供一个示例或文档链接,将不胜感激。

0 投票
2 回答
7913 浏览

java - Gomoku 中一个好的 Minimax 表示?

我正在尝试将 Java 中的 Gomoku(连续五个)游戏编写为一个单独的项目。对于 AI,我知道使用带有 Alpha-beta 修剪的 Minimax 函数是解决这个问题的好方法。但是,我很难想象这将如何工作。

我的问题是:对于极小极大树中的节点,什么是好的表示?

我认为我的评估函数将“加权”板上的所有空白空间。然后它将从该板上取最佳值作为 minmax 决策树的节点。我在正确的方向吗?

也欢迎任何其他提示!提前致谢!

0 投票
1 回答
3286 浏览

minimax - Minimax / Alpha Beta Algorithm - 在五子棋中寻找 AI 的移动

我知道 Minimax 决策树是为棋盘游戏实现 AI 的好方法。目前,我正在尝试实现一个名为 Gomoku 的游戏(连续 5 个)。但是有一点我很困惑:

我环顾四周,似乎几乎所有 Minimax/AlphaBeta 算法都返回一个整数。特别是对我来说,eval(bestGomokuBoard) 的返回值。我应该如何找到获胜板的坐标?

这是我到目前为止所做的:我有一个 20x20 的整数数组,代表一个空白空间(0)、计算机(1)和播放器(2)。为了减少开销,Minimax Tree 中的每个节点都是较大数组(较小的参考框架)的 9x9 数组表示。我的 eval 函数返回一个 int,我的 minimax/alphabeta 算法返回一个 int。如何找到 AI 移动的坐标?

并提前感谢您!

0 投票
6 回答
45526 浏览

artificial-intelligence - 玩五子棋的好 AI 策略是什么?

我正在编写一个游戏,它是Gomoku的变体。基本上是一个巨大的棋盘上的井字游戏。

想知道是否有人知道该游戏的良好 AI 策略。我当前的实现非常愚蠢并且需要很长时间(O(n ^ 3),大约1-2秒才能采取行动):

0 投票
1 回答
6619 浏览

java - 单击时在 JButton 上绘制一个椭圆

我已经开始为我的 Java 类开发一个项目 - LAN gomoku/连续五个。游戏板由一个填充有按钮 (JButton) 的二维数组表示。使用事件处理程序(clickHandler 类),我想在单击的按钮上绘制一个椭圆(clickHandler 对象的参数)。我的以下代码没有工作(我不知道如何摆脱变量 g 的空值)......我将不胜感激任何建议。十分感谢。

(在创建 GUI 的类中 - 充满按钮的游戏板 - 我为每个按钮分配一个新的 Action Listener - clickHandler 的实例)这样:

0 投票
2 回答
1274 浏览

android - Android游戏中的捏缩放/双击手势

我目前正在创建一个游戏(五子棋),用户需要将他的动作输入到 15x15 的方形网格中。我对 GUI 没有太多经验,所以我认为一个好的方法是创建大量 ImageView,对应于每个单独的正方形,当玩家移动时,它们会将背景图片从空白更改为 X 或 O。

但是,这在某些情况下会非常困难(手指太大和/或屏幕太小),所以我想实现捏合缩放或双击缩放功能。

我的问题是:是否可以在 ViewGroup 中实现这样的功能,它会放大其中的所有视图?如果是的话,还有其他方法可以为这个游戏实现 GUI 吗?

0 投票
1 回答
364 浏览

android - 在 Android 内部保存数据会弄乱我的数据

我目前正在开发一款游戏,我需要为我的 AI 创建一个转置表。我实现HashtablekeyHashtable 是一个正在考虑的状态,它对应value的是最优的下一步。

但是,当我将 Hashtable 保存在 Android 的内部存储中并下次恢复时,它似乎有一些保存的数据,但keys(即游戏状态)与keys我在上一个实例中保存的不同。

以下是我保存和恢复数据的方法:

我认为我的hashCode()实现没有问题,因为它一遍又一遍地为相同的状态返回相同的值。

我怀疑保存/恢复转置表会弄乱我的数据,因为我记录了 2 个运行时,并且在第一个运行时我必须hashCode()为要添加到表中的 2 个状态返回 3964 和 3029。但是,在从文件中读取表时,hashCode()返回 9119 两次。

保存/恢复数据有什么问题吗?