我正在为我的国际象棋项目使用chess.js和chessboard.js。
我只想实现国际象棋走法的撤消和重做功能。
我正在使用chessboard.js创建国际象棋移动的“移动记录器”,通过它用户可以撤消和重做国际象棋移动。用户正在从两个方面分析国际象棋难题。
如果有人能帮上忙,请告诉我。
发布于 2016-12-04 22:15:53
通常情况下,游戏逻辑、验证和移动历史记录不是使用chessboard.js完成的,而是使用诸如chess.js之类的引擎完成的。
对于引擎,可能有undo()或takeback()函数,有关example,请参阅chess.js文档
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数组)。这些可能就是你正在寻找的,因为在你撤销之后,你提到你想要重做。
这个分支没有合并,我认为它不会合并,但它是可以查看的;基本上只需添加这两个函数:
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 = [];然后您可以调用back(),分析位置,然后使用next()返回到游戏状态。
发布于 2014-06-24 01:47:59
从这里开始了解基本设计。data structure used to implement UNDO and REDO option
我假设这个框架中有一些方法可以跟踪指定的过去操作所需的命令。
希望这能有所帮助!
https://stackoverflow.com/questions/24371912
复制相似问题