我正在制作一个国际象棋游戏,其中棋盘由2d阵列代表。然而,国际象棋棋子的宽度与空格的宽度不同,所以当我尝试像这样打印时它们会被取代:
♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖
♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙
♟
♟ ♟ ♟ ♟ ♟ ♟ ♟
♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜
这是打印功能:
def print_board():
y = ["♖", "♜", "♗", "♝", "♘", "♞", "♕", "♛", "♔","♚", "♙", "♟"," "]
for i in range(8):
tempListe = "".join(board[i])
z=0
for x in ["T","t","L","l","H","h","D","d","K","k","P","p","_"]:
if x in tempListe:
tempListe = tempListe.replace(x,y[z])
z+=1
for j in range(8):
print("{0:2}".format(tempListe[j]),end="")
print("")
print_board()
我尝试了许多不同的事情,但一切似乎都是一样的。如果没有碎片之间的空间变得太大,我怎么能解决这个问题?
答案 0 :(得分:1)
T,t,L,l,H,h,D,d,K,k,P,p,_= "♖♜♗♝♘♞♕♛♔♚♙♟ "
board = [
[T,L,H,D,K,H,L,T],
[P,P,P,P,P,P,P,P],
[_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_],
[p,p,p,p,p,p,p,p],
[t,l,h,d,k,h,l,t]
]
board2 = [
T,L,H,D,K,H,L,T,
P,P,P,P,P,P,P,P,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
_,_,_,_,_,_,_,_,
p,p,p,p,p,p,p,p,
t,l,h,d,k,h,l,t
]
def printBoard():
for e in board:
for ee in e:
print(ee, end='')
print()
代码可以继续使用另一种布局:
def printBoard2():
b = "{:2}{:2}{:2}{:2}{:2}{:2}{:2}{:2}\n"\
"{:2}{:2}{:2}{:2}{:2}{:2}{:2}{:2}\n"\
"{:2}{:2}{:2}{:2}{:2}{:2}{:2}{:2}\n"\
"{:2}{:2}{:2}{:2}{:2}{:2}{:2}{:2}\n"\
"{:2}{:2}{:2}{:2}{:2}{:2}{:2}{:2}\n"\
"{:2}{:2}{:2}{:2}{:2}{:2}{:2}{:2}\n"\
"{:2}{:2}{:2}{:2}{:2}{:2}{:2}{:2}\n"\
"{:2}{:2}{:2}{:2}{:2}{:2}{:2}{:2}".format(*board2)
return b
board2[36] = p
board[4][3] = T
printBoard()
print("\n\n")
print(printBoard2())
最后输出是
第一个
♖♗♘♕♔♘♗♖
♙♙♙♙♙♙♙♙
♖
♟♟♟♟♟♟♟♟
♜♝♞♛♚♞♝♜
第二种布局
♖ ♗ ♘ ♕ ♔ ♘ ♗ ♖
♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙
♟
♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟
♜ ♝ ♞ ♛ ♚ ♞ ♝ ♜
在promt上它看起来是对齐的,但是这里(在html中)没有。 我会把它的图像放在下面。
答案 1 :(得分:0)
您试图在不使用水平制表符的情况下呈现表格数据(因为它会产生相当宽的列)。但是您的输出设备具有不同的空间宽度和象棋符号,因此使用空格将不起作用。如果这是一个等宽的文本,很可能你的显示设备回落到另一种字体,因为主要字体缺少棋子,这种差异将是宽度问题的根源。
有几个宽度的特殊spaces,包括数字宽度,但(据我所知),没有为chess symbols定义特定宽度。我的第一个想法是,如果它们可以与特别宽的空间结合,但Unicode似乎没有组合空间。这留下了两个基本选项:为此任务使用布局系统(如HTML表),或使用包含间距和国际象棋符号的等宽字体。后者最容易在您自己的终端中完成,或者可以使用webfont在您自己的网页上请求,但有许多地方您无法控制,包括单独的Web浏览器。尽管chess.stackexchange.com似乎有一个javascript棋盘渲染器(instructions),但Stack Overflow特别不允许在其Markdown中使用表。
另一个(丑陋的)解决方法是使用其他格式化功能在空白空间中渲染国际象棋棋子,但颜色使它们不可见。这对于那些具有自己颜色的字体不起作用,就像表情符号那样。它还会对屏幕阅读器或复制文本造成严重破坏。