问题标签 [chess]

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 投票
1 回答
3487 浏览

artificial-intelligence - 什么是精确评估函数?

我一直在寻找几个小时,但我无法对“精确评估函数”提出一个体面的定义。

最好关于国际象棋人工智能,我想知道确切的评估函数是什么以及它与启发式评估函数有何不同(以及是否)。就个人而言,我认为评估函数只是根据当前状态评估未来状态的函数。我没有意识到它们被分成不同的类别。

任何帮助,将不胜感激!

~雷

0 投票
3 回答
1298 浏览

java - Java 国际象棋小程序

我正在用java编写一个必须在applet中显示的国际象棋程序。我目前在填充棋子数组时遇到问题。目前这是在我的 JApplet 的 paint() 方法中完成的,我知道这是错误的,因为可以多次调用 paint。我已经尝试创建数组并将其填充到我的初始化方法中,但这根本不起作用。任何帮助,将不胜感激。

0 投票
2 回答
72 浏览

c++ - 快速选择 DOM 中的元素

背景:对于我的一门大学课程,我正在下国际象棋。GUI 已经完成了与控制器的挂钩,我所要做的就是实现对象。传统上,我只会使用适合每种对象类型的原生结构、用于移动历史的堆栈(支持撤消,但不重做)、用于棋盘的二维数组/向量等。规范的一部分是我必须加载并以专门的 XML 格式保存游戏,所以我很想简单地使用 DOMDocument 来完整地存储游戏。如果我有一个实现 DOM 加载/保存操作的库,这将使加载和保存变得非常容易,因为我不再需要在 XML 和我的结构之间进行转换。

问题:速度。在国际象棋的所有算法中,我必须按位置进行大量选择。

XML 格式(不可更改):

现在我必须获取所有片段元素并过滤掉属性,这是一个 O(n) 操作。在数组/向量实现中,我可以轻松实现 O(1) 时间,因为它是简单的索引。O(n) 的代价太高了,特别是在检测到僵局时。

你将如何提高速度?我基本上是在寻找索引 DOM 的方法。我有一些想法,但你会如何解决这个问题?

作为参考,我正在使用 C++ 进行开发,并且可能会使用 XML 的Xerces库,尽管我主要是在寻找想法,而不是实际代码(尽管这会有所帮助)。

0 投票
1 回答
1227 浏览

c - C中的Bitboard国际象棋编程

我对 C 中的这段代码有疑问。

好的,为什么位板没有将所有位设置为 1?

如有任何问题,请添加评论。泰:D

0 投票
2 回答
1112 浏览

cocos2d-iphone - 对于象棋类游戏来说,什么是好的 iPhone UI 框架?

我正在尝试为 iphone/ipad 开发类似象棋的游戏,我已经使用 objective-c 和 c++ 开发了内部游戏逻辑,这很好,但我想知道在 iphone/ipad 上开发良好 GUI 的可能方法是什么?

据我所知,我可以使用 Core Graphic,cocos2d。

还有吗?哪一个可能最适合象棋之类的游戏?(例如显示一个固定的棋盘,在棋盘上添加棋子,从棋盘上移走棋子,在棋盘上移动棋子)

如果我的问题引起了混乱,我已经改写了它,希望这让它更清楚一点。非常感谢

0 投票
1 回答
1885 浏览

c# - 带有 Alpha-Beta 修剪的 Minimax;类变量还是通过递归发送它们?

当使用带有 Alpha-Beta 修剪的 Minimax 时,是否可以将 alpha 和 beta 作为类变量而不是通过递归发送它们?

代替:

我可以写:

我之所以问是因为当我尝试通过这样做来优化代码时(我的想法是,如果我不需要将整数发送到每次递归,我可能会花一点时间),我的棋手突然变成了一个白痴,牺牲了他的女王来杀死一个棋子,并犯了其他愚蠢的错误。

他的表现总是比他的“常规 Alpha-Beta”对手差很多,我猜这是因为与他的对手相比,他也只搜索了一小部分树(他们都使用相同的深度,但修改后的玩家似乎修剪了更具侵略性,从而减少访问的节点数量)。为了确保这一点,我现在已经做了两次,除了我在这里描述的内容之外,我不会改变任何其他东西。

如果我正确理解了 Alpha-Beta 算法,这应该不会有任何区别,但对于我的棋手来说,确实如此。我做错什么了吗?

所以,我现在的主要问题不是它是否是优化明智或代码实践明智的好事,而是它是否应该可以做。

0 投票
1 回答
207 浏览

windows-phone-7 - Windows Phone 和大内存分配

我想玩我写的一个国际象棋引擎的旧代码,试图将它移植到 WPhone 上。我的旧代码使用高达 20 mb 的非常大的哈希结构(所谓的转置表)。对于在 WP7 上运行的游戏,这个要求是否可以接受,或者我必须诉诸于使用不同的结构(有这个选项,当没有大量内存可用时使用的那个称为 Refutation Table )?

0 投票
4 回答
647 浏览

algorithm - 一个程序能否确定另一个程序是否下棋?

我想知道以下问题。我显然不期望任何实用的解决方案,但我会感谢任何开发人员对此的想法:

理论上是否有可能让一个程序打开其他程序(为了论证,假设它打开 .exe 文件),并确定特定可执行文件在执行时(具有固定输入和机器状态)是否播放国际象棋游戏(在它可能执行的任何其他任务中)。

对于“下棋”,我的意思是对棋盘和棋子进行一些表示,然后应用源自内置国际象棋 AI 引擎的黑白棋步。

这样一个理论上的“国际象棋检测程序”可能包含一个虚拟机或 PC 模拟器或其他任何东西,以便在必要时实际模拟扫描的可执行文件。我们可以假设它在具有同上 ram 的任意速度的计算机上运行。


(编辑)关于停机问题,我可以这样解决:

将程序加载到具有 N 位(硬盘和内存空间以及 CPU 寄存器)的虚拟机中。这个虚拟机最多可以假设 2^N 个不同的状态。

逐步执行VM中的程序。在每一步之后,检​​查它是否停止。如果是:问题已解决(结果:是,它停止了)。如果不是:获取虚拟机的当前状态,并查看该状态是否存在于我们之前已经遇到的状态列表中。如果是:问题已解决(结果:否,它将永远运行)。如果否:将此状态添加到列表并继续。

由于最多可以出现 2^N 种不同的状态,因此该算法将在有限时间内确定程序是否停止。


(Edit2)关于扫描的可执行文件或它运行的(虚拟)机器的(无限)有限性似乎有些模棱两可。假设要扫描的可执行文件最多为 1 GB(这应该足够了,因为大多数国际象棋程序要小得多),并且它们应该在具有 10 GB 内存的 PC(或 VM)上运行。

我们的理论国际象棋检测程序可以使用任意数量的 ram。

0 投票
4 回答
8204 浏览

algorithm - 如何利用 Warnsdorff 的规则改进 Knight 的巡回赛?

我知道有几个类似的线程,但即使在 SO 之外我也没有找到解决方案。这是我的问题:我为骑士之旅问题实现了 Warnsdorff 的算法http://en.wikipedia.org/wiki/Knight%27s_tour,但在某些情况下它没有给出解决方案。在我读到的某些地方,它可以通过一些更改更好地工作,但没有人指定哪些更改是那些。有人知道解决方案吗?我知道其他算法,但它们要复杂得多。

即使对于 8x8 棋盘,它有时也不能提供好的解决方案。我认为阅读我的代码没有意义,因为它是经典的 Warnsdorff 的:检查可能的移动,并在下一步中选择移动最少的一个。

0 投票
5 回答
1927 浏览

java - 为国际象棋游戏创建棋盘演示

我开始为国际象棋游戏作业制作一个 8 x 8 方板。但是,我想知道是否有任何提示可以在 Java 中创建正方形而不是 2D 数组。

分配的限制之一不允许使用 2D 数组或任何类似的。没有人工智能,只有用户控制。