我试图在python中使用一些与国际象棋相关的库(例如,棋子和国际象棋),它们使用以下符号
r1bqkb1r/pppp1Qpp/2n2n2/4p3/2B1P3/8/PPPP1PPP/RNB1K1NR b KQkq -0 4
我已经搜过了,什么也没找到。我如何操作这一点,如何将标准代数表示法(例如"d4 Nc6 e4 e5 f4 f6 dxe5 fxe5")转换为这个新的代数符号?
发布于 2021-11-03 19:22:08
获取FEN信息:符号表示法
从python中的san获得FEN有两种方法:使用.pgn文件:
import chess
import chess.pgn
pgn = open("your_pgn_file.pgn")
game = chess.pgn.read_game(pgn)
board = game.board()
for move in game.mainline_moves():
board.push(move)
print(board.fen())或者从一个单一的san主线:
import chess
board = chess.Board()
san_mainline = "d4 Nc6 e4 e5 f4 f6 dxe5 fxe5"
for move in san_mainline.split():
board.push_san(move)
print(board.fen())发布于 2021-10-31 13:29:37
这种表示法被称为FEN (Forsyth-Edwards表示法),它看起来就像python知道并能够解析它。
这个表示法实际上并不等同于一个移动列表--这是用于指定一个位置,这也可能是一个起始位置。没有关于这场比赛是如何达到那个程度的完整记录。
Python-国际象棋可以将你加载到它的任何棋盘位置--例如使用PGN符号--变成这个符号。
发布于 2021-10-31 13:41:54
您可以使用python-chess来完成这项工作。下面是使用SAN字符串并在板上进行这些操作的代码:
import chess
san = 'd4 Nc6 e4 e5 f4 f6 dxe5 fxe5'
board = chess.Board()
for move_san in san.split(' '):
board.push_san(move_san)https://stackoverflow.com/questions/69787349
复制相似问题