Как зарождались протоколы игр и рейтинг клуба Синдикат
Меня тут попросили рассказать немного что-нибудь интересное к очередной годовщине клуба. И я решил взять тему, которая не требует каких-то специфических знаний программирования и чего-то сложного, но будет достаточно близка моим интересам и тематике блога. Я расскажу немного про движок нашего маф-сайта, его ключевую часть — базу протоколов и рейтинг.
Рейтинг игроков в профессиональном клубе мафии
Когда меня в клубе спрашивают, кем я работаю — я обычно представляюсь программистом, мол, сайты делаю. Это в общем-то и так и не совсем так, мой диплом был на тему специализированной 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
А ещё
У нас есть школа игры в мафию, на которой мы на практике учим как хорошо играть в мафию.
Поделиться ссылкой на статью
Выберите подходящий вариант:
Интересно? Приходите в наш клуб!
Мы играем пять дней в неделю в клубе в центре Москвы
Перед тем, как идти в клуб в первый раз рекомендуем прочитать: игра в мафию — правила игры.