...

понедельник, 8 сентября 2014 г.

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

image

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


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


image


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



Игра




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

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


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


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


• жизненный приоритет (питание, безопасность, обособленность = одиночество, размножение) — сратегия поведения особи — определяет следующий ход;

• сила — влияет на шанс одного существа одержать победу над другим (актуально только для клеток-хищников);

• зрение — определяет максимальное расстояние, на которое существо может видеть (поле зрения);

• скорость — определяет максимальное расстояние, которое существо может преодолеть за один ход;

• жизнь — количество ходов;

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

• «людоедство» (актуально только для клеток-хищников) — способность питаться особями обоих видов (что бы съесть существо того же вида клетка -людоед должна сначала одержать над ним победу).


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


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



Обозначения




Зелёный треугольник (нижний в клетке) — жертва;

Красный треугольник (верхний в клетке) — охотник;

Синий треугольник (правый в клетке) — наследник охотника в нынешнем ходу;

Черный треугольник (левый/нижний в клетке) — черный лебедь охотник/жертва.

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


Управление




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

Если в это же время покрутить колёсико мышки, то можно увеличить/уменьшить дисперсию распространения.

Чтобы разместить племя клеток-жертв, зажимаем левую кнопку мыши на поле и ведем в любую сторону — появляется зеленый ореол.

image


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


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


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


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


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


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

Отправить комментарий