Как зарождались протоколы игр и рейтинг клуба Синдикат

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

Рейтинг игроков в профессиональном клубе мафии

Когда меня в клубе спрашивают, кем я работаю — я обычно представляюсь программистом, мол, сайты делаю. Это в общем-то и так и не совсем так, мой диплом был на тему специализированной CRM-системы для кадрового агентства и дальше я постоянно работал именно как backend-разработчик. На работе я занимаюсь крупными enteprise-системами и обменом данными между ними. Но это долго объяснять и проще и понятнее если я скажу «сайты делаю» или просто «я айтишник».

игра мафия - Андрей Кулагин на стриме

стримлю литкод на твиче

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

Как выглядел тогда рейтинг клуба? По сути, это был обычный файл Excel: в строках располагались никнеймы игроков и напротив каждого отображалось число набранных баллов.

Такая система есть до сих пор и у многих профессиональных клубов, когда в телеграм-канале или группе вк они раз в неделю или с иной периодичностью публикуют файл Excel, скриншот или ссылку на гуглдок. Это очень простая и удобная система, но у которой есть и свои недостатки.

Например, если вы игрок и у вас есть сомнения, в том, что данные внесены корректно — вам нужно найти прошлый файл, запомнить сколько было баллов на тот период времени, потом сравнить с новым рейтингом и посчитать сколько же у вас было побед в промежутке. И на основании просить пересчитать баллы в таблице. А если вы не очень хорошо помните свои игры? В Синдикате за неделю играли четыре раза и за день можно было успеть сыграть по 4-5 игр. Вспомните ли вы все игры? Не будете ли хотеть на бумажке вести альтернативный учёт?

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

База протоколов

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

Лично у меня запрограммировать такую задачу не вызывает сложности, по работе приходилось решать и более сложные задачи. И вообще, допустим АБС банка она по сути примерно такая же админка: есть платёжка — операционист вносит платёжку «пришло столько-то денег», «выдано столько-то денег» — а дальнейшие движения денег по банковским счетам это просто суммирование платежей всех контрагентов.

Буквально за неделю я накидал первую версию админки сайта, в которой можно было создавать и редактировать протоколы игр. Вот так это выглядело, страшненько, неказисто, но работало:

игра мафия - редактирование протокола игры в админке сайта

Что мы тут видим?

Во-первых, админка позволяла внести разное число игроков — от 9 до 16ти, по умолчанию создавалось 12 строк и можно было либо убрать лишние строки, либо добавить дополнительно больше игроков. Это несколько усложнило работу, если бы проектировался движок исключительно под «классику», то было бы фиксированное число в 10 строк.

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

И в-третьих, есть шапка протокола, в которой указываются общие вещи: дата игры, в каком месте играли, кто победил и так далее.

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

Автор статьи

Клуб Мафия Синдикат — Андрей Кулагин, программист клуба

Андрей Кулагин, программист клуба Мафия Синдикат

Статьи по теме

Электронный протокол vs бумажный

А давайте теперь посмотрим на обычный бумажный протокол и сравним:

игра мафия - пример бумажного протокола игры

Здесь есть такая же шапка, список игроков, отдельно роли игроков и список игровых действий по ночам — куда пошла путана, кого стреляла мафия, искал дон, проверял шериф, лечил доктор и стрелял маньяк.

И есть блок в котором ставятся замечания, выставленные кандидатуры и количество голосовавших.

Самыми для меня больными вопросами при проектировании системы было: а нужна ли вся эта информация в админке или нет?

Вот например, зная кто из игроков когда играл — можно посчитать и прибыль, которую он принёс клубу и такие специфические параметры как Average Revenue Per User (средний доход на пользователя, у меня стойкое ощущение что подобного рода статистика есть только в нашем клубе), а что принесёт клубу если мы будем записывать действия по игровым ходам или количество набранных игроком замечаний?

Здесь мне очень хотелось, чтобы электронный протокол содержал по-максимуму сведений из бумажного протокола. И можно было бы считать очень продвинутую статистику по играм, например, как часто тот или иной игрок закрывает путану в мафию или маньяка. И выдавать соответствующие ачивки в профиль игрока. Но поскольку я давно занимаюсь автоматизацией производства (кстати, я по диплому инженер по станкам ЧПУ и нас учили считать стоимость этой самой автоматизации), то понимал, что за этот выбор придётся заплатить. Временем внесения одного протокола. Было бы не пять минут, а десять минут. В расчёте на один протокол — копейки, но у нас успешный клуб в котором играет по 3-4 стола за вечер, а за столом играется до 9 игр за вечер:

игра мафия - календарь игровых дней в админке

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

Месяцы, сезоны, лучшие игроки за роль и всё-всё-всё

Что получалось из всей этой системы?

Единожды внесённый протокол участвовал в рейтинге за календарный месяц — клуб уже много лет проводит акцию «Лучший игрок месяца» и статистика формируется автоматически.

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

Каждый игрок видит свой собственный профиль в котором отображаются игры за текущий сезон, прошедший сезон и можно сравнить свои достижения с другими игроками.

В течение сезона каждый игрок видит, насколько он близок к получению знака «лучший игрок за роль мирного жителя» (путаны, шерифа, etc.).

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

Она была придумана в основных чертах ещё в далёком 2012 году и хотя к ней с тех пор было добавлено много дополнений сохранилась и до сих пор.

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

Ну а если у вас есть предложения, что можно улучшить — подойдите ко мне на играх в клубе, обсудим идею!

Опубликовано: 23.11.2023

А ещё

У нас есть школа игры в мафию, на которой мы на практике учим как хорошо играть в мафию.

школа мафии

Поделиться ссылкой на статью

Выберите подходящий вариант:

Интересно? Приходите в наш клуб!

Мы играем пять дней в неделю в клубе в центре Москвы

Перед тем, как идти в клуб в первый раз рекомендуем прочитать: игра в мафию — правила игры.