【问题标题】:How To Change the turn in chessboard.js?如何更改chessboard.js 中的转弯?
【发布时间】:2015-07-23 10:08:46
【问题描述】:

我正在 chessboard.js 中使用 signalR 创建多人棋盘。 但我在玩家移动方面遇到了问题。

我正在做的是将 FEN 字符串从 client1 发送到 client2。因此 client2 代表船上的 FEN 字符串。 现在的问题是 player2 代表 FEN on Board 但玩家轮次不会被 FEN 改变。 所以玩家 1 和 2 都先移动白色,然后移动黑色。这是不应该的。

我希望 Player1 从白方移动。他的 FEN 被发送到 Player2。然后 Player2 将以黑色移动(但当前 player2 以白色移动,这是错误的)。 所以请帮助我如何强制改变player1或player2的轮到。

【问题讨论】:

    标签: javascript chess chessboard.js


    【解决方案1】:

    在使用 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 (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 作为多人游戏时出现的大部分问题。

    【讨论】:

    • 嘿 Mike Nickaloff,谢谢。对于您的 rply.yes.it 将更加 hepfull,如果您分享您的源代码..
    • 解决方案是 Javascript,使用 worker 和 websockets 与 C++ 后端相结合来保持秩序。你想要代码的哪一部分?它相当广泛......您可以在chess.datafault.net/?cpu=1查看javascript前端源代码(您也可以通过转到chess.datafault.net然后将底部的链接发送给他们来与您的朋友一起玩)
    • 谢谢,。你能告诉我/指导我/向我发送用于在国际象棋游戏中附加国际象棋引擎(鱼等)的源代码吗?实际上我使用过肉桂 javascript 国际象棋引擎,它的速度并不快..vimalraturi.ntl@gmail.com
    • @vimal raturi -- 好吧,如果你想从第三方库中附加一个国际象棋引擎,这将取决于该库是用什么语言编写的——例如,如果它是 C++ 那么你可以让它作为一个本地守护进程运行,然后在你想让计算机移动时使用 websockets 从 javascript 连接到守护进程,此时运行的 C++ 程序将执行必要的计算以制定移动,此时您让守护程序通过该套接字将所需的移动发送回 javascript,然后进行移动。
    猜你喜欢
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多