如何在Python控制台中打印文本间距?

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

我正在制作一个国际象棋游戏,我希望它能够在打印控制台中完全渲染。是的,我知道做一些 PyGame 或 TKinter 更有意义,但这不是我的目标。

我发现了一些 Windows 内置的国际象棋表情符号,所以这就是我用于棋子的表情符号。下面是我的代码:

letters = ["::", "wP", "wB", "wN", "wR", "wQ", "wK", "bP", "bB", "bN", "bR", "bQ", "bK"]
symbols = ["*", "♙", "♗", "♘", "♖", "♕", "♔", "♟", "♝", "♞", "♜", "♛", "♚"]
board = [
    ["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"]
]

def compile_board(board_grid):
    compiled_board = """"""
    for rank in board_grid:
        for square in rank:
            compiled_board += f"{symbols[letters.index(square)]} "
        compiled_board += "\n"
    return compiled_board

print_board = compile_board(board)
print(print_board)

如果你运行它,你会发现符号没有对齐。我认为这可以归结为表情符号与字符的尺寸不同。

我尝试使用字母(例如:黑骑士是bN,白主教是wB)并使用“::”作为间隔符,一切都完美排列。所以我知道这不是我的代码的问题。我真的不想删除字符而只是使用字母。我还想在每个方格上标记一些东西(即使是空的),以便主教和皇后的动作可见。

所以我想我的问题是:如何制作自定义长度的字符,或格式化现有字符以匹配表情符号的宽度?

python character chess
1个回答
0
投票

您可以使用全角unicode字符。以下是使用全角 A 作为间距的示例:

symbols = ["\uff21", "♙", "♗", "♘", "♖", "♕", "♔", "♟", "♝", "♞", "♜", "♛", "♚"]

它打印出来是这样的:

♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜ 
♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟ 
A A A A A A A A 
A A A A A A A A 
A A A A A A A A 
A A A A A A A A 
♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙ 
♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖
© www.soinside.com 2019 - 2024. All rights reserved.