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

Я энтузиаст квестов, некоторые могут сказать, наркоман, и последние несколько месяцев мне этого не хватало. Мой друг, настоящий наркоман, на счету которого более 500 комнат, начал организовывать онлайн-соревнования. Поиграв в несколько онлайн-игр, я подумал: «Я хочу создать свою собственную».

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

Я горжусь своей игрой. Я хочу рассказать вам, как я это сделал.

Технология для пользователя

У меня было несколько главных целей на игру. Они находятся где-то посередине между пользовательскими эпопеями и вариантами использования.

  • Безболезненный опыт для пользователя: я хотел все это в браузере. Эти типы игр относительно короткие, и необходимость что-то загружать будет проблемой.
  • Многопользовательский командный опыт: в реальных комнатах могут работать команды из 2–6 и более игроков, и я хотел, чтобы моя игра допускала то же самое. Кроме того, некий мировой кризис — отличный мотиватор для удаленной командной игры.
  • Безболезненная регистрация: помимо оплаты, мне вообще не нужна была регистрация. Это беспокоило меня во многих других играх. Просто дайте людям играть как можно быстрее.

Очевидно, что умные головоломки и забавный опыт имели первостепенное значение, но их сложнее измерить напрямую. Это будут цели продукта, и я чувствовал, что вышеперечисленные пункты имеют решающее значение для поддержки этих целей.

Учитывая эти требования, я задался целью написать свой собственный движок, так как не видел ничего, что могло бы приблизиться к тому, что я хочу. Я был придирчив к своей игре, не позволяя ей уйти ни с чем, на что я бы жаловался в других играх. Естественно, несколько приоритетов оторвались от этого плана.

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

Загадочный веб-стек

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

Вот некоторые основные части стека.

  • Реагировать: просто реагировать. Никаких дополнительных модулей, никаких плагинов, ничего. Ядро React предоставило то, что мне было нужно. Поскольку у меня была конечная машина, не было необходимости в чем-то вроде Redux.
  • Python и Flask: серверные компоненты и обработка игры написаны на Python с использованием Flask, с Flask-SocketIO, с Eventlet (здесь всегда так неизбежно много слоев).
  • Redis: небольшая, но необходимая часть для координации многопользовательских действий.
  • SVG: Я упоминаю это как ключевую часть движка. Все основано на SVG, хорошо работающем в браузерах. Это было серьезной проблемой, но удивительно полезной.

Есть также типичные биты веб-сервера, использование шаблонов Jinja, общение с Mongo, Paypal… Zzz. Да, я еще упомяну эти моменты, но подозреваю, что здесь нет ничего нового.

До поздней стадии проекта это была масса шевелящихся кусочков! У меня было много напряженных дней, когда я пытался жонглировать технологиями в своей голове. Моей основной целью было заставить что-то работать, и я делал это поэтапно. Теперь, когда я пишу больше игр, я буду продолжать улучшать стек, но, скорее всего, серьезных архитектурных изменений не произойдет.

Языки - это то, чем я занимаюсь

Как сказал мой хороший друг: Ни один проект «Edaqa не будет завершен, если не будет нового языка». Я слишком ослеплен красотой языков, чтобы уловить хоть намек на критику.

Самый главный вопрос технологии: хотел ли я написать игровой движок? Ответ – громкое нет! Я написал движок, потому что хотел достичь своих основных целей, не видел ничего подходящего и знал, что движок в пределах досягаемости. Я хотел создавать игры. И я хотел не быть чрезмерно обремененным при проектировании.

Таким образом, для игр существует предметно-ориентированный язык. Это декларативный язык высокого уровня. Я полностью ожидаю, что в долгосрочной перспективе я напишу для него другие движки. Моя цель состояла в том, чтобы сохранить логику игры чистой, не привязываясь к движку. Я хочу писать игры и быть уверенным, что смогу поддерживать эти игры в долгосрочной перспективе.

Я буду рад показать вам, как работает язык, что делает препроцессор и как игра обрабатывает код.

Как говорится: «Спроси меня о чем угодно»

Я наткнулся на много карманов знаний и дефектов в этом проекте. Не все, что я сделал, очевидно — и я не решаюсь сказать, что некоторые нелогичные фрагменты остались. Но я рад рассказать обо всем этом.

Дайте мне знать, что вас интересует больше всего, и я отвечу на все, что смогу, предоставив дополнительные записи, где это необходимо. А если вы любите головоломки или квесты, приглашаю вас поиграть в игру.

Рекомендую вам попробовать игру Прототип: требуется гейм-мастер. Это игра-квест, которую я написал, и мне есть о чем рассказать.