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

chess - 在编程计算机下棋时如何为棋盘建模?

您将使用哪些数据结构来表示计算机国际象棋程序的棋盘?

0 投票
9 回答
1830 浏览

c# - 描述国际象棋规则的推荐数据格式

我将编写一个国际象棋服务器和一个或多个国际象棋客户端,我想以独立于编程语言的方式描述国际象棋规则(例如,基于游戏状态的允许移动,游戏完成时的规则)。这有点棘手,因为一些国际象棋规则(例如 King Castling、en passent、基于 3 个或更多重复移动的平局)不仅基于棋盘布局,而且基于移动的历史。

我希望格式为:

  • 文本的
  • 人类可读
  • 基于标准(例如 YAML、XML)
  • 易于用多种语言解析

但我愿意牺牲其中任何一个来换取合适的解决方案。

我的主要问题是:如何构建如此复杂的算法,以从数据格式对如此复杂的状态进行操作?

后续问题是:您能否提供一个以类似方式解决的类似问题的示例,可以作为起点?

编辑:为了响应清晰的请求——考虑我将有一个用 Python 编写的服务器,一个用 C# 编写的客户端和另一个用 Java 编写的客户端。我想避免在每个地方指定规则(例如允许的棋子移动、检查情况等)。我更愿意以独立于语言的方式指定这些规则一次。

0 投票
27 回答
58126 浏览

algorithm - 国际象棋有完美的算法吗?

我最近在与一位非编码人员讨论国际象棋计算机的可能性。我对理论并不精通,但我认为我知道的足够多。

我认为,不可能存在一个总是在国际象棋中获胜或陷入僵局的确定性图灵机。我认为,即使您搜索 player1/2 动作的所有组合的整个空间,计算机在每一步中决定的单个动作也是基于启发式的。基于启发式,它不一定能击败对手可以做的所有动作。

相反,我的朋友认为,如果计算机从不犯“错误”举动,那么它总是会赢或打平(但是您如何定义?)。但是,作为一个学过 CS 的程序员,我知道即使是你的好选择——给定一个聪明的对手——最终也会迫使你做出“错误”的举动。即使你什么都知道,你的下一步行动是贪婪地匹配一个启发式。

大多数国际象棋计算机试图将可能的最终游戏与正在进行的游戏相匹配,这本质上是一种动态编程回溯。再一次,有问题的残局是可以避免的。

编辑:嗯......看起来我在这里激怒了一些羽毛。那挺好的。

再想一想,解决像国际象棋这样的有限游戏似乎没有理论上的问题。我认为国际象棋比跳棋要复杂一点,因为获胜不一定是通过棋子的数字耗尽,而是通过队友。我最初的断言可能是错误的,但话又说回来,我想我已经指出了一些尚未得到令人满意的证明(正式)的东西。

我想我的思想实验是,每当树中的一个分支被取走时,算法(或记忆的路径)必须为对手移动的任何可能分支找到一条通向配偶的路径(而不是交配)。讨论后,我会购买,因为内存比我们想象的要多,所有这些路径都可以找到。

0 投票
4 回答
7464 浏览

chess - 一个字节的尾随/前导零计数

我正在使用 Java,我正在编写一个国际象棋引擎。

我试图在一个字节中找到前 1 位的索引和最后 1 位的索引。

我目前在 Java 中使用 Long.numberOfTrailingZeros() (或类似的东西),并希望模拟该功能,除了字节。

会不会是这样的:

如果是这样,我将如何相对有效地实现 bitCount。我不介意好的解释,请不要只给我代码。

0 投票
10 回答
13439 浏览

rest - What RESTful API would you use for a turn-based game server?

How would you model a turn-based game server as a RESTful API? For example, a chess server, where you could play a game of chess against another client of the same API. You would need some way of requesting and negotiating a game with the other client, and some way of playing the individual moves of the game.

Is this a good candidate for a REST (RESTful) API? Or should this be modelled a different way?

0 投票
1 回答
393 浏览

c# - CustomControl 棋盘上突出显示的方块不会持续超出初始 MouseDown 事件

我一直在用 C# 编写一个 Windows 应用程序国际象棋游戏作为磨练我的技能的练习,也因为它很有趣。我已经包含了允许玩家选择选项以突出显示一个棋子在被点击时可以合法移动到的方格的功能。CustomControl 处理棋盘的呈现,它还突出显示正方形。

这一切都按计划进行,直到玩家开始将棋子拖到新的方块上。鼠标一移动,高光就消失了。我怀疑引发了 Paint 事件并且板重新绘制自身。而且由于高光不是初始电路板布局的一部分,因此它们不会被绘制。

我想要做的是让方块保持突出显示,直到将棋子放在其目标方块上。有可能做到这一点吗?任何建议将不胜感激。

伪代码:

0 投票
4 回答
46212 浏览

resources - 编写国际象棋引擎有哪些好的资源?

我有兴趣编写一个国际象棋引擎(主要作为学习练习),并且会对人们知道的任何可能感兴趣或使用的资源感兴趣,任何真正的东西:论文,书籍,理论,教程,任何可能的东西有用。

0 投票
8 回答
3485 浏览

algorithm - 计算机国际象棋树搜索的最新技术是什么?

我对提供百分之几速度的微小优化不感兴趣。我对 alpha-beta 搜索最重要的启发式方法很感兴趣。以及评估功能的最重要组成部分。

我对具有最大(改进/代码大小)比率的算法特别感兴趣。(不是(改进/复杂性))。

谢谢。

PS Killer move heuristic 就是一个完美的例子——易于实现且功能强大。启发式数据库太复杂了。

0 投票
9 回答
37494 浏览

artificial-intelligence - 如何为国际象棋编写神经网络?

我想编写一个国际象棋引擎,学习如何做出好的动作并战胜其他玩家。我已经编写了棋盘的表示和输出所有可能动作的函数。所以我只需要一个评估函数来说明董事会的给定情况有多好。因此,我想使用一个人工神经网络来评估给定的位置。输出应该是一个数值。该值越高,白棋玩家的位置就越好。

我的方法是建立一个由 385 个神经元组成的网络:棋盘上有 6 个独特的棋子和 64 个区域。因此,对于每个字段,我们需要 6 个神经元(每块 1 个)。如果有白棋,则输入值为 1。如果有黑棋,则值为 -1。如果该字段上没有这种类型的块,则值为 0。除此之外,还应该有 1 个神经元供玩家移动。如果轮到白方,则输入值为1,如果轮到黑方,则输入值为-1。

我认为神经网络的配置非常好。但是缺少主要部分:如何将这个神经网络实现为编码语言(例如 Delphi)?我认为每个神经元的权重在开始时应该是相同的。然后根据比赛结果调整权重。但是怎么做?我想我应该让 2 个电脑玩家(都使用我的引擎)互相对抗。如果白方赢了,黑方会得到它的权重不好的反馈。

因此,如果您能帮助我将神经网络实现为编码语言(最好是 Delphi,否则是伪代码),那就太好了。提前致谢!

0 投票
6 回答
9166 浏览

.net - 任何人都知道一个好的.Net国际象棋引擎

我正在寻找一个不错的.Net 国际象棋引擎。如果有一个好的国际象棋现有的,有什么建议可以推荐一个好的候选人来移植到.Net?