Search
Write a publication
Pull to refresh

Цифровое «Королевство» на PHP

Синопсис


Доброго всем дня! Хотел представить вам свою работу над веб-сервисом, демонстрирующем жизнь случайного «Королевства». Идея проекта такова: в базе создается набор персонажей со случайными характеристиками. Персонажи каждый час принимают те или иные решения, которые влияют на общее положение дел. Помимо этого, в королевстве происходят случайные события, которые в разной степени влияют на его обитателей.

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

Реализация


О терминологии


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

Бекенд


Используемый фреймворк: laravel 6.

Для реализации идеи создаются таблицы персонажей:



мира:



и вспомогательные таблицы со списками имен, текстом событий и т.д.

Основная концепция состоит в том, чтобы вынести функционал системы в отдельные классы, например, в /app/Library, поскольку его методы, такие как создание/убийство/рождение персонажа не относятся к логике контроллера.

Реализую методы по созданию мира и наполнения его персонажами. Далее, параметры и функции, ответственные за рождение и сметь персонажей настраиваю таким образом, чтобы первое поколение давало прирост в 200-300%.

Реализую логику «жизни» на примере четырех локаций. Работа, дом, вечеринка, лес. Работа увеличивает усталость (powerless), но приносит деньги (cash). Вечеринка придает жизненных сил (life), но отнимает деньги. В локации «Дом», при нахождении там двух персонажей с оптимальными показателями упомянутых характеристик, может произойти рождение нового персонажа, который наследует фамилию родителей (или создает новую династию).

Добавляю смерть от старости (old, тикает каждый час), усталости, нищеты.

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

Самое интересное начинается при внедрении дополнительных функций, например:

  • С определенным шансом начинается (и с определенным заканчивается) событие катаклизма / мора / войны / праздника / роста и т.д. Катаклизм массово уничтожает персонажей единовременно, в то время как события вроде войны и праздника могут растянуться на несколько часов, увеличивая вероятность убийств или рождений.
  • Событие убийства может завершиться как смертью жертвы, так и ее ранением (минус к параметру life).
  • Оптимизация количества персонажей на экране. Поскольку после смерти персонажи попадают в новую локацию «кладбище», во избежание переполнения происходят события, направленные на очистку этой локации.


Фронтенд


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







Итог


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

Очень рад представить систему вашему вниманию и надеюсь, она кого-то заинтересует и станет поводом для конструктивного диалога.

Исходный код (обновляется)
Сам сервис
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.