Джон Х. Конвей 1968 году создал игру "Life". Игра "Life" является простым клеточным автоматом, где каждая ячейка может быть одной из двух состояний: живой или мертвой.
Джон Х. Конвей (1934-2020) был американским математиком и информатиком, который работал в области теории информации и вычислительной математики. Он был одним из основателей теории компьютерных сетей и сделал
значительный вклад в область клеточных автоматов.
Игра "Life" Конвея стала популярной и была включена в книгу "Теория игр: математические и экономические аспекты" Саймона Коуна. Игра оказалась такой интересной, что Конвей написал статью об этом, которая
была опубликована в журнале "Scientific American" в 1970 году. С тех пор игра "Life" получила широкое распространение и стала популярным примером клеточного автомата. Игра также была включена в различные компьютерные игры и симуляции, включая популярный игровой движок "Conway's Game of Life".
from tkinter import *
side = 50
size = 15
playground = [False]*side*side
colors = ('#99a','#0f0', '#faa') # RGB
def conway():
pass
def paint(event):
n = event.x // size + (event.y // size) * side
playground[n] = not playground[n]
draw()
def draw():
Cnv.delete('conway')
for y in range(side):
for x in range(side):
Cnv.create_rectangle(x*size,y*size,(x+1)*size,(y+1)*size,
fill=colors[playground[y*side+x]],
outline=colors[2], tag='conway')
Button(text='START', command=conway).pack()
Cnv = Canvas(width=side*size, height=side*size)
Cnv.pack(expand=YES, fill=BOTH)
Cnv.bind('<Button-1>', paint)
draw()
mainloop()
Лист. 1.
from tkinter import *
side = 50
size = 15
playground = [False]*side*side
colors = ('#99a','#0f0', '#faa') # RGB
start = False
def play():
global start
start = not start
conway()
def conway():
global playground, start
if not start: return
pg = [False] * side * side
for n in range(side*side):
roomie = 0
for i in (n-side-1, n-side, n-side+1, n-1, n+1,
n+side-1, n+side, n+side+1):
roomie += playground[i%(side*side)]
if roomie == 3:
pg[n] = True
elif roomie == 2:
pg[n] = playground[n]
playground = pg
draw()
Cnv.after(150, conway)
def paint(event):
n = event.x // size + (event.y // size) * side
playground[n] = not playground[n]
draw()
def draw():
Cnv.delete('conway')
for y in range(side):
for x in range(side):
Cnv.create_rectangle(x*size,y*size,(x+1)*size,(y+1)*size,
fill=colors[playground[y*side+x]],
outline=colors[2], tag='conway')
Button(text='START', command=play).pack()
Cnv = Canvas(width=side*size, height=side*size)
Cnv.pack(expand=YES, fill=BOTH)
Cnv.bind('<Button-1>', paint)
draw()
mainloop()
Лист.