从 pgn 解析动作

问题描述 投票:0回答:1

我有一项服务,可以从数据库中获取游戏并向其添加动作。另外,它编辑当前的 pgn(动作字符串)。是否有任何函数可以获取给定的动作字符串并从中解析动作?

我正在尝试这个,但遇到了问题

board = chess.Board()
    if game.moves!="":
        for move in game.moves.split():
            board.push(chess.Move.from_uci(move))

在尝试将第一步附加到新游戏后,我遇到了这个问题:

board.push(chess.Move.from_uci(move))
           ^^^^^^^^^^^^^^^^^^^^^^^^^
raise InvalidMoveError(f"expected uci string to be of length 4 or 5: {uci!r}")
chess.InvalidMoveError: expected uci string to be of length 4 or 5: '1.'
chess python-chess
1个回答
0
投票

您的

game.moves
有步数,如
"1. e4"
,并且可能也没有 UCI 格式的步数(例如
"e2e4"
)。

要处理 PGN 表示法,请使用

chess.pgn
库及其
read_game
函数。

示例:

import chess
import chess.pgn
import io

moves = "1. e4 e5 2. Nf3 *"
pgn = io.StringIO(moves)
game = chess.pgn.read_game(pgn)
board = game.board()
for move in game.mainline_moves():
    board.push(move)
    print(move)

输出:

e2e4
e7e5
g1f3
© www.soinside.com 2019 - 2024. All rights reserved.