最后执行循环迭代,但没有任何反应(Python与Pygame)

时间:2015-12-13 20:15:31

标签: python for-loop pygame

我是Python的新手,我试图使用Pygame编写我自己版本的Conway的生命游戏。为了绘制单元格,我编写了这种方法,它是“网格”的一部分。类:

def draw_cells(self, display_surf, tile_colour, bg_colour):
    for column in self.grid:
        for cell in column:
            if cell.state:
                pygame.draw.rect(display_surf, tile_colour, (cell.x, cell.y, self.tile_size, self.tile_size))

其中'网格'是一个二维数组(列表列表)。 问题是底行 - 也就是最后一个小区'在每个列中都没有被绘制,我也不明白为什么。我一步一步地使用了调试器,并且正在执行内部循环的最后一次迭代,但是没有绘制矩形。更重要的是,我为每个循环放置了几个计数器,它们都达到了相同的迭代次数(如果X维度工作正常,但由于内循环的最后一次迭代,Y维度不会计数器应该大于内部计数器。)

实际上,我正在尝试与另一个网格类同样的问题'绘制网格的方法:

def draw_grid(self, display_surf, line_colour):
    #  vertical lines
    for column in self.grid:  
        vertical_start = (column[0].x, column[0].y)
        vertical_end = (vertical_start[0], vertical_start[1] + self.size_y * self.tile_size)
        pygame.draw.line(display_surf, line_colour, vertical_start, vertical_end)

    #  latest vertical line (right border)
    vertical_start = (self.grid[0][0].x + self.size_x * self.tile_size, self.grid[0][0].y)
    vertical_end = (vertical_start[0], vertical_start[1] + self.size_y * self.tile_size)
    pygame.draw.line(display_surf, line_colour, vertical_start, vertical_end)

    #  horizontal lines
    for row in self.grid[0]:
        horizontal_start = (row.x, row.y)
        horizontal_end = (horizontal_start[0] + self.size_x * self.tile_size, horizontal_start[1])
        pygame.draw.line(display_surf, line_colour, horizontal_start, horizontal_end)

    #  latest horizontal line (bottom border)
    horizontal_start = (self.grid[0][0].x, self.grid[0][0].y + self.size_y * self.tile_size)
    horizontal_end = (horizontal_start[0] + self.size_x * self.tile_size, horizontal_start[1])
    pygame.draw.line(display_surf, line_colour, horizontal_start, horizontal_end)

在这种情况下,正确绘制右边框和底边框,以及右边框之前的最后一条垂直线,但是底边框之前的最后一条水平线未被绘制。

有谁知道发生了什么?

提前致谢:)

1 个答案:

答案 0 :(得分:2)

问题在于另一种方法,它更新整个网格的状态,计算每个单元格的下一个状态。该方法中的内部迭代器限制是不正确的,因此网格实际上丢失了最后一行(因此没有任何东西可以在那里绘制!)