首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用chessboard.js for analyze模式撤消和重做国际象棋走法

如何使用chessboard.js for analyze模式撤消和重做国际象棋走法
EN

Stack Overflow用户
提问于 2014-06-24 01:33:41
回答 2查看 2.3K关注 0票数 3

我正在为我的国际象棋项目使用chess.jschessboard.js

我只想实现国际象棋走法的撤消和重做功能。

我正在使用chessboard.js创建国际象棋移动的“移动记录器”,通过它用户可以撤消和重做国际象棋移动。用户正在从两个方面分析国际象棋难题。

如果有人能帮上忙,请告诉我。

EN

回答 2

Stack Overflow用户

发布于 2016-12-04 22:15:53

通常情况下,游戏逻辑、验证和移动历史记录不是使用chessboard.js完成的,而是使用诸如chess.js之类的引擎完成的。

对于引擎,可能有undo()takeback()函数,有关example,请参阅chess.js文档

代码语言:javascript
复制
chess.move('e4');
chess.fen();
// -> 'rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1'

chess.undo();
// -> { color: 'w', from: 'e2', to: 'e4', flags: 'b', piece: 'p', san: 'e4' }
chess.fen();
// -> 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1'

chess.js也有一个开放的分支机构,https://github.com/jhlywa/chess.js/pull/48

这段代码在引擎中实现了next()back()函数(以及用于存储历史记录的future数组)。这些可能就是你正在寻找的,因为在你撤销之后,你提到你想要重做。

这个分支没有合并,我认为它不会合并,但它是可以查看的;基本上只需添加这两个函数:

代码语言:javascript
复制
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();
},

和一个数组

代码语言:javascript
复制
var future = [];

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

票数 3
EN

Stack Overflow用户

发布于 2014-06-24 01:47:59

从这里开始了解基本设计。data structure used to implement UNDO and REDO option

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

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24371912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档