这个标签用于国际象棋游戏和让计算机玩它的问题。
我有一项服务,可以从数据库获取游戏并向其添加动作。此外,它还编辑当前的 pgn(动作字符串)。是否有任何函数可以获取给定的动作字符串并解析来自...的动作
我已经仔细研究了位板上的国际象棋编程维基,但我仍然在努力思考如何实际创建它们。根据我收集的信息,它们应该是 uint64_t 对吗?
我目前正在使用 OpenCV 用 python 编写一个项目,旨在识别屏幕上棋盘上棋子的位置。 我已经成功地使用了模板匹配功能...
我正在构建一个国际象棋引擎,我正在尝试使用我之前使用过的名为 perftree 的程序来测试它。为了让 perftree 能够使用我的代码,我需要以某种方式格式化我的输出。
我正在尝试使用 Chess.js 和 Chessboard.js 使用 Minimax 算法和 alpha-beta 修剪来编写国际象棋引擎。问题是该算法需要很长时间才能执行所有
如何使用 ppo 加快 python 国际象棋机器人的训练时间?
我正在尝试构建一个使用近端策略优化进行学习的国际象棋机器人。我目前正在使用 python-chess 库(https://python-chess.readthedocs.io/en/latest/index.html#)作为
我真的很努力将stockfish 与c# 实现统一,我见过很多人使用标准输入来读取stockfish。不过,无论我做什么,我的程序都会冻结。 (对...
我有一个 CLI 国际象棋程序,它接收用户的输入(例如:'e2e4')并将其转换为两个位图,即 s_map 和 e_map。 位图表示为 0x0000000000000000ULL; 右边在哪里...
如果操作 stdin 和 stdout,Python subprocess.popen 会死锁?
我编写了一个脚本来操作国际象棋引擎的标准输入和标准输出。基本上,我使用 subprocess.popen 打开程序,并使用 threading.Thread 操作每个输入和输出。 但是,如果...
我正在用 C++ 做一个国际象棋小项目作为我的家庭作业。问题是我不知道如何复制我最后一步的动态数组(例如白棋做了一个非法的动作,但有一个
我正在尝试构建一个 React Web 应用程序,让人们能够解决国际象棋难题。我使用 chessground 库来渲染棋盘,并使用 chess.js 库来处理国际象棋逻辑。 我创建了一个组件
我正在使用这种面向对象的国际象棋设计。我已经实现了为所有棋子生成有效的动作。现在我正在尝试实施检查将死。 我尝试制定一种方法,如果
我正在 Unity 2D 中创建国际象棋游戏,但移动板出现问题。似乎无法让它们进入正确的位置和对齐
我从一开始就做所有事情,所有功能都正常工作,但应该突出显示可能的移动的 MovePlates 的位置没有正确对齐......
如何将 Html 中的 Stockfish 与 chess.js 和 chessboard.js 集成?
这只是一个有趣的项目,但我无法让鳕鱼在我移动后移动。 这只是一个有趣的项目,但我无法让鳕鱼在我移动后移动。 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <title>Chessboard.js Example - Stockfish vs Human</title> <link rel="stylesheet" href="chessboard.css"> </head> <body> <style type="text/css"> .highlight-white { box-shadow: inset 0 0 3px 3px rgb(181, 243, 181); } .highlight-black { box-shadow: inset 0 0 3px 3px rgb(62, 177, 192); } </style> <div id="myBoard" style="width: 400px"></div> <script src="../jquery.js"></script> <script src="chessboard.js"></script> <script src="chess.js"></script> <script src="stockfish.js"></script> <!-- Include the Stockfish JavaScript file --> <script> var board = null; var $board = $('#myBoard'); var game = new Chess(); var squareToHighlight = null; var squareClass = 'square-55d63'; var stockfish; function removeHighlights(color) { $board.find('.' + squareClass).removeClass('highlight-' + color); } function onDragStart(source, piece, position, orientation) { // do not pick up pieces if the game is over if (game.game_over()) return false; // only pick up pieces for White if (piece.search(/^b/) !== -1) return false; } // Initialize Stockfish stockfish = new Worker('stockfish.js'); stockfish.postMessage('uci'); stockfish.postMessage('isready'); stockfish.postMessage('ucinewgame'); function makeStockfishMove() { stockfish.postMessage('position fen ' + game.fen()); stockfish.postMessage('go depth 5'); } // Handle Stockfish's response stockfish.onmessage = function (event) { var line = event.data; if (line.startsWith('bestmove')) { var move = line.match(/bestmove (.+)/)[1]; game.ugly_move(move); board.position(game.fen()); // Highlight the opponent's move removeHighlights('black'); squareToHighlight = move.substring(0, 2); $board.find('.square-' + squareToHighlight).addClass('highlight-black'); // Check if the game is over if (game.game_over()) { alert('Game over'); } } }; function onDrop(source, target) { // see if the move is legal var move = game.move({ from: source, to: target, promotion: 'q' // NOTE: always promote to a queen for example simplicity }); // illegal move if (move === null) return 'snapback'; // highlight white's move removeHighlights('white'); $board.find('.square-' + source).addClass('highlight-white'); $board.find('.square-' + target).addClass('highlight-white'); // Make Stockfish move after a short delay window.setTimeout(makeStockfishMove, 250); } function onMoveEnd() { $board.find('.square-' + squareToHighlight).addClass('highlight-black'); } // update the board position after the piece snap // for castling, en passant, pawn promotion function onSnapEnd() { board.position(game.fen()); } var config = { draggable: true, position: 'start', onDragStart: onDragStart, onDrop: onDrop, onMoveEnd: onMoveEnd, onSnapEnd: onSnapEnd }; board = Chessboard('myBoard', config); </script> </body> </html> 如果是正确的,我很可能会在比赛中被击败,但它甚至不会出手。除了 chess.js 文件之外,我还使用了 chessboard.js、stockfish.js。我希望这段代码至少能够运行并随后击败我。 图片是我运行这段代码时的情况。目前,第一个行动始终是我。请专业人士帮助我解决这个问题。 这对我有用。我使用了这里的编译版本:https://github.com/lichess-org/stockfish.js import { Chess } from 'https://cdnjs.cloudflare.com/ajax/libs/chess.js/0.13.4/chess.js'; var game = new Chess() var board = null var $status = $('#status') var $fen = $('#fen') var $pgn = $('#pgn') var wasmSupported = typeof WebAssembly === 'object' && WebAssembly.validate(Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00)); var stockfish = new Worker(wasmSupported ? 'stockfish.wasm.js' : 'stockfish.js'); document.getElementById('board').addEventListener('touchmove', function(e) { e.preventDefault(); // Prevent the default scrolling behavior }, { passive: false }); stockfish.addEventListener('message', function(e) { if (e.data.startsWith('bestmove')) { var bestMove = e.data.split(' ')[1]; game.move({ from: bestMove.slice(0, 2), to: bestMove.slice(2, 4), promotion: 'q' }); board.position(game.fen()); updateStatus(); } }); function onDragStart (source, piece, position, orientation) { // do not pick up pieces if the game is over if (game.game_over()) return false // only pick up pieces for the side to move if ((game.turn() === 'w' && piece.search(/^b/) !== -1) || (game.turn() === 'b' && piece.search(/^w/) !== -1)) { return false } } function onDrop (source, target) { // see if the move is legal var move = game.move({ from: source, to: target, promotion: 'q' // NOTE: always promote to a queen for example simplicity }) // illegal move if (move === null) return 'snapback' updateStatus() stockfish.postMessage('position fen ' + game.fen()); stockfish.postMessage('go depth 15'); } // update the board position after the piece snap // for castling, en passant, pawn promotion function onSnapEnd () { board.position(game.fen()) } function updateStatus () { var status = '' var moveColor = 'White' if (game.turn() === 'b') { moveColor = 'Black' } // checkmate? if (game.in_checkmate()) { status = 'Game over, ' + moveColor + ' is in checkmate.' } // draw? else if (game.in_draw()) { status = 'Game over, drawn position' } // game still on else { status = moveColor + ' to move' // check? if (game.in_check()) { status += ', ' + moveColor + ' is in check' } } $status.html(status) $fen.html(game.fen()) $pgn.html(game.pgn()) } var config = { draggable: true, position: 'start', onDragStart: onDragStart, onDrop: onDrop, onSnapEnd: onSnapEnd, pieceTheme: 'img/chesspieces/wikipedia/{piece}.png' } board = Chessboard('board', config) updateStatus()
如何防止使用我的合法变量而不使用 chess.js 库发生移动
我做了一个合法的变量来知道一个动作是否合法,但我想在将来修改它,而不仅仅是依赖于正常的国际象棋规则,还想要一种方法来阻止该动作进行。 导入 { useState }
我正在尝试从终端运行国际象棋游戏,你必须输入一个动作才能移动棋子,我试图让系统检查玩家输入的棋子是否是.. .
我正在使用 pygame 制作一款国际象棋游戏,大多数问题和错误都有望得到解决,但只有一个让我烦恼。在国际象棋中,国王不能移动到其他国王的相邻方格...
当我在深度为4的这个位置(引擎为黑色)做一些测试时,我正在用Python优化我的国际象棋引擎: 董事会,一切看起来都很好,直到我看到
Python 国际象棋程序中的“断言错误:san() 和 lan() 期望移动合法或为空”
进口象棋 导入国际象棋.pgn 导入国际象棋引擎 将 tkinter 导入为 tk 从 tkinter 导入 simpledialog 导入操作系统 从 tqdm 导入 tqdm # 从弹出窗口获取 FEN 位置的函数 定义
如何使国际象棋负最大算法更喜欢在决策树中较浅的吃子和其他好棋?
假设我们有以下位置(FEN 8/1K6/8/4q2P/8/8/5k2/8 b - - 3 2): 当搜索深度低于 3 时,我的国际象棋引擎会生成 Qxh5 的正确走法。在那之后,问题似乎是