如何将 FEN ID 转换为棋盘?
How to convert FEN ID onto a Chess Board?
所以我想知道如何将 FEN ID 转换到棋盘上。
代码:
import io
def board_to_fen(board):
# Use StringIO to build string more efficiently than concatenating
with io.StringIO() as s:
for row in board:
empty = 0
for cell in row:
c = cell[0]
if c in ('w', 'b'):
if empty > 0:
s.write(str(empty))
empty = 0
s.write(cell[1].upper() if c == 'w' else cell[1].lower())
else:
empty += 1
if empty > 0:
s.write(str(empty))
s.write('/')
# Move one position back to overwrite last '/'
s.seek(s.tell() - 1)
# If you do not have the additional information choose what to put
s.write(' w KQkq - 0 1')
return s.getvalue()
board = [
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
]
print(board_to_fen(board))
board_to_fen(board)
所以我们有上面的棋盘,其中 '--'
代表棋盘上的一个方块,一个空白方块。所以你可以像这样使用符号:'w'
代表白色,'b'
代表黑色。对于棋子:
R: 车
N:骑士
B:主教
问:女王
克:国王
p: 棋子
正如您想象的那样,您放置了类似的东西:'wK'
放在 '--'
位置,供白王和其他棋子使用。
如您所知,我已经为棋盘制作了 FEN ID,但我想知道如何使用外部的 FEN 字符串在上面的空白棋盘上生成棋盘。
我很感激收到的任何帮助。如果您需要更多信息,请告诉我。
这基本上与你所做的相反。
fen = 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1'
def fen_to_board(fen):
board = []
for row in fen.split('/'):
brow = []
for c in row:
if c == ' ':
break
elif c in '12345678':
brow.extend( ['--'] * int(c) )
elif c == 'p':
brow.append( 'bp' )
elif c == 'P':
brow.append( 'wp' )
elif c > 'Z':
brow.append( 'b'+c.upper() )
else:
brow.append( 'w'+c )
board.append( brow )
return board
from pprint import pprint
pprint( fen_to_board(fen) )
[timr@Tims-Pro:~/src]$ python fen.py
[['bR', 'bN', 'bB', 'bQ', 'bK', 'bB', 'bN', 'bR'],
['bp', 'bp', 'bp', 'bp', 'bp', 'bp', 'bp', 'bp'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['wp', 'wp', 'wp', 'wp', 'wp', 'wp', 'wp', 'wp'],
['wR', 'wN', 'wB', 'wQ', 'wK', 'wB', 'wN', 'wR']]
[timr@Tims-Pro:~/src]$
所以我想知道如何将 FEN ID 转换到棋盘上。
代码:
import io
def board_to_fen(board):
# Use StringIO to build string more efficiently than concatenating
with io.StringIO() as s:
for row in board:
empty = 0
for cell in row:
c = cell[0]
if c in ('w', 'b'):
if empty > 0:
s.write(str(empty))
empty = 0
s.write(cell[1].upper() if c == 'w' else cell[1].lower())
else:
empty += 1
if empty > 0:
s.write(str(empty))
s.write('/')
# Move one position back to overwrite last '/'
s.seek(s.tell() - 1)
# If you do not have the additional information choose what to put
s.write(' w KQkq - 0 1')
return s.getvalue()
board = [
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
]
print(board_to_fen(board))
board_to_fen(board)
所以我们有上面的棋盘,其中 '--'
代表棋盘上的一个方块,一个空白方块。所以你可以像这样使用符号:'w'
代表白色,'b'
代表黑色。对于棋子:
R: 车 N:骑士 B:主教 问:女王 克:国王 p: 棋子
正如您想象的那样,您放置了类似的东西:'wK'
放在 '--'
位置,供白王和其他棋子使用。
如您所知,我已经为棋盘制作了 FEN ID,但我想知道如何使用外部的 FEN 字符串在上面的空白棋盘上生成棋盘。
我很感激收到的任何帮助。如果您需要更多信息,请告诉我。
这基本上与你所做的相反。
fen = 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1'
def fen_to_board(fen):
board = []
for row in fen.split('/'):
brow = []
for c in row:
if c == ' ':
break
elif c in '12345678':
brow.extend( ['--'] * int(c) )
elif c == 'p':
brow.append( 'bp' )
elif c == 'P':
brow.append( 'wp' )
elif c > 'Z':
brow.append( 'b'+c.upper() )
else:
brow.append( 'w'+c )
board.append( brow )
return board
from pprint import pprint
pprint( fen_to_board(fen) )
[timr@Tims-Pro:~/src]$ python fen.py
[['bR', 'bN', 'bB', 'bQ', 'bK', 'bB', 'bN', 'bR'],
['bp', 'bp', 'bp', 'bp', 'bp', 'bp', 'bp', 'bp'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['--', '--', '--', '--', '--', '--', '--', '--'],
['wp', 'wp', 'wp', 'wp', 'wp', 'wp', 'wp', 'wp'],
['wR', 'wN', 'wB', 'wQ', 'wK', 'wB', 'wN', 'wR']]
[timr@Tims-Pro:~/src]$