[Из песочницы] Игра «жизнь», Хаос, «чёрный лебедь», этногенез и как все это связанно
Я довольно давно на Хабре. Просматривая старые рейтинги заметил, что люди неравнодушны к игре «жизнь». В связи с этим решил поделиться своей версией этой игры.
В принципе, мой вариант основывается только на классических правилах — мне было интересно создать динамическую систему. Из-за этого в игре пресутствуют хищники и жертвы, мутации, животные-людоеды, динамические уравнения и ещё много всякой всячины.
Кому интересно прошу под кат…
ИграИгра имитирует отношения хищники-жертвы.Жизненный цикл жертв основанн на правилах игры «жизнь»: для размножения нужно определенное количество соседей, но если число соседей больше, чем определенно, то клетка-жертва умирает. Смерть окончательна.
Жизненный цикл клетки-хищника основанн только на возможности воспроизводиться. Хищникам можно и нужно есть для того, чтобы размножаться.
Все существа имеют начальные параметры, которые могут мутировать (увеличиваться, уменьшаться) в процессе размножения. На данный момент есть только:
• жизненный приоритет (питание, безопасность, обособленность = одиночество, размножение) — сратегия поведения особи — определяет следующий ход; • сила — влияет на шанс одного существа одержать победу над другим (актуально только для клеток-хищников); • зрение — определяет максимальное расстояние, на которое существо может видеть (поле зрения); • скорость — определяет максимальное расстояние, которое существо может преодолеть за один ход; • жизнь — количество ходов; • является ли клетка «Черным лебедем»(Black Swan) — «Черный лебедь» существо, передвижение которого определяется динамической формулой («Chaos Theory»). Все существа того же вида, «видящие» «черного лебедя» стремятся к нему (жизненные приоритеты при этом роли не играют) — это дает дополнительный уровень рандомизации; • «людоедство» (актуально только для клеток-хищников) — способность питаться особями обоих видов (что бы съесть существо того же вида клетка -людоед должна сначала одержать над ним победу).
Для каждого существа значения параметров определяются randomly при рождении.
Все племена хищников находятся в состоянии войны или мира, что определяется рандомально. Если две особи из враждующих племён встречаются на одной клетке, то они вступают в бой, результат которого зависит от значения силы. Таким образом, с помощью окна статистики можно смотреть за их развитием или затуханием.
[embedded content]
Обозначения Зелёный треугольник (нижний в клетке) — жертва; Красный треугольник (верхний в клетке) — охотник; Синий треугольник (правый в клетке) — наследник охотника в нынешнем ходу; Черный треугольник (левый/нижний в клетке) — черный лебедь охотник/жертва.Буду рад, если читатели поделятся своими идеями, как можно расширить существующий функционал? Что ещё было бы интересно просимулировать?
Управление Чтобы разместить племя хищников: зажимаем правую кнопку мыши на поле и ведем в любую сторону — появляется красный ореол, определяющий гаусиан (Gauss distribution) распростаранения племени.Если в это же время покрутить колёсико мышки, то можно увеличить/уменьшить дисперсию распространения.Чтобы разместить племя клеток-жертв, зажимаем левую кнопку мыши на поле и ведем в любую сторону — появляется зеленый ореол.
Дополнительную информацию можно найти под кнопкой «Помощь».
Статистику можно узнать нажа в на кнопку «Run Time Info»
Код писался когда только-только вышел с++0х и было интересно разобраться с лямбда выражениями, а так же посмотреть, насколько их использование реально улучшает performance.
Источники и исполняемый файл можно скачать отсюда: Game Of Life Repo