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