Game of Life

Клеточные автоматы меня увлекали, кажется, всегда. С юности, когда я впервые увидел Игру Жизнь (Game of Life). Я всё время возвращаюсь к теме клеточных автоматов. Даже иконка для сайта – один из самых известных паттернов Игры, который называется глайдер или планер.

Сама Игра Жизнь не подразумевает сложностей в имплементации. Достаточно иметь некое игровое поле (подойдёт двумерный массив) и набор правил для расчёта следующего состояния этого поля. Игра дискретная, т.е. пошаговая.

Самые базовые правила для двумерного клеточного автомата в Game of Life – исходная версия от Джона Конвея, а именно:

Наивная имплементация будет работать методом перебора всего поля. Это достаточно ёмкая вычислительная задача и существует ряд оптимизаций. Если не ошибаюсь, даже в Красной Книге OpenGL есть ряд упоминаний об оптимизации проверок на границах поля. Есть множество оптимизаций для Game of Life, про них есть целые работы.

Мне же всегда интересно посмотреть на то, как ведут себя разные среды и языки с подобной нагрузкой. Что будет с JIT-компиляторами? А C позволит что-то сделать быстрее? И множество других. Естественно, это не научный интерес, а лишь хобби и сравнивать ЯП только таким путём не стоит.

С 2010-х годов я имплементировал клеточные автоматы в том или ином виде. Просматривая архивы, нашёл веб-версию от 2017 года. На ней я учился работать с профилированием JavaScript и Canvas в браузерах Firefox и Chrome.

Были и версии под C++, Java и даже чистый C, ведь ничего особенного там не требуется. Но, пока решил выложить именно JavaScript версию. Она наиболее простая в исполнении и пользовании. Это веб-страничка со скриптом и стилями.

Версия не отличается особой оптимизацией, но и сильно обновлять её не нужно. Посмотреть на то, как будет развиваться случайно сгенерированное поле можно.

Конечно, хочется ещё добавить настройки рэндом-генератора, шага расчёта, масштабирование поля и добавить выбор других, не менее интересныx, чем исходная Жизнь, правил.

Проекту “Glider” выделил репозиторий на GitHub и развернул на GitHub Pages.

Журнал изменений

1 января 2026 г.: перенёс исходники на GitHub.

Если Вы хотите обсудить содержание заметки, задать вопросы или предложить изменения, то со мной можно связаться в Telegram