如何在chessboard.js中改变转弯?

时间:2015-07-23 10:08:46

标签: javascript chess chessboard.js

我在chessboard.js工作,用于使用signalR创建一个多人棋盘。 但我在玩家运动方面遇到了问题。

我正在做的是将FEN字符串从client1发送到client2.and因此client2表示船上的FEN字符串。 现在的问题是,player2代表了FEN,但玩家转弯不会被FEN改变。 所以玩家1和2都先移动白色然后再移动黑色。这是不可能的。

我希望Player1从白方移动。他的FEN被发送到Player2.Then Player2将以黑色移动(但目前player2移动时带有白色,这是错误的)。 所以请帮助我如何强制改变player1或player2的转弯。

enter image description here

1 个答案:

答案 0 :(得分:2)

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

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

chess.js的第157行有:

   var turn = WHITE;

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

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

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

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


chess.js (不是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作为多人游戏提出的大部分问题。