【问题标题】:How to carry out promotion (piece replacement )in chessboard.js如何在chessboard.js中进行升级(换子)
【发布时间】:2015-06-10 18:23:13
【问题描述】:

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

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

我面临两个问题

  1. 在过路移动后移除棋子。
  2. 典当升级后换子。

这两个问题具有相同的共同根源,即替换板上特定位置的零件。一种解决方案似乎为板对象提供 FEN 并设置它。

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

编辑 根据示例,似乎实现对 en passant 的零件更换的唯一方法是

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

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

【问题讨论】:

  • 关于这类问题的内容如下。它基本上是要求已经有 chessboard.js 的工作实现的人使用自定义编写的代码来测试您的声明。问题是,这对某人或一群人来说是一种巨大的时间浪费。为什么他们必须为您准备代码只是为了测试您的断言?请在这种情况下包含一个工作演示,以节省每个人的时间并获得一个可行的解决方案。如果你复制它,社区很可能会解决它。
  • @DLeh 谢谢你的指点。
  • @amar - 从您的回复中可以明显看出,您只是一个粗鲁的网站用户,对他人期望过高。您在此处没有包含任何可处理的内容,唯一相关的回复是您应该通过谷歌搜索找到的链接,而不是通过询问社区。将来,提出包含可重现示例或特定编程问题的问题。如果您无法“在我可以替换特定类型的部分的其他优雅解决方案中”,那么也许您应该聘请开发人员。
  • 不知道。我刚刚发现当我搜索你的问题时,我对chessboard.js一无所知

标签: chessboard.js


【解决方案1】:

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

  • true(布尔值)表示有效移动
  • 'trash'(字符串),如果你想从棋盘上删除掉的棋子(例如用于典当促销)
  • 'snapback'(字符串)如果移动无效(将棋子返回到原来的方格

当您从 onDrop 返回任何这些值时,板将相应更新。

请注意,处理促销很棘手,因为您需要选择要促销的部分。

任何时候你想更新板子(例如一旦用户选择了一个促销片)只需使用一个新的分来这样做,例如:

board.position(fen);

【讨论】:

  • 感谢您的回答我能够解决它不记得如何。但这很有趣
猜你喜欢
  • 2010-11-16
  • 2019-12-11
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
相关资源
最近更新 更多