«Гра життя» — клітинний автомат, вигаданий англійським математиком Джоном Конвейем
Місце дії цієї гри — «всесвіт» — це площина, поділена на клітинки. Кожна клітинка на цій поверхні може знаходитись в двох станах: бути живою або бути мертвою. Клітинка має вісім сусідів. Розподіл живих клітинок на початку гри називається першим поколінням. Кожне наступне покоління утворюється на основі попереднього за наведеними нижче правилами:
якщо у живої клітини два чи три сусіди – то вона лишається жити;
якщо у живої клітини один чи немає сусідів – то вона помирає від «самотності»;
якщо у живої клітини чотири та більше сусідів – вона помирає від «перенаселення»;
якщо у мертвої клітини рівно три сусіди – то вона оживає.
Функція друкування поля
def druk(pole):
print("new")
for x in range(10):
for y in range(10):
if y==0:
print()
else:
if pole[x][y]==1:
print('@',end='')
else:
print('-',end='')
Функція визначення коефіціента для однієї клітинки
def koef(pole,a,b):
if a==0 and b==0:
susidy=[[a,b+1],[a+1,b],[a+1,b+1]]
elif a==9 and b==9:
susidy=[[a-1,b-1],[a-1,b],[a,b-1]]
elif a==0 and b==9:
susidy=[[a,b-1],[a+1,b-1],[a+1,b]]
elif a==9 and b==0:
susidy=[[a-1,b],[a-1,b+1],[a,b+1]]
elif a==0:
susidy=[[a,b-1],[a,b+1],[a+1,b-1],[a+1,b],[a+1,b+1]]
elif b==0:
susidy=[[a-1,b],[a-1,b+1],[a,b+1],[a+1,b],[a+1,b+1]]
elif a==9:
susidy=[[a-1,b-1],[a-1,b],[a-1,b+1],[a,b-1],[a,b+1]]
elif b==9:
susidy=[[a-1,b-1],[a-1,b],[a,b-1],[a+1,b-1],[a+1,b]]
else:
susidy=[[a-1,b-1],[a-1,b],[a-1,b+1],[a,b-1],[a,b+1],[a+1,b-1],[a+1,b],[a+1,b+1]]
k=0
for element in susidy:
if pole[element[0]][element[1]]==1:
k+=1
return(k)
Функція оновлення поля гри, відповідно до коефіціента кожної клітинки
def game(pole,ocinka):
for x in range(10):
for y in range(10):
if ocinka[x][y]==3 and pole[x][y]==0:
pole[x][y]=1
elif (ocinka[x][y]==2 or ocinka[x][y]==3) and pole[x][y]==1:
pole[x][y]=1
elif (ocinka[x][y]<2 or ocinka[x][y]>3) and pole[x][y]==1 :
pole[x][y]=0
Функція визначення перспективи розвитку поля (кількість "живих" клітинок)
def perspective(pole):
k=0
for x in range(10):
for y in range(10):
k+=pole[x][y]
return(k)
Створення поля
import random
pole = [[0]*10 for i in range(10)]
for k in range(35):
x=random.randint(0,9)
y=random.randint(0,9)
pole[x][y]=1
druk(pole)
Гра "Життя" (триває поки є "живі" клітинки або до 50 покоління)
life=[]
life.append(perspective(pole))
generation=0
while perspective(pole)>0 and generation<50:
ocinka = [[0]*10 for i in range(10)]
for x in range(10):
for y in range(10):
ocinka[x][y]=koef(pole,x,y)
game(pole,ocinka)
druk(pole)
generation+=1
life.append(perspective(pole))
print(life)