有没有办法看到网格?

时间:2019-04-26 21:06:33

标签: python

我有一个包含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的新手,所以我对功能的了解不多。 是否有一种简单的方法可以将其显示为网格或其他任何形式。我可以做一个网格并在其中写下零件名称吗? 我可以下载一块板的图像并将其加载到特定位置吗?

3 个答案:

答案 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答案等类似图形表示形式的事情。