2015-12-13 3 views
0

Я новичок в 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) 

В этом случае, правые и нижние границы нарисованы правильно, а также последняя вертикальная линия перед правой границей, но последняя горизонтальная линия до нижней границы не нарисована.

Кто-нибудь понимает, что происходит?

Заранее спасибо :)

+0

вы уверены, что у вас есть правильные значения в сетке (в последней ячейке в каждый «столбец»)? – furas

+0

Да, эти значения верны. Я только что решил. Спасибо в любом случае! – scmoure

ответ

1

Проблема заключалась в другом методе, который обновляет состояние всей сетки вычисления следующего состояния каждой ячейки. Внутренний предел итератора в этом методе был неправильным, поэтому сетка фактически проигрывала последний ряд (так что там было ничего, что можно было бы там!)

Смежные вопросы