簡體   English   中英

如何使用 python 操作這個國際象棋符號?

[英]How can I manipulate this chess notation with python?

我正在嘗試在 python 中使用一些與國際象棋相關的庫(例如 chessnut 和 chess),它們使用以下符號

r1bqkb1r/pppp1Qpp/2n2n2/4p3/2B1P3/8/PPPP1PPP/RNB1K1NR b KQkq - 0 4

我已經搜索過它並沒有找到任何東西。 我如何操作它以及如何將標准代數符號(例如“d4 Nc6 e4 e5 f4 f6 dxe5 fxe5”)轉換為這個新符號?

該符號稱為 FEN( Forsyth–Edwards Notation ),看起來 python-chess 知道並可以解析它。

這種表示法並不真正等同於移動列表——這是用於指定一個位置,它也可能是一個起始位置。 沒有關於游戲如何達到這一點的完整記錄。

Python-chess 可以將您加載到其中的任何棋盤位置(例如使用 PGN 表示法)轉換為這種表示法。

您可以使用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)

FEN 信息: https : //en.wikipedia.org/wiki/Forsyth–Edwards_Notation

有兩種方法可以從 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())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM