首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将FEN ID转换为棋盘?

如何将FEN ID转换为棋盘?
EN

Stack Overflow用户
提问于 2021-03-03 13:55:18
回答 1查看 362关注 0票数 1

所以我想知道怎样才能把FEN ID转换成棋盘。

代码:

代码语言:javascript
复制
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:毕晓普Q:王后K:国王p:兵

就像你想象的那样,你放置了这样的东西:'wK' in a '--' spot for white和其他的棋子。

可以看出,我已经为棋盘创建了FEN ID,但我想知道如何使用外部的FEN字符串在上面的空白棋盘上生成棋盘。

我很感激我得到的任何帮助。如果您需要更多信息,请让我知道。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-03 15:08:44

这基本上与你所做的相反。

代码语言:javascript
复制
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) )
代码语言:javascript
复制
[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]$ 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66451525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档