我是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)
在这种情况下,正确绘制右边框和底边框,以及右边框之前的最后一条垂直线,但是底边框之前的最后一条水平线未被绘制。
有谁知道发生了什么?
提前致谢:)
答案 0 :(得分:2)
问题在于另一种方法,它更新整个网格的状态,计算每个单元格的下一个状态。该方法中的内部迭代器限制是不正确的,因此网格实际上丢失了最后一行(因此没有任何东西可以在那里绘制!)