И снова игра жизнь

Эта вещь из разряда классических математических задач. При этом какая то конкретная задача не ставится, это предмет исследования, чистой воды абстракция.

Реализация под WIN (скачать), реализация на JS.

В приложении к программированию, она довольно проста на первый взгляд. Каждое последующее состояние рассчитывается легко, а визуализировать результат не представляет труда.

Но если углубится в предмет, возникают интересные попутные задачи.

Пространство

Простейшая реализация предполагает, что вы выделяете двумерный массив, который описывает состояние игры — каждая точка определяется состоянием элемента с координатами X и Y — это наше пространство.

Теперь возьмем простейшую движущуюся фигуру — глайдер. Она содержит всего пять точек и смещается с периодом в 4 итерации.

Этот движущийся фрагмент (глайдер) рано или поздно достигнет границ «пространства» и придется как то интерпретировать столкновение с границей.

В реализации 1999 года я пытался решить эту проблему выделением несвязанных друг с другом прямоугольных областей. Т.е. глайдер существовал в своём ограниченном прямоугольном массиве. Такой подход сокращал объем вычислений (расчет проводится только в изолированных секторах, содержащих точки), и не требовалось создавать большого массива для модели всего пространства.

В новой реализации я отказался от массивов, описывающих какие либо участки пространства, оставив в модели только массив точек (координаты живых клеток).

Эти изменения модели напомнили мне о философском вопросе — существует ли пространство независимо от материи? :).

За гранью

Если вы преодолели ограничения, связанные с границами модели, сделали пространство бесконечным так или иначе, то остаётся проблема визуализации.

Обращаясь снова к примеру с глайдером, который достигает границы видимой области, мы получаем новую задачу — как показать пользователю где находится глайдер?

Самая простая, на мой взгляд, идея — переносить центр видимой области в центр т.н. масс. Но что если потом взять ещё один глайдер, «летящий» в противоположную сторону? Центр масс окажется в пустом секторе.

В старой реализации я производил центровку на наиболее крупный кластер. Иногда это работало не плохо. Но случались ситуации когда разные кластеры попеременно оказывались в центре.

В этот раз я решил не использовать подобные приёмы, а просто показать пользователю, где (в каком направлении) находятся клетки за границей видимой области.

На изображении пример еще одной известной структуры — «Ткацкий станок». При данном масштабе он не помещается целиком в область просмотра, но зеленые маркеры по краям обозначают направление остальных точек фигуры.

Мало букафф? Читайте есчо !

Ленин был, Ленин есть, Ленин будет есть...

Январь 17, 2012 г.

Люди, знающие кто такой В.И. Ленин, и почему он живее всех живых, становятся все старше, а молодежь часто уже и не знает ничего о вожде пролетариата. Тем не менее фанатики успели оставить монументальные памятники и даже грандиозные послания, видимые со ...

Читать

Как произвести в PHP HTTP авторизацию в запросе через curl

Сентябрь 17, 2020 г.

Пример кода, выполняющий HTTP авторизацию при запросе через curl. Этот тип авторизации также известен как BASIC. Для формирования правильных заголовков запроса вам потребуется правильно установить две опции curl: CURLOPT_HTTPAUTH и CURLOPT_USERPWD. ...

Читать

RDR2 показывает черный экран после запуска

Июль 7, 2024 г.

Проблема на пиратке PC версии. Вы запускаете игру - проходят начальные титры, и далее вы видите просто черный экран. По всей видимости, пиратам пришлось убрать оригинальный тест, где проходит определение доступных графических API в системе пользователя, ...

Читать

Импортируем изображения через wysiwyg

Декабрь 27, 2014 г.

Речь пойдет о небольшой задачке, которая постоянно всплывает при переносе данных со старых сайтов на новые. Т.е. новый сайт уже готов, но есть старый, на котором какое то количество статей, требующих аккуратного переноса, при чем они содержат картинки. ...

Читать
 

Комментарии к «И снова игра жизнь»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: