如何在chessboard.js中进行促销(换件)

时间:2015-06-10 18:23:13

标签: chessboard.js

我有自己的pgn解析器,它支持n个并行变化和嵌套变体。

我已经编写了一个包装器来使用chessboard.js。

我面临两个问题

  1. 移动后移除pawn。
  2. 在典当促销后换片。
  3. 这两个问题具有相同的共同根,即替换船上特定位置的棋子。一种解决方案似乎为板对象提供FEN并设置它。

    在文档中没有找到任何东西。 我想要一些其他优雅的解决方案,我可以替换特定的片段类型,任何建议都会有所帮助。

    修改 似乎根据示例实现替换件的唯一方法是

    // for castling, en passant, pawn promotion
    var onSnapEnd = function() {
      board.position(game.fen());// re positioning board by providing FEN
    };   
    

    提供board.move("<en passant>")执行移动但不移除实际位于目标位置之前的棋子。

1 个答案:

答案 0 :(得分:1)

要移动任何棋子,您必须在初始化国际象棋js对象时注册onDrop处理程序。 该函数应返回:

  • 有效(布尔值)表示有效的举动
  • 如果要从板上移除掉下的棋子(例如用于典当促销),请“ trash”(字符串)
  • 'snapback'(字符串),如果移动无效(会将棋子返回其原始方块

当您从onDrop返回这些值中的任何一个时,开发板都会相应更新。

请注意,处理促销活动非常棘手,因为您需要选择一块促销商品。

任何时候您想要更新木板(例如,一旦用户选择了一块促销品),都只需使用新的栅栏即可,例如:

board.position(fen);