Я новичок в Python, и я пытаюсь закодировать свою собственную версию игры Conway's Life с Pygame. Для того, чтобы привлечь клетки, я закодирован этот метод, который является частью класса А «Сетка»:Последняя для цикла итерация выполнена, но ничего не происходит (Python with Pygame)
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)
В этом случае, правые и нижние границы нарисованы правильно, а также последняя вертикальная линия перед правой границей, но последняя горизонтальная линия до нижней границы не нарисована.
Кто-нибудь понимает, что происходит?
Заранее спасибо :)
вы уверены, что у вас есть правильные значения в сетке (в последней ячейке в каждый «столбец»)? – furas
Да, эти значения верны. Я только что решил. Спасибо в любом случае! – scmoure