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

python - python:国际象棋移动验证

有人知道某处是否有免费的 python 国际象棋移动验证功能吗?

我需要的。我有一个存储为字符串的图表,并移动候选者。我需要的是查看移动候选是否对图表有效。

如果可能的话,我真的很想看看例子。


字符串看起来是这样的:

嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯哼

我知道这可能看起来很愚蠢,但我发现以这种方式编码位置最容易。移动候选对我来说只是另一个这样的位置(发生在下一步移动之后,我认为可以改变这种行为)

0 投票
2 回答
4610 浏览

image - Qt-如何根据鼠标移动在屏幕中移动图片

我正在尝试下棋。所以我想在用户点击并拖动硬币时移动国际象棋硬币图片。我必须使用哪个类

更新

最后,我只是在编辑拖放示例中给出的拼图代码。因此,我试图了解这些功能。但我仍然没有得到某些东西。我正在执行下面的代码,但图片没有移动。当我关闭时,我从操作系统(Windows XP)收到一个问题,即我的程序中有一个未处理的 win32 异常,所以无论你是否要调试。这里的代码

任何帮助将不胜感激。

0 投票
6 回答
3413 浏览

java - 在国际象棋编程中很好地使用递归?

作为家庭作业的一部分,我必须用 Java 编写一个简单的国际象棋游戏。我正在考虑借此机会尝试递归,我想知道国际象棋中是否有明显的递归代码候选者?

0 投票
2 回答
860 浏览

c# - 关于AlphaBeta算法

我用自己的旧国际象棋引擎体验过 AlphaBeta 算法,现在我正在尝试编写新引擎,我看到算法遇到了 beta 截止,但我认为,如果我不使用窄窗口,这永远不会发生。我错了吗 ?我正在使用int.MaxValuebeta 和-int.MaxValuealpha 那么什么会导致 beta 截止?

编辑:

完整代码在这里。

0 投票
5 回答
5740 浏览

javascript - 免费的 JavaScript 棋盘

有人可以建议一个免费(如自由)和开源的 JavaScript 棋盘吗?我的计划是将它与一些服务器端 Python 代码挂钩,很可能是烧瓶 Web 框架。

我需要一组非常少的功能:

  • 一种在服务器端脚本生成 HTML 代码时在棋盘上显示位置(不仅是初始位置)的方法。该位置可以存储在列表列表中(以模拟二维数组),也可以存储在 FEN(Forsyth-Edwards 表示法)字符串中。
  • 一种移动方式(通过用鼠标光标拖动棋子)并通过 HTTP POST 自动将移动提交到服务器端脚本。JavaScript 代码对移动的验证不是强制性的,因为我可以在服务器端执行此操作。
0 投票
1 回答
5753 浏览

wpf - 在 WPF 中创建国际象棋 GUI

首先:抱歉,如果这是重复的帖子。当我试图同时发布/注册时,事情变得有点混乱。

我开始研究从一个简单的 WPF 窗口运行 UCI 国际象棋引擎,掌握了让国际象棋引擎在与界面不同的线程上运行的窍门,并创建了一个合理可服务的基于文本的前端。

我现在变得更加雄心勃勃,并想开始构建一个带有棋子的 GUI,它将玩家的动作提供给国际象棋引擎,并在棋盘上代表引擎的动作。我的目标是可拖动的部分,而不是点击方块。

我目前的尝试涉及对 <canvas> 元素上的片段使用可拖动的用户控件。我真的很想听听其他更有经验的 WPF/.NET 程序员如何处理这个问题,因为我并不完全相信我走在正确的轨道上。

例如:使用统一的网格并在子元素之间拖动块数据会更好吗?我应该创建一个抽象的“棋子”类,可以从中派生出棋子等棋子吗?那种事。

有什么想法吗?这不是家庭作业或任何东西,只是我在业余时间闲逛的东西作为练习。

0 投票
2 回答
1303 浏览

c++ - 一个基于 C++ 的变体国际象棋引擎设计问题

我有一个国际象棋变体引擎,可以与普通国际象棋一起下自杀棋和失败者棋。随着时间的推移,我可能会为我的引擎添加更多变体。该引擎完全用 C++ 实现,并正确使用了 OOP。我的问题与这种变体引擎的设计有关。

最初,该项目作为一个仅用于自杀的引擎开始,随着时间的推移我添加了其他口味。为了添加新的变体,我首先尝试在 C++ 中使用多态性。例如,一个MoveGenerator抽象类有两个子类SuicideMoveGeneratorNormalMoveGenerator并且根据用户选择的游戏类型,工厂将实例化正确的子类。但我发现这要慢得多——显然是因为实例化包含虚函数的类和在紧密循环中调用虚函数都非常低效。

但后来我想到使用具有模板专业化的 C++ 模板来分离不同变体的逻辑,最大限度地重用代码。这似乎也很合乎逻辑,因为动态链接在上下文中并不是真正必要的,因为一旦您选择了游戏类型,您基本上会坚持到游戏结束。C++ 模板专业化正是提供了这一点——静态多态性。模板参数是SUICIDEorLOSERSNORMAL

因此,一旦用户选择了游戏类型,就会实例化适当的游戏对象,并且从那里调用的所有内容都将被适当地模板化。例如,如果用户选择自杀棋,让我们说:

对象被实例化,并且该实例化基本上与整个控制流静态链接。中的函数ComputerPlayer<SUICIDE>将与MoveGenerator<SUICIDE>,Board<SUICIDE>等一起使用,而相应的函数NORMAL将适当地工作。

总的来说,这让我在一开始就实例化了正确的模板化专业类,并且在任何地方都没有任何其他if条件,整个事情都很完美。最好的事情是根本没有性能损失!

然而,这种方法的主要缺点是使用模板会使您的代码更难阅读。如果处理不当,模板专业化也会导致重大错误。

我想知道其他变体引擎作者通常会为逻辑分离做什么(良好的代码重用)?我发现 C++ 模板编程非常合适,但如果有更好的东西,我很乐意接受。特别是,我检查了 HG Muller 博士的 Fairymax 引擎,但它使用配置文件来定义游戏规则。我不想这样做,因为我的许多变体都有不同的扩展名,并且通过使其通用到配置文件的级别,引擎可能不会变得强大。另一种流行的引擎 Sjeng 到处都是if条件,我个人觉得这不是一个好的设计。

任何新的设计见解都会非常有用。

0 投票
4 回答
7615 浏览

c# - 如何用 C# 编写类似象棋的游戏?

我有个问题。我想编写一个类似象棋的程序,应用如下规则:

  • 它的一侧应该只有国王和王后,另一侧应该只有国王。
  • 第一方应以尽可能少的移动次数与第二方配对。

我想知道你对如何制作这个项目的想法。例如,我想知道哪种编写代码的方式更容易(面向对象或结构化,...)(我有一些关于面向对象的信息)并且可以告诉我编写它的算法吗?例如,我应该从哪里开始编写代码?

0 投票
7 回答
2610 浏览

algorithm - 判断两个棋子位置是否相等

我目前正在为可以放置棋子的国际象棋变体引擎调试我的转置表(即最初不在棋盘上)。我需要知道我多久遇到一次关键冲突。我将片段列表与通常的哈希数据一起保存在每个表索引中。我确定两个位置是否相等的简单解决方案是在换位上失败,因为我在线性比较两个列表。

请不要建议我应该以 board-centric 而不是 piece-centric 来存储。由于可放置和捕获的作品的独特性,我必须存储作品清单。这些状态中的碎片就像它们占据了重叠且无位置的位置。请查看有关如何存储碎片的说明

当棋子以不同的顺序移动时会发生换位,但最终结果是相同的棋盘位置。例如以下位置是相等的:

以下是未优化的通用算法;并且内部循环类似于另一个一般问题,但增加了限制,即 0-63 中的值只会发生一次(即每平方只有一个)。

由于转置,以下比较不起作用。我需要的是一种将换位检测为相等并且只报告实际不同位置的方法。

性能/内存是一个考虑因素,因为该表每轮获得超过 10 万次点击(其中键相等),并且典型的表有 100 万个项目。从今以后,我正在寻找比复制和排序列表更快的东西。

0 投票
3 回答
255 浏览

c# - 将数组保存在数组中

我想将 kingarray[x1+1,y1-1],king array[x1+1,y1] 等保存在一个数组中(国际象棋中的国王可以走的方式)。我该怎么做?或者如果不是可能你建议我保持国王可以走的路吗?谢谢