Сложно найти человека, не знакомого с игрой "Жизнь", придуманной английским математиком Джоном Конвеем еще в 1970 году, и до сих пор не теряющей своей популярности. Многие программисты писали свою реализацию этой игры, и еще одна вряд ли кого-то удивит. Однако эта игра является отличным примером, показывающим, насколько полезной может оказаться оптимизация вычислений, даже не меняющая асимтотическую сложность алгоритма. Мы начнем с простейшей реализации на c# и будем последовательно применять различные оптимизации, ускоряя работу программы.
Мы также улучшим алгоритм на Javascript, ускорив его в 10 раз по сравнению с наивной реализацией.
В конце статьи дана ссылка на код, а также на online-реализацию игры с оптимизированным алгоритмом на JavaScript, выполняющим до двухсот итераций в секунду на поле размера 1920x1080 (Full HD), где вы можете убить время поиграть в эту замечательную игру.
Читать полностью »
Рубрика «игра жизнь» - 2
Как ускорить игру «Жизнь» в сто раз
2020-06-07 в 13:56, admin, рубрики: C#, javascript, Алгоритмы, битовая магия, высокая производительность, игра жизнь, оптимизацияПишем игру «Жизнь» для NES на Rust
2020-05-29 в 7:00, admin, рубрики: cellular automata, game of life, mos 6502, Nes, Nintendo Entertainment System, Rust, ассемблер, игра жизнь, Игры и игровые приставки, клеточные автоматы, консоли, разработка игр
Этот пост — о программе на Rust…
$ cargo install conway-nes
…выводящей двоичный файл NES…
$ conway-nes > life.nes
…в котором выполняется конвеевская игра «Жизнь»!
$ fceux life.nes # fceux is a NES emulator
Запустив игру на эмуляторе, нажмите любую кнопку контроллера, чтобы начать заново с рандомизированного состояния.
Читать полностью »
Клеточные автоматы в браузере
2019-12-24 в 4:21, admin, рубрики: cellular automata, elementary cellular automaton, javascript, игра жизнь, клеточные автоматы, разработка игр, элементарный клеточный автомат
Клеточный автомат — это система, состоящая из клеток с численными значениями в сетке, а также из правил, определяющих поведение этих клеток. Многократно применяя правило к каждой клетке сетки параллельно с визуализацией сетки, часто можно получить эффект некоего эволюционирующего организма со сложным и замысловатым поведением, даже если правила относительно просты.
Клеточные автоматы имеют различные формы, виды и размерности. Наверно, самым знаменитым клеточным автоматом является конвеевская игра «Жизнь» (Conway's Game of Life, GOL). Она состоит из двухмерной сетки, в которой каждая клетка содержит двоичное значение (живая или мёртвая). Сопутствующие правила на основании состояния соседних клеток определяют, должна ли клетка быть мёртвой или живой. Правила гласят, что живая клетка умирает от одиночества, если вокруг неё меньше 2 живых клеток. Если живы больше трёх соседних клеток, она погибает от перенаселённости. Другими словами, клетка «выживает», если вокруг неё ровно 2 или 3 живых соседних клеток. Чтобы мёртвая клетка ожила, у неё должно быть ровно 3 живых соседних клеток, в противном случае она остаётся мёртвой. Пример автомата GoL, итеративно проходящий несколько состояний, показан ниже.

Ещё один знаменитый вариант клеточного автомата одномерен; он называется элементарным клеточным автоматом (Elementary Cellular Automaton, ECA). Именно его мы реализуем в этом посте.
Читать полностью »
Жизнь на частицах 3D
2019-06-01 в 17:55, admin, рубрики: CUDA, game of life, ogre3d, Алгоритмы, игра жизнь, клеточные автоматы, математика, параллельное программирование, Программирование, разработка игр, частицыПривеТ! Решил поделиться с читателями своими небольшими экспериментами с системами частиц в трехмерном пространстве. За основу взял публикацию на Хабре об экспериментах с частицами в 2D пространстве.
Жизнь на частицах
2019-02-28 в 16:08, admin, рубрики: game of life, Алгоритмы, игра жизнь, клеточные автоматы, математика, Программирование, разработка игр, частицыВсем привет! Сегодня я расскажу о своих экспериментах с системами частиц. Основной целью было нахождение простых правил, которые бы порождали интересное поведение.
Классический пример системы с простыми правилами и сложным поведением — клеточные автоматы, именно на них я и ориентировался, пытаясь подобрать правила. Конечно же, для клеточных автоматов правила будут в большинстве случаев проще. Но частицы могут быть красивее!
Под катом много мегабайт гифок.

Реализация «Тетриса» в игре «Жизнь»
2017-10-31 в 10:50, admin, рубрики: Conway's game of Life, Алгоритмы, игра жизнь, клеточные автоматы, ненормальное программирование, разработка игрТо, что начиналось как приключение, закончилось одиссеей.
Задача по созданию тетрис-процессора размером 2 940 928 x 10 295 296
Этот проект стал кульминацией труда множества пользователей в течение последних полутора лет. Хотя состав команды со временем менялся, в написании этой статьи принимали участие следующие авторы:
- PhiNotPi
- El'endia Starman
- K Zhang
- Muddyfish
- Kritixi Lithos
- Mego
- Quartata
Также мы хотим поблагодарить 7H3_H4CK3R, Conor O'Brien и многих других пользователей, вложивших свои труд в решение этой задачи.
Из-за беспрецедентного масштаба этой задачи, статья разделена на несколько частей, написанных членами команды. Каждый участник писал о своей отдельной подтеме, приблизительно соответствующей тем областям проекта, в которых был задействован.
Стоит также заглянуть в GitHub нашей организации, в котором мы выложили весь код, написанный для решения задачи. Вопросы можно задавать в нашем чате разработки.
Читать полностью »
Разработка симулятора эволюции одноклеточных организмов «The strongest survives»
2017-05-02 в 13:31, admin, рубрики: Bridge.NET, C#, Занимательные задачки, игра жизнь, Программирование, симулятор бога, симуляторы жизни, симуляторы жизни и тыкалки, метки: Bridge.NET, симулятор бога, симуляторы жизни, симуляторы жизни и тыкалки
В данном посте я расскажу о своем опыте написания игры-симулятора эволюции одноклеточных организмов на прямоугольной плоскости. Кроме разработки алгоритмов симулятора, речь пойдет о проблемах с которыми я столкнулся при разработке данного проекта на C#, а также о его портировании для работы в браузере. В конце статьи будет ссылка на готовую к игре версию и на все исходники. Если я вас заинтересовал — прошу под кат.
Читать полностью »
Предложение по модификации правил игры Жизнь
2016-11-26 в 19:27, admin, рубрики: Conway's game of Life, Алгоритмы, верховный алгоритм, игра жизнь, игра жизнь конвея, игры для программистов, эволюцияДоброго времени чтения, уважаемые участники habrahabr.ru
Игра Жизнь предложена Джоном Конвеем в 1970 году, и неоднократно обсуждалась на habrahabr.ru. Основные использованные теги приведены в метках к данной статье.
Предлагается ряд изменений, которые могут привести к новому направлению в развитии.
Игра «Жизнь» в FPGA
2016-04-28 в 19:40, admin, рубрики: fpga, hdmi, игра жизнь, Марсоход3, ненормальное программирование, Параллелизм, параллельное программирование, ПЛИС, метки: Игра жизнь, параллелизмИгру жизнь — клеточный автомат уже кажется писали на всех возможных языках программирования.
Меня же интересует технология ПЛИС — и поэтому когда-то я сделал реализацию life для ПЛИС Альтера Cyclone III. Правда поместилось в чип тогда очень мало: всего 32x16 клеток. На таком маленьком поле довольно трудно испытать сложные фигуры.
Сейчас у меня в руках другая плата: тут уже стоит Altera MAX10 с 50-ю тысячами логических элементов. Было интересно, смогу ли я расширить поле хотя бы в 4 раза? В общем задумал сделать хотя бы 64x32.
Результат представлен на этом видео, я называю эту картину: «ружье Госпера убивает самоё себя».
Ниже подробности реализации.Читать полностью »
Джон Хортон Конвей: Жизнь, как игра — окончание
2015-12-28 в 0:11, admin, рубрики: Занимательные задачки, игра жизнь, конвей, математикаПрибыв домой, Гарднер тотчас же продемонстрировал Конвею более 20 статей, посвящённых расчёту дня недели для любой даты. Правило Льюиса Кэрролла выглядело лучше остальных. Гарднер повернулся к Конвею и сказал: «Джон, тебе необходимо разработать более простое правило, которым я смогу поделиться с читателями». И, как рассказывает Конвей, длинными зимними ночами, когда мистер и миссис Гарднер у себя дома отправлялись спать (хотя в гости к ним он приезжал исключительно летом), Конвей размышлял над тем, как сделать такой расчёт достаточно простым, чтобы его можно было объяснить среднему человеку с улицы.
Он думал над этим всю дорогу домой, и в общей комнате университета, и наконец додумался до «правила Судного дня». Для работы алгоритму требовались лишь сложение, вычитание и запоминание. Также Конвей придумал мнемоническое правило, помогавшее хранить промежуточные вычисления на пальцах руки. А для наилучшего запоминания информации о дате, Конвей прикусывает свой большой палец.
Следы от зубов должны быть видны! Только так можно это запомнить. Когда я рассказываю студентам об этом методе, я всегда прошу кого-нибудь из первого ряда подтвердить наличие отметок от зубов на пальце. Серьёзных людей так делать не заставишь – они решат, что это детский сад. Но смысл в том, что всё это дело обычно не задерживается у вас в мозгу, и вы забываете дату дня рождения, названную вам человеком. Но большой палец способен запомнить за вас, как далеко эта дата отстоит от ближайшего «Судного дня».
С годами Конвей научил этому алгоритму тысячи людей. Иногда в конференц-зале набирается человек по 600, вычисляющих дни рождения друг друга и прикусывающих свои большие пальцы. А Конвей, как всегда, пытается быть неразумным – он уже неудовлетворён своим простым алгоритмом. С самого момента разработки он пытается его улучшить.
Читать полностью »