JavaScript象棋符号转换函数

10

我正在寻找一个JavaScript库,可以将包含棋子和目的地移动符号的PGN文件转换为其他格式。

... 3. cxd5 Qxd5 ...

只使用平方坐标进行记号,例如:

... 3. c4-d5 h5-d5 ...

如果没有库,那么要使这个程序非常可靠会需要相当多的工作,因为它必须遍历每一步,验证合法的移动以确定哪个棋子可以到达目标位置。

有什么javascript工具可以帮助我吗?或者有没有其他语言的工具能够轻松移植到javascript中?


2
另一方面,模拟整个游戏似乎是一个有趣的项目 :-) - John Dvorak
在谷歌上搜索“javascript pgn library”,此问题排名第8。有没有一个术语来描述这种情况?也许是量子力学中的某些内容,即观察事物会影响结果的事实。 - Billy Moon
2
谷歌搜索第一条:https://github.com/bmarini/jchess,第二条:https://github.com/veltzer/jschess,第三条:http://chesstempo.com/pgn-viewer.html - Christoph
@Christoph,感谢您提供的那些链接。不幸的是,我想在服务器上使用nodejs完成所有这些操作,而那些库和大多数其他库都旨在在浏览器中输出工作查看器。我似乎无法提取相关部分,因为它们非常集成。 - Billy Moon
1个回答

8
前言:我并不是一个真正的国际象棋玩家,也不完全理解PGN。然而,我认为这是正确的。如果我有任何错误,请告诉我。
既然您说您想在服务器端进行操作,我查找了一些node.js的国际象棋包。从nodejs模块标记为chess中找到了很多看起来不错的候选项。我最终选择了jhlywa / chess.js
app.js
var cjs = require('./chess.js'),
  chess = new cjs.Chess(),
  pgn = ['[Event "Casual Game"]',
       '[Site "Berlin GER"]',
       '[Date "1852.??.??"]',
       '[EventDate "?"]',
       '[Round "?"]',
       '[Result "1-0"]',
       '[White "Adolf Anderssen"]',
       '[Black "Jean Dufresne"]',
       '[ECO "C52"]',
       '[WhiteElo "?"]',
       '[BlackElo "?"]',
       '[PlyCount "47"]',
       '',
       '1.e4 e5 2.Nf3 Nc6 3.Bc4 Bc5 4.b4 Bxb4 5.c3 Ba5 6.d4 exd4 7.O-O',
       'd3 8.Qb3 Qf6 9.e5 Qg6 10.Re1 Nge7 11.Ba3 b5 12.Qxb5 Rb8 13.Qa4',
       'Bb6 14.Nbd2 Bb7 15.Ne4 Qf5 16.Bxd3 Qh5 17.Nf6+ gxf6 18.exf6',
       'Rg8 19.Rad1 Qxf3 20.Rxe7+ Nxe7 21.Qxd7+ Kxd7 22.Bf5+ Ke8',
       '23.Bd7+ Kf8 24.Bxe7# 1-0'],
  i = 1,
  moveHistory;

chess.load_pgn(pgn.join('\n'));
moveHistory = chess.history({ verbose: true });

while (moveHistory.length > 0) {
  var p1Move = moveHistory.shift(),
    p2Move = moveHistory.shift(),
    p1c = p1Move.from + '-' + p1Move.to,
    p2c = (p2Move == undefined) ? '' : p2Move.from + '-' + p2Move.to;
  console.log(i + '. ' + p1c + ' ' + p2c );
  i++;
}

console.log输出的结果:

1. e2-e4 e7-e5
2. g1-f3 b8-c6
3. f1-c4 f8-c5
4. b2-b4 c5-b4
5. c2-c3 b4-a5
6. d2-d4 e5-d4
7. e1-g1 d4-d3
8. d1-b3 d8-f6
9. e4-e5 f6-g6
10. f1-e1 g8-e7
11. c1-a3 b7-b5
12. b3-b5 a8-b8
13. b5-a4 a5-b6
14. b1-d2 c8-b7
15. d2-e4 g6-f5
16. c4-d3 f5-h5
17. e4-f6 g7-f6
18. e5-f6 h8-g8
19. a1-d1 h5-f3
20. e1-e7 c6-e7
21. a4-d7 e8-d7
22. d3-f5 d7-e8
23. f5-d7 e8-f8
24. a3-e7 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接