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

java - 当时间用完时,在java中打破递归

我正在为类似国际象棋的游戏实施人工智能。我打算使用递归来尝试棋盘的所有可能状态并选择“最佳移动”。

由于每次移动的时间限制,每当达到时间限制时,我需要有一些机制来打破这些递归过程。当然,我可以在进行递归调用之前继续检查时间,如果当前时间接近限制,我可以中断,但这是与我的程序性能的权衡。

如果有一种方法可以在计时器结束时打破这些递归过程,那就太好了。但是,由于我是 Java 新手,我不知道在 Java 中是否有任何方法可以做到这一点?你能给出一个示例代码吗?:)

0 投票
1 回答
3318 浏览

c++ - 使用 OpenCV 工具从连续的图像差异中检测国际象棋的移动

嘿,我正在编写一个简单的国际象棋机器人视觉系统,我正在尝试改进以前的一些研究,以允许使用相机和标准国际象棋,并且两者都可以在游戏中移动。到目前为止,我可以在通过网络摄像头获取的图像中定位棋盘,并且我想通过对连续图像进行差异来检测移动,以确定发生了什么变化,然后使用有关棋盘占用的先前信息来检测移动。

我的问题是我目前似乎无法可靠地检测到变化,我当前的管道是这样的:减去两个图像->直方图均衡差异图像->侵蚀和扩张差异图像以删除微小的变化->制作二进制复制并进行距离变换 -> 获取最大的 blob(对应于 DT 并填充该 blob 之后的最大值) -> 再次重复,直到 DT 返回一个小到足以忽略更改的值。

我正在用 OpenCV 和 C++ 编写所有这些代码。但是我的洪水填充似乎总是不能填充斑点,因此大多数情况下我只检测到一个变化。我也尝试过使用cv::inpaint,但这也无济于事。所以我的问题是;我只是使用了错误的方法还是图灵可以使变更检测更可靠。如果是前者,人们是否可以在合理的时间内建议替代路线,最好在 C++/Python 和/或 OpenCV 中编码?

谢谢

0 投票
3 回答
1711 浏览

c++ - C++ 复制指针

嗨,我想知道如何将 C++ 中的二维数组指针的内容复制到另一个位置并设置另一个指向它的指针,这样当我对复制的指针进行更改时,原始数据不会发生任何变化?

基本上它是一个指向棋盘上棋子的数组指针。所以它是这样的Piece * oldpointer = board[8][8]。现在我想复制这个指针中的所有内容,包括getvalue(), getcolor()Pieces 头文件中的诸如 etc 之类的方法到另一个位置并设置一个指向它的指针,这样我就可以在那里进行操作并测试它而不必影响这个原始数据?我在某个必须使用的地方读到过,allocate()但我不确定。请帮忙

0 投票
1 回答
338 浏览

chess - 国际象棋:主教用 CLIPS 移动

我正在尝试在国际象棋桌上实现主教的可能移动,它可以在随机单元格上有其他棋子。我已经能够绘制一个答案的草图,但它没有检测到其他部分。

在此规则之前,我编写了一些代码,为表格的每个单元格创建如下所示的事实,指示其内容:

以及一个显示一块位置的事实:

到目前为止,这是我的规则(可能它也不太有效):

有人现在我能做什么吗?提前致谢。

0 投票
3 回答
1142 浏览

php - 用于验证基于国际象棋的输入的正则表达式?

我正在使用 HTML/CSS/PHP 开发一个基于国际象棋的爱好项目。我事先对国际象棋并不熟悉,所以我决定制作一个工具,可以根据给定棋子的类型和方格显示允许的移动。

我有一个带有两个文本字段的 HTML 表单:一个用于块的类型,另一个用于所述块的当前方块。一切正常,但我想包括使用正则表达式的验证。

棋子类型的有效、不区分大小写的输入是p、pawn、r、rook、b、bishop、n、knight、q、queen、k、king

正方形的有效、不区分大小写的输入是LetterNumber,其中Letter可以是AH并且Number可以是1-8

所以我想知道使用正则表达式是否可能/实用,如果是这样,有人可以让我知道它们是什么吗?我在想我应该只使用带有逻辑或的条件语句作为片段类型,但我很想知道是否还有其他解决方案。

0 投票
1 回答
129 浏览

php - 如何通过 JavaScript 验证此表单?

我用 HTML/CSS/PHP 完成了一个简单的、基于国际象棋的爱好项目。它根据类型、位置和颜色列出并显示给定棋子的可能移动。不过,该程序不考虑板上的任何其他部分。

http://freemusing.com/chess/

如您所见,表单工作正常并且具有服务器端验证。我的问题是我对 JavaScript 不够熟悉,无法从头开始翻译表单的两个文本字段的服务器端验证 [为清晰而编辑] 。有人可以帮助复制我在 JavaScript中的两个输入的 PHP 验证代码吗?我不想使用任何框架,因为我想最终精通 JS。

任何帮助表示赞赏。

0 投票
3 回答
1624 浏览

artificial-intelligence - 获取位板的占用位掩码

我正在玩比特板来代表棋盘并检查合法动作。我坚持的事情是计算滑动块攻击中源方格和目标方格​​之间的占用率。我不想通过查找来做到这一点,所以我试图弄清楚是否有可能在没有查找的情况下获得中间方块的掩码。例如,在以下棋盘中,c4 上有一个 Rook:

给定一个表示空方格(或被占用方格,更简单的方格)的位板和一个伪有效移动 Rf4(Rook 可以从 c4 移动到 f4),如何获得方格 d4-e4 的掩码(不包括源方格和目标方格​​) ?

我假设,一旦这一点很清楚,垂直移动就会很容易,并且可以通过使用旋转的位板来计算对角线移动。

编辑:位板用 ulong/unsigned int64 表示,每包 8 位代表实际板的一个等级/行。

0 投票
4 回答
5180 浏览

python - 从 Python 上的 pgn 文件中提取移动信息

如何从 Python 上的 pgn 文件中提取移动信息?我是编程新手,任何帮助将不胜感激。

0 投票
1 回答
1707 浏览

java - 我必须设计一个国际象棋游戏,以便除了马之外没有其他棋子可以跳其他棋子我需要一个算法来做到这一点

我已经从这里阅读了一个链接的教程!这给了我一个基本的棋子布局,但是现在我的棋子跳过了其他棋子,我可以知道如何检查源和目标方格​​之间是否有一些中间硬币。

0 投票
1 回答
5761 浏览

java - 在现有的 JPanel 上绘制 JLayeredPane

我正在开发一个国际象棋游戏。我想让板容器利用 GridLayout 来显示 8x8 的 JPanel 网格。(这将使突出显示选定方块和有效移动等功能变得更加容易。)然后我想在这一层上添加碎片,以便可以拖放它们。我最初通过在单独的方形 JPanel 中绘制它们来显示这些碎片,但我认为稍后尝试拖放它们时会出现问题。从那以后,我一直在尝试使用 JLayeredPane 作为主容器,但遇到了几个问题。

一个是一旦我为 JLayeredPane 指定了 GridLayout,无论我使用哪个 Integer 来指定要向其中添加 JLabel 或其他类型的图像的层,这些片段都会被添加到网格中,从而设置它们的位置并扭曲整个董事会。我读过使用 LayoutManagers 会干扰 JLayeredPane 上的图层定位,所以这并不奇怪。(尽管 JLayeredPane 教程中的 Oracle 演示程序似乎可以做到这一点:http: //download.oracle.com/javase/tutorial/uiswing/examples/components/LayeredPaneDemo2Project/src/components/LayeredPaneDemo2.java

但是,我也尝试将 JPanel 的网格放入它自己的 JPanel,然后将其添加到 JLayeredPane 的低层,我的想法是我可以将拖放图标添加到单独的、不透明的 JPanel 上JLayeredPane 的层。但是,当我这样做时,在 JLayeredPane 中简单地拥有网格 JPanel 之后(即在添加拖放层之前),网格将不会显示。

我也尝试过覆盖 JLayeredPane 的 paintComponent (和paint)方法来绘制片段图像,但它们被 JPanel 隐藏(我可以通过将 JPanel 设置为非透明来看到它们确实存在)并且就我可以说没有选项可以在 JLayeredPane 上设置图形的图层。我也尝试使用框架的 glassPane 来绘制碎片,但那里也出现了不良行为。

任何帮助解释这种行为,或者我哪里出错了,将不胜感激!