russian
Кросс-платформенная программа для ведения турниров. При создании нового турнира загружается список игроков с их рейтингом и программа автоматически создаёт группы. В ходе ведения турнира администратор заносит результаты игр. После окончания этапа создаются новые сетки и т.д., до розыгрыша всех мест. По результатам матчей пересчитывается рейтинг игроков по системе, близкой к Эло (https://ru.wikipedia.org/wiki/Рейтинг_Эло).
Доступны системы розыгрыша:
- олимпийская система (playoff)
- олимпийская система с квалификацией
- олимпийская система с квалификацией в виде "кругового" (round-robin) этапа
В данный момент поддерживается только сквош. Для использования программы в других видах спорта потребуются доработки.
Написана на c++ с использованием framework'а qt4/qt5. Собирается под win/mac/linux.
Программа появилась при поддержке инициативной группы Санкт-Петербургской сквош-лиги - Татьяны Никитиной и Александра Постникова. Идея создания возникла после того, как автор увидел муки организаторов, испытываемые каждый раз при подсчёте рейтинга.
После того, как были достигнуты первые шаги в автоматизации ведения турнира, к проекту подключился @slavikus и разработал сайт http://squashspb.ru, который импортирует результаты турнира и отображает в виде красивых табличек. Сайт хранит базу игр и турниров, а также базу игроков. Доступна онлайн-регистрация на турниры.
Скачайте последнюю версию для вашей операционной системы отсюда: https://github.com/yapavelkurochkin/tournament/releases
Для создания турнира потребуется список игроков с рейтингом каждого. Если игрок только начинает играть, рейтинг считается равным нулю. Список выглядит таким образом:
Иванов Иван, 40.4
Петров Пётр, 30.4
Сидоров Коля, 35.7
...
Программе список "скармливается" в виде простого текстового файла.
Итак, открываем программу, создаём новый турнир (Tournament->New), кликаем по пустой таблице и загружаем список игроков.
Теперь нужно выбрать систему розыгрыша. Обычно организаторы опираются на количество матчей, сыгранных каждым игроком и всеми игроками вместе. Программа рассчитывает общее количество игр и выводит его под таблицей. Описание систем розыгрышей см. ниже.
Когда с системой определились, нажимаем OK и поехали! В созданных таблицах заполняем результаты игр и радуемся жизни.
В любой момент можно посмотреть на очки, заработанные каждым игроком. Для этого нужно выбрать Tournament->Ratings.
Самая простая система. В википедии: https://ru.wikipedia.org/wiki/Олимпийская_система
В программе реализован плейофф с розыгрышем всех мест. То есть програвший игрок не выбывает, а продолжает играть с проигравшим в соседней паре.
При посеве игроков сначала происходит сортировка по рейтингу (от большего к меньшему), а потом самый сильный играет с самым слабым, второй - с предпоследним и так далее. На втором этапе игроки (отдельно победители и програвшие) встречаются по такому же принципу.
Размер группы должен быть кратен 2, поэтому при нехватке игроков (а это частая ситуация) сетка заполняется игроками под кодовым названием BYE. Матч с таким игроком всегда заканчивается победой, но рейтинг при этом остаётся неизменным.
Пример: игроков 13 человек. Создаём турнир playoff с размером 16. Поскольку игроков не хватает, появляются BYE. В итоге трое сильнейших автоматически проходят на следующий этап (они попадают на BYE). Остальные - разыгрывают первый этап.
Эта система практически идентична playoff, за исключением того, что имеет предварительный этап квалификации, где игроки борются за право войти в группу playoff. Обычно в этой системе игроков больше, чем размер playoff, поэтому те, у кого минимальный рейтинг, разыгрывают возможность участвовать в дальнешей битве. Подобного результата можно добиться, использовав playoff, но в playoff с квалификацией очки за квалификационные игры (и утешительные для тех, кто не попал в основную сетку) не добавляются.
Пример: игроков 18. Выбираем playoff c квалификацией с размером 16. В итоге 4 игроков с минимальным рейтингом разыгрывают этап, по результатам которого двое победителей попадают в сетку playoff, а двое проигравших играют утешительную игру.
В этом этапе перед playoff игроки разбиваются на 2/4/8 групп и в каждой группе играют "каждый с каждым" (round-robin). В playoff выходят два сильнейших игрока из каждой группы.
Определение мест в круговой группе происходит по сумме набранных матчей, геймов и очков.
Первый игрок из группы всегда попадает в playoff на второго игрока из другой группы. Группы встречаются по принципу ABCD, ACBD или ADBC - это выбирается в меню Breaking.
Одна работающая программа позволяет вести один турнир. Если ведутся несколько турниров параллельно (например, разные категории), то нужно запустить несколько программ.
После введения результатов программа автоматически сохраняет результаты в домашнем каталоге пользователя. При следующем запуске загружаются последние сохранённые результаты.
В любой момент можно сохранить турнир в trn-файл или загрузить его из файла.
Чтобы отменить введённые результаты (скажем, ошиблись при вводе), можно воспользоваться Edit->Undo. Аналогично, чтобы вернуть введённые результаты - Edit->Redo.
Пока что результаты экспортируются только в CSV-файл с разделителем '|'. На подходе (в следующих релизах) экспорт в json и автоматическое выкладывание результатов на http://squashspb.ru.
По результатам каждой игры рассчитываются очки, которые добавляются к текущему рейтингу игрока. Принципы ведения рейтинга описаны на сайте squash-game.
Этот рейтинг похож на систему Эло, см. https://ru.wikipedia.org/wiki/Рейтинг_Эло.
- На круговом этапе игрока можно добавить или удалить. Часто турнир уже забит, все знают сетку, а игроки перед самым турниром сообщают, что не могут прийти.
Код написан на C++ с использованием библиотеки Qt (4.8, 5.4) и собирается под linux/macosx/win
Подробно сборка описана в файле BUILD.md