我有一个包含8个列表的列表,其中没有8个列表(类似于8x8的网格)。 我把一块木板塞满了几块,现在我想以一种友好的方式看一下木板。
现在我正在使用此方法:
class ChessBoard():
def __init__(self):
self.board = [[None for x in range(0, 8)] for y in range(0, 8)]
def Show(self):
for line in self.board:
new_line = [None for x in range(0, 8)]
for i in range(0, 8):
if line[i] is not None:
new_line[i] = line[i].kind
print(new_line)
这样打印:
['White Rook', None, None, None, None, None, None, None]
['White Rook', None, None, None, None, None, None, None]
[None, None, None, None, None, None, None, None]
[None, None, None, None, None, None, None, None]
[None, None, None, None, None, None, None, None]
[None, None, None, None, 'Black King', None, None, None]
[None, None, None, None, None, None, 'White King', None]
[None, None, None, None, None, None, None, None]
我是python的新手,所以我对功能的了解不多。 是否有一种简单的方法可以将其显示为网格或其他任何形式。我可以做一个网格并在其中写下零件名称吗? 我可以下载一块板的图像并将其加载到特定位置吗?
答案 0 :(得分:1)
您可以手工完成,这并不困难。遍历数组并找出每一列中最长的项目,然后再次遍历它,并打印将每个项目填充到该列的最大宽度的每个单元格。
涉及到这一点,在单元格内实现包装甚至非常容易。
对我来说,这很有意义,我一直都在使用它。由于它仅显示地图列表(或对象列表),因此可以无限重用。自从我在Groovy中做到这一点以来,我真的没有python源代码向您展示。
答案 1 :(得分:0)
有许多使用Python的可视化工具,您应该使用其中一种。对于此任务,由于学习曲线和您的要求,我建议使用Pygame
而不是GUI库。
Pygame主要提供绘图功能,可以直接进行屏幕交互。 GUI模块也是如此,但是需要了解一些小部件以及画布等之间的父子关系。
但是,无论哪种方式,您都需要在继续工作之前学习一些概念,例如如何显示板子,如何存储和显示零件,基本的坐标系理解,Pygame(通常是任何应用程序)的运行机制。等
有很多例子。实际上,我也对国际象棋感兴趣,因此我确实编写了一个国际象棋程序(使用AI的任何第三方引擎)。可视化确实是一项艰巨的任务(如果以前从未做过类似的工作),但是我确实很有趣地实现了国际象棋规则(过客,典当提升,cast等),这不是您要问的,但值得一提。 / p>
https://github.com/Rockybilly/ITUChess
您可以看看是否有帮助。我只是为了好玩而写的,但我记得要对它进行充分的记录才能理解。
答案 2 :(得分:0)
假设您要获得印刷电路板的调试表示,我通过填充当前电路板上的最大长度字符串来广泛实现所需的输出。
忽略我在板上的[0] [0]上增加了一个骑士,这是为了测试。
此外,如果每一列都有一块,它将占据屏幕的大部分内容。您可能还希望将以上\n
添加到ChessBoard的__repr__
输出中,以便将网格打印在新的一行上。
# Python 3
class Piece():
def __init__(self, _kind):
self.kind = _kind
def __repr__(self):
return self.kind
class ChessBoard():
def __init__(self):
self.board = [[None for x in range(0, 8)] for y in range(0, 8)]
self.board[0][0] = Piece("Black knight")
self.board[1][0] = Piece("White Rook")
def __repr__(self):
strings = [["%s" % x for x in y] for y in self.board]
maxlens = [len(max(strings[x], key=len))
for x in range(0, 8)]
padded = [["%-*s" % (maxlens[x], strings[x][y])
for x in range(0, 8)] for y in range(0, 8)]
rowed = ["[%s]" % ", ".join(x).strip() for x in padded]
return "\n".join(rowed)
在旁注中,请参阅Prune关于提出问题的回答,您希望研究诸如以python打印字符串矩阵(列表列表)或参考pygame答案等类似图形表示形式的事情。