Игра «жизнь», Хаос, «чёрный лебедь», этногенез и как все это связанно

в 10:47, , рубрики: c++, qt, Алгоритмы, Игра "жизнь", игры, хаос, этногенез

image

Я довольно давно на Хабре. Просматривая старые рейтинги заметил, что люди неравнодушны к игре «жизнь». В связи с этим решил поделиться своей версией этой игры.

В принципе, мой вариант основывается только на классических правилах — мне было интересно создать динамическую систему. Из-за этого в игре пресутствуют хищники и жертвы, мутации, животные-людоеды, динамические уравнения и ещё много всякой всячины.

image

Кому интересно прошу под кат…

Игра

Игра имитирует отношения хищники-жертвы.

Жизненный цикл жертв основанн на правилах игры «жизнь»: для размножения нужно определенное количество соседей, но если число соседей больше, чем определенно, то клетка-жертва умирает. Смерть окончательна.

Жизненный цикл клетки-хищника основанн только на возможности воспроизводиться. Хищникам можно и нужно есть для того, чтобы размножаться.

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

• жизненный приоритет (питание, безопасность, обособленность = одиночество, размножение) — сратегия поведения особи — определяет следующий ход;
• сила — влияет на шанс одного существа одержать победу над другим (актуально только для клеток-хищников);
• зрение — определяет максимальное расстояние, на которое существо может видеть (поле зрения);
• скорость — определяет максимальное расстояние, которое существо может преодолеть за один ход;
• жизнь — количество ходов;
• является ли клетка «Черным лебедем»(Black Swan) — «Черный лебедь» существо, передвижение которого определяется динамической формулой ("Chaos Theory"). Все существа того же вида, «видящие» «черного лебедя» стремятся к нему (жизненные приоритеты при этом роли не играют) — это дает дополнительный уровень рандомизации;
• «людоедство» (актуально только для клеток-хищников) — способность питаться особями обоих видов (что бы съесть существо того же вида клетка -людоед должна сначала одержать над ним победу).

Для каждого существа значения параметров определяются randomly при рождении.

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

Обозначения

Зелёный треугольник (нижний в клетке) — жертва;
Красный треугольник (верхний в клетке) — охотник;
Синий треугольник (правый в клетке) — наследник охотника в нынешнем ходу;
Черный треугольник (левый/нижний в клетке) — черный лебедь охотник/жертва.

Буду рад, если читатели поделятся своими идеями, как можно расширить существующий функционал? Что ещё было бы интересно просимулировать?

Управление

Чтобы разместить племя хищников: зажимаем правую кнопку мыши на поле и ведем в любую сторону — появляется красный ореол, определяющий гаусиан (Gauss distribution) распростаранения племени.
Если в это же время покрутить колёсико мышки, то можно увеличить/уменьшить дисперсию распространения.
Чтобы разместить племя клеток-жертв, зажимаем левую кнопку мыши на поле и ведем в любую сторону — появляется зеленый ореол.

image

Дополнительную информацию можно найти под кнопкой «Помощь».

Статистику можно узнать нажа в на кнопку «Run Time Info»

Код писался когда только-только вышел с++0х и было интересно разобраться с лямбда выражениями, а так же посмотреть, насколько их использование реально улучшает performance.

Источники и исполняемый файл можно скачать отсюда: Game Of Life Repo

Автор:

Источник

* - обязательные к заполнению поля