如何更改 chessboard.js 中的转弯?

How To Change the turn in chessboard.js?

我在 chessboard.js 工作,使用 signalR 创建多人棋盘。 但是我在播放器移动方面遇到了问题。

我正在做的是将 FEN 字符串从 client1 发送到 client2.and 因此 client2 代表船上的 FEN 字符串。 现在的问题是 player2 代表棋盘上的 FEN,但 FEN 没有改变玩家的轮次。 所以玩家 1 和 2 都先白后黑 secondly.and 这是不应该的。

我希望 Player1 从白色移动 side.His FEN 被发送到 Player2.then Player2 将以黑色移动(但目前 player2 以白色移动,这是错误的)。 所以请帮助我如何强行改变player1或player2的回合。

我在使用 chessboard.js 和 chess.js(引擎 运行 实际游戏规则)创建类似的多人国际象棋游戏时遇到了同样的问题

答案在 chess.js 文件中,该文件在 chessboard.js api 文档中引用。

chess.js 的第 157 行是这样的:

   var turn = WHITE;

如果你想改变整个游戏的回合,你可以简单地这样做:

turn = BLACK;
turn = WHITE;
turn = "w";
turn = "b";

它们中的任何一个都可以。我还创建了一个方便的函数,可以更容易地被其他脚本使用,它将 setTurn() 和 turn() 添加到 public API..


要添加到 API 以进行转弯操作的便捷功能:


chess.js (not chessboard.js) 的第 1115 行附近,您会发现一个函数以:

return {
/***************************************************************************
 * PUBLIC CONSTANTS (is there a better way to do this?)
 **************************************************************************

我只是在评论的正下方添加了以下内容:

turn: function() {
   return turn;
},
setTurn: function(newTurn) {
    turn = newTurn;
},

结果是现在来自 chess.js 的任何一个实例 (默认名称为 game),您可以像这样简单地更改轮次:

game.setTurn("b");
game.setTurn("w");

这只是我 运行 在制作多人游戏版本时遇到的一个障碍。您可能会面临的下一个障碍是:如果玩家断开连接或没有响应会怎样?如果他们将一个 JS 文件注入到允许他们随意改变轮次的页面中呢?这些问题将更难解决。还要注意其他类型的注入攻击,例如从外部操纵游戏 FEN。

祝你好运!

如果你想让我分享我的源代码,请发表评论——我解决了 chessboard.js 作为多人游戏时出现的大部分问题。