Вы должны предотвратить несуществующие индексы, такие как -1 и self.width, self.width + 1 и т. Д. c ...
Я думаю, что проще сделать функцию, которая выполняет проверку для 8 очков вокруг каждой комбинации xy
# =========================================
def count_neighbors(self, x , y):
if self.width < 3 or self.height < 3:
return 0
neighbors = 0
x_range = []
y_range = []
# get only the valid x and y indexes ------------
if x > 0:
if x < self.width - 1:
x_range = range(x - 1, x + 1 + 1) # x-1, x, x+1
else:
x_range = range(x - 1, x + 1) # x-1, x
else:
# x == 0
x_range = range(x, x + 1 + 1) # x, x+1
if y > 0:
if y < self.width - 1:
y_range = range(y - 1, y + 1 + 1) # y-1, y, y+1
else:
y_range = range(y - 1, y + 1) # y-1, y
else:
# y == 0
y_range = range(y, y + 1 + 1) # y, y+1
for x_index in x_range:
for y_index in y_range:
if x_range == x and y_index == y:
# don't compare with itself
continue
if tiles_copy[x_index][y_index] == 1:
neighbors += 1
return neighbors
# ============================================
neighbors = 0
for l in range(loops):
for x in range(self.width):
for y in range(self.height):
neighbors += count_neighbors(x, y)
Это немного сложно. Вы должны проверить и отладить это самостоятельно.