Сегодня я расскажу об одном из своих web-проектов, связанном с киберспортивными играми. Рано или поздно многим геймерам начинает хотеться чего-то большего, чем несколько побед у случайных пользователей или друзей. Возникает желание добиться более существенной награды, чем очки в общемировом рейтинге. И для этого они участвуют в локальных турнирах.
Все началось с того, что я сам решил провести такой турнир по League of Legends. Призовой фонд собрал сам. Через знакомых удалось привлечь 6 команд-участниц (30 игроков). Но дело это оказалось сложнее, чем я мог подумать. Вот основные проблемы, с которыми я столкнулся при проведении первого турнира:
1) Сложность ведения учета игроков (запись на турнир, оценки силы участников, ведения статистики результатов)
2) Трудности в общении с людьми. Каждый человек представляет из себя индивидуальность (иногда редкостную), из-за чего возникают естественные проблемы с объяснением правил участия, судейства и т.п.
3) И самая большая проблема, которая отнимает большую часть времени организатора - стыковка участников по времени.
Даже на профессиональной киберсцене игроки испытывают огромный дискомфорт в связи с вынужденными перелетами и неподходящим временем матчей. В любительских турнирах, где ставки не так высоки, это может стать причиной несостоявшихся игр и спорных результатов. Выясняется, что десять человек, проводящих за компьютером до трети суток, не могут выбрать полтора часа, когда они будут в игре одновременно. И если девять игроков пришли к консенсусу, у десятого обязательно случится работа, дача, похороны любимого хомячка или травма руки (реальный прецедент). Сроки проведения турнира затягиваются, при чем каждая команда пытается доказать организатору, что это происходит по независящим от неё причинам. Таким образом, в общение между капитанами команд вовлекается организатор, что зачастую приводит к тяжелым и неоднозначным решениям о техническом поражении и дисквалификации команд.
Тем не менее, турнир состоялся, итоги были подведены, деньги вручены. Сама идея проведения турниров всем, включая меня, очень понравилась, было по настоящему забавно. Однако, обозначенные проблемы, особенно последнюю, нужно было как-то решать. Решать максимально демократично, чтобы не отпугнуть неопытных игроков, и достаточно универсально, чтобы командам не приходилось ждать своих оппонентов, застрявших на предыдущем раунде и затягивающих сроки его проведения.
Я стал искать возможные решения. Одним из хороших вариантов был challonge.com, который предоставляет отличный сервис построения турнирных таблиц. Но он не давал возможности работать с командой: регулировать состав, собирать статистику и т.д. На starlader и esl я не нашел функционала для организации пользовательских турниров вообще. Всё остальное лишь отдаленно напоминало то, что было нужно. Цель к тому моменту уже нарисовалась достаточно конкретная: нужен был ресурс, который позволит любому желающему без проблем организовать свой собственный турнир, по-максимуму устраняя описанные проблемы. Очень быстро я понял, что скорее всего придётся делать его самому.
(первые наброски сайта)
Во-первых, нужна была иллюстрированная схема турнира по раундам. В случае с игрой на вылет в первые раунды я ставил близкие по силе команды. Турнирная сетка должна была строиться автоматически, что и обусловило необходимость размещения ее на отдельном сайте.
Чтобы облегчить назначение встреч, я придумал систему обмена временем типа пинг-понг. Капитан самостоятельно выясняет время, когда вся команда будет в сборе, после чего при помощью интерактивного календаря предлагает это время команде-оппоненту. С той стороны капитан может это время либо принять, либо отклонить, выдвинув встречное предложение. Эта пересылка временем продолжается до тех пор, пока оно не устроит обе команды. Если же согласие достигнуто не было, техническая победа в несостоявшемся матче присуждалась первой команде, назначившей рандеву.
Собственно это и послужило стартом проекта. В качестве основы был взят web-движок на C++ собственного производства. Разработка заняла несколько месяцев, подключились друзья, и вот следующий турнир мы уже проводили на собственном сайте, но об этом в следующей статье.