Javascript 如何使用chessboard.js for analyze模式撤消和重做国际象棋移动

Javascript 如何使用chessboard.js for analyze模式撤消和重做国际象棋移动,javascript,chess,chessboard.js,Javascript,Chess,Chessboard.js,我正在使用chess.js和chessboard.js作为我的chess a项目 我只想实现撤销和重做功能的国际象棋移动 我正在使用chessboard.js为国际象棋棋步创建“移动记录器”,通过它,用户可以撤消和重做国际象棋步。用户正在从两边下棋来分析棋局 请告诉我是否有人能在这方面提供帮助。从这里开始了解基本设计。 我认为在这个框架中有一些方法可以跟踪指定的过去操作所需的命令 希望有帮助 通常,游戏逻辑、验证和移动历史记录不是通过chessboard.js完成的,而是通过引擎完成的,比如c

我正在使用
chess.js
chessboard.js
作为我的chess a项目

我只想实现撤销和重做功能的国际象棋移动

我正在使用
chessboard.js
为国际象棋棋步创建“移动记录器”,通过它,用户可以撤消和重做国际象棋步。用户正在从两边下棋来分析棋局


请告诉我是否有人能在这方面提供帮助。

从这里开始了解基本设计。

我认为在这个框架中有一些方法可以跟踪指定的过去操作所需的命令


希望有帮助

通常,游戏逻辑、验证和移动历史记录不是通过
chessboard.js
完成的,而是通过引擎完成的,比如
chess.js

对于引擎,可能有一个
undo()
takeback()
函数,请参阅
chess.js
文档以获取以下信息:

chess.js
上还有一个开放分支

此代码在引擎中实现
next()
back()
功能(以及用于存储历史的
future
数组)。这些可能就是您正在寻找的,因为在撤消之后,您提到您要重做

这个分支没有合并,我也不认为它会合并,但它可以在那里查看;基本上只需添加这两个功能:

back: function() {
  var moves = this.history();
  var tmp = new Chess();
  var previous = moves.length-future.length-1;
  for(var i=0;i<previous;i++) {
    tmp.move(moves[i]);
  }
  var previous_fen = tmp.fen();
  tmp.move(moves[previous]);
  future.push(tmp.fen());
  return previous_fen;
},

next: function() {
  return future.pop();
},

然后你可以调用
back()
,分析位置,然后
next()
返回游戏状态。

只有弱小的玩家才会后退,只有傻瓜才会让对手后退。我已经在“chessboard.js”中试过了
back: function() {
  var moves = this.history();
  var tmp = new Chess();
  var previous = moves.length-future.length-1;
  for(var i=0;i<previous;i++) {
    tmp.move(moves[i]);
  }
  var previous_fen = tmp.fen();
  tmp.move(moves[previous]);
  future.push(tmp.fen());
  return previous_fen;
},

next: function() {
  return future.pop();
},
var future = [];