Джон Х. Конвей 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()

Лист.