我在chessboard.js工作,用于使用signalR创建一个多人棋盘。 但我在玩家运动方面遇到了问题。
我正在做的是将FEN字符串从client1发送到client2.and因此client2表示船上的FEN字符串。 现在的问题是,player2代表了FEN,但玩家转弯不会被FEN改变。 所以玩家1和2都先移动白色然后再移动黑色。这是不可能的。
我希望Player1从白方移动。他的FEN被发送到Player2.Then Player2将以黑色移动(但目前player2移动时带有白色,这是错误的)。 所以请帮助我如何强制改变player1或player2的转弯。
答案 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中。
在 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作为多人游戏提出的大部分问题。