标签: chess

免费JavaScript棋盘

任何人都可以建议免费(如自由)和开源JavaScript棋盘?我的计划是将它与一些服务器端的Python代码连接起来,最有可能的是它将成为烧瓶Web框架.

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

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

javascript chess

9
推荐指数
2
解决办法
5396
查看次数

Javascript国际象棋符号转换功能

我正在寻找一个javascript库来转换带有移动符号的PGN文件,包括片段和目的地,如:

... 3. cxd5 Qxd5 ...
Run Code Online (Sandbox Code Playgroud)

仅使用方形坐标编写符号,例如:

... 3. c4-d5 h5-d5 ...
Run Code Online (Sandbox Code Playgroud)

如果没有图书馆,那么使这块岩石坚固起来将是一项相当大的工作,因为它必须逐步完成每一步,并验证合法的移动以确定哪一块可以到达目的地广场.

有什么javascript可以帮助我,或者我可以轻松移植的另一种语言?

javascript chess node.js

9
推荐指数
1
解决办法
1528
查看次数

用于描述国际象棋规则的推荐数据格式

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

我希望格式为:

  • 文本
  • 人类可读
  • 基于标准(例如YAML,XML)
  • 可以用各种语言轻松解析

但我愿意牺牲其中任何一种来获得合适的解决方案.

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

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

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

c# python java chess dataformat

8
推荐指数
1
解决办法
1707
查看次数

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

嗨,我编码了一个简单的下棋机器人的视觉系统,我想改善以前的一些研究,以使相机和一个标准的国际象棋使用,都被允许在游戏中移动.到目前为止,我可以在通过网络摄像头获取的图像中找到电路板,我想通过获取连续图像的差异来检测移动,以确定已更改的内容,然后使用有关电路板占用率的先前信息来检测移动.

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

我在OpenCV和C++中编写所有这些代码.但我的洪水填充似乎总是要么不填充blob,因此大多数情况下我只是检测到一个变化.我也试过使用,cv::inpaint但也没有帮助.所以我的问题是; 我只是使用错误的方法或以某种方式图灵可以使变化检测更可靠.对于前者,人们是否可以在合理的时间内建议替代路线,最好是C++/Python和/或OpenCV中的可编码路径?

谢谢

c++ opencv chess

8
推荐指数
1
解决办法
2799
查看次数

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

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

python chess

8
推荐指数
3
解决办法
2849
查看次数

解决N皇后控制难题的算法

我已经解决了更通用的N Queens问题,但现在我正在寻找一种算法来解决N Queens Domination问题.

"给定n×n板,找到控制号码,这是攻击或占据每个方格所需的最小皇后(或其他部分).对于8×8板,女王的统治号码是5". - 维基百科

我已经进行了广泛的搜索,除了关于这个问题的学术论文之外什么都找不到,没有什么是可以理解的.

我的第一个想法是放下一个女王,然后将下一个女王放在可以攻击大多数其他方块的地方,依此类推.然而,虽然这可能会产生一个解决方案,但我无法找到一种方法来保证该解决方案是最小的解决方案.

任何帮助将不胜感激,谢谢.

puzzle algorithm chess

8
推荐指数
1
解决办法
3813
查看次数

如何在Python中与Chess引擎通信?

在win 7上,我可以通过命令行与国际象棋引擎进行通信.Win 7 上与Stockfish的小例子会话:

C:\run\Stockfish>stockfish-x64.exe
Stockfish 2.2.2 JA SSE42 by Tord Romstad, Marco Costalba and Joona Kiiski
quit

C:\run\Stockfish>
Run Code Online (Sandbox Code Playgroud)

第一行由引擎输出,'quit'是我输入的退出引擎(我还可以做其他事情,但这对我来说很清楚).

现在我想从python与该引擎通信:

import subprocess
engine = subprocess.Popen(
    'stockfish-x64.exe',
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
)
for line in engine.stdout:
    print(line.strip())
engine.stdin.write('quit\n')
Run Code Online (Sandbox Code Playgroud)

我明白了

C:\run\Stockfish>communicate.py
b'Stockfish 2.2.2 JA SSE42 by Tord Romstad, Marco Costalba and Joona Kiiski'
Run Code Online (Sandbox Code Playgroud)

但它没有退出引擎(没有C:\ run\Stockfish>提示),它一直在等待输入.我必须手动关上窗户.似乎没有把我的退出消息(python脚本的最后一行)写入stdin.

换句话说,我可以从stdout读取,但是当我写入stdin时,没有任何事情发生.

我做错了什么,怎么做对了?


编辑:好的,感谢larsmans的帮助我解决了它:

示例Python脚本:

import subprocess, time

engine = subprocess.Popen(
    'stockfish-x64.exe',
    universal_newlines=True,
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
)

def put(command):
    print('\nyou:\n\t'+command)
    engine.stdin.write(command+'\n')

def get():
    # using the …
Run Code Online (Sandbox Code Playgroud)

python chess process python-3.x

8
推荐指数
1
解决办法
7013
查看次数

锯齿状阵列与一个大阵列?

不太确定如何提出这个问题,但我有两种方法(到目前为止)用于查找数组

选项1是:

bool[][][] myJaggegArray;

myJaggegArray = new bool[120][][];
for (int i = 0; i < 120; ++i)
{
  if ((i & 0x88) == 0)
  {
    //only 64 will be set
    myJaggegArray[i] = new bool[120][];
    for (int j = 0; j < 120; ++j)
    {
      if ((j & 0x88) == 0)
      {
        //only 64 will be set
        myJaggegArray[i][j] = new bool[60];
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

选项2是:

bool[] myArray;
//                [998520]
myArray = new bool[(120 | (120 << 7) | (60 << …
Run Code Online (Sandbox Code Playgroud)

c# chess

8
推荐指数
1
解决办法
182
查看次数

使用魔术位板滑动移动生成

这是关于如何使用魔术位板在国际象棋中验证滑动棋子移动的大图片的问题.只是为了澄清,我不是在问魔术比特板如何在内部工作.

现在,关于这个问题的更多细节.我正在使用位板编写棋盘表示,我想使用魔术位板验证滑动棋子移动.有人可以列出如何实现这一目标的主要步骤吗?作为一个例子,考虑以下董事会职位:

白移动. 在g3上验证车辆的给定动作

假设我们已经初始化并准备好使用所有魔术位板功能和数据结构.因此,仅使用魔术位板的功能签名,您是否可以列出步骤(伪代码或任何语言)来验证g3上白车的给定移动?

chess bitboard

8
推荐指数
2
解决办法
5305
查看次数

国际象棋静止搜索太广泛了

我在上个月用c#创建了一个简单的国际象棋引擎,并取得了一些不错的进展.它使用简单的Alpha-Beta算法.

为了纠正Horizo​​n-Effect,我试图实现静态搜索(并在它工作之前多次失败).发动机的强度似乎有点改善了安静,但速度非常慢!

在此之前,我可以在大约160秒(在游戏中期的某个地方)搜索6层深度,通过静态搜索,计算机需要大约80秒才能在搜索深度3上移动!

蛮力节点计数器在深度3处大约20000个节点,而静态节点计数器高达2000万!

由于这是我的第一个国际象棋引擎,我真的不知道这些数字是否正常,或者我是否在我的静止算法中犯了错误.如果有经验的人能告诉我BF节点/静态节点的通常比例是多少,我将不胜感激.

顺便说一句,看看:(每当searchdepth为0时,此方法由BF树调用)

public static int QuiescentValue(chessBoard Board, int Alpha, int Beta)
    {
        QuiescentNodes++;

        int MinMax = Board.WhoseMove; // 1 = maximierend, -1 = minimierend
        int Counter = 0;
        int maxCount;


        int tempValue = 0;
        int currentAlpha = Alpha;
        int currentBeta = Beta;
        int QuietWorth = chEvaluation.Evaluate(Board);

        if(MinMax == 1) //Max
        {
            if (QuietWorth >= currentBeta)
                return currentBeta;
            if (QuietWorth > currentAlpha)
                currentAlpha = QuietWorth;
        }

        else            //Min
        {
            if (QuietWorth <= currentAlpha)
                return currentAlpha;
            if (QuietWorth …
Run Code Online (Sandbox Code Playgroud)

c# algorithm chess alpha-beta-pruning

8
推荐指数
1
解决办法
536
查看次数