如何在chessboard.js和chess.js中运行国际象棋游戏,但只允许白人玩家移动棋子? 我需要让它总是白转。如果我移动白方,我想在白方再做一次。
我想做一个“国际象棋移动游戏”,白方应该消灭所有黑色棋子,例如只有5个动作。这就是为什么我想像普通游戏那样让白方发挥,但是黑方保持不动(永远不会转弯,不可拖动)。
答案 0 :(得分:0)
此问题比chess.js
更关注chessboard.js
,因为chess.js
是您正在使用的国际象棋引擎。
这样做会破坏游戏历史。
首先,你可以覆盖董事会的onDragStart
,例如:
var onDragStart = function(source, piece, position, orientation) {
// if it's not white, don't allow drag
if (piece.search(/^w/) === -1) ||
return false;
}
};
var cfg = {
draggable: true,
position: 'start',
onDragStart: onDragStart
};
var board = ChessBoard('board', cfg);
第二,你必须强制转弯。
如果您通过将FEN中的位置和load
FEN置于棋盘并将侧边移动设置为W来重新加载游戏,您将获得所需的行为。
您可以在该问题中稍微编辑chess.js
的来源,https://github.com/jhlywa/chess.js/issues/62。作者在这里发布了这个片段:
/* totally untested ... this will blow your game state/history */
function set_turn(chess, color) {
var tokens = chess.fen().split(' ');
tokens[1] = color;
chess.load(tokens.join(' '));
}
答案 1 :(得分:0)
我的Chessboard JS版本是v.1.0.0。
最好的方法是使用these instructions。
将配置传递给Chessboard对象时(初始化时),您可以指定回调函数,当板上发生某些事件时将调用这些函数。
为了允许/防止玩家移动棋子,我们需要为onDragStart指定回调,并返回true值以允许操作,否则返回false。
例如,我们可以检查用户是谁,或者是否打开了任何标志。
另外,有几个参数传递给onDragStart函数,以帮助您决定是否让用户移动作品。
只需返回false即可阻止移动,而返回true则可以阻止移动。
例如:
const chessboardConfig = {
position: 'start',
draggable: true,
onDragStart: onDragStart,
};
// Create chessboard and chess obj
const board = window.Chessboard('elementDomID', chessboardConfig);
function onDragStart(source, piece, position, orientation) {
// Validate side moving piece
return !((orientation === 'white' && piece.search(/^w/) === -1) ||
(orientation === 'black' && piece.search(/^b/) === -1));
}