如何freez black并允许在chessboard.js和chess.js中播放白色

时间:2018-01-24 10:57:37

标签: chessboard.js

如何在chessboard.js和chess.js中运行国际象棋游戏,但只允许白人玩家移动棋子? 我需要让它总是白转。如果我移动白方,我想在白方再做一次。

我想做一个“国际象棋移动游戏”,白方应该消灭所有黑色棋子,例如只有5个动作。这就是为什么我想像普通游戏那样让白方发挥,但是黑方保持不动(永远不会转弯,不可拖动)。

2 个答案:

答案 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);

第二,你必须强制转弯。

  1. 如果您通过将FEN中的位置和load FEN置于棋盘并将侧边移动设置为W来重新加载游戏,您将获得所需的行为。

  2. 您可以在该问题中稍微编辑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));
}