Я пытаюсь воспроизвести «Игру жизни» Конвея на Python. Правила этой симуляции и ее правильно работающую версию можно найти здесь: https://bitstorm.org/gameoflife/
В моей версии, когда я случайным образом назначаю клетки живыми в начале, кажется, что они ведут себя правильно, с классическими аморфными каплями клеток, расширяющимися по экрану.
Однако, когда я повторяю расположение «планерной пушки» (которое также можно увидеть на связанном веб-сайте), клетки не обновляются должным образом: структуры немного распадаются, а затем движение клеток остается застойным.
Это заставляет меня поверить, что в моем коде есть логическая ошибка - любая помощь будет оценена!
Это раздел моего кода в моем классе Cell
, который обновляет свое выживание на основе его neighbors
(восемь окружающих его ячеек):
def update(self, neighbors):
numAliveNeighbors = 0
for neighbor in neighbors:
if neighbor.isAlive:
numAliveNeighbors+=1
if numAliveNeighbors <= 1 or numAliveNeighbors >=4:
self.isAlive = False
elif not self.isAlive and numAliveNeighbors is 3:
self.isAlive = True
Это часть моего кода, которая находит все neighbors
каждого cell
и вызывает для них метод update
:
for row in range(len(cells)):
for column in range(len(cells[row])):
neighbors = []
for tempRow in range (row-1, row + 2):
for tempColumn in range (column-1, column + 2):
if tempRow >= 0 and tempRow < len(cells):
if tempColumn >= 0 and tempColumn < len(cells[tempRow]):
if not(tempRow is row and tempColumn is column):
neighbors.append(cells[tempRow][tempColumn])
cells[row][column].update(neighbors)