Page 4 of 5

Posted: Thu Jul 28, 2011 10:13
by jet800
Да, чистый ява-скрипт и CSS :) Работает и на мобильных девайсах многих. Собсно от оси не зависит - зависит от браузера :) (даже в древнем IE6 заводится, но с мелкими огрехами).

Posted: Thu Jul 28, 2011 10:59
by Dalai
Клиентская часть работает в броузере, как и следует ожидать. Если под никсами более-менее современный броузер без кучи параноидальных ограничений - конечно, будет. По идее, должно работать и с айпадов, нуков, кзумов, галаксей и т.п.

Posted: Mon Aug 01, 2011 00:03
by jet800
Печально, что за выходные никто по турнирам так и не высказался :( надеюсь до следующих кто-нить сможет изложить схему :)

Posted: Mon Aug 01, 2011 16:43
by Accolon
jet800
не жди, если ждешь. :) Сделай, как думаешь... потом поправишь. :twisted:

Posted: Mon Aug 01, 2011 18:10
by jet800
Так не пойдет. Мне не жалко помочь, но тратить силы и время в пустую на переделки мне не хочется. Я же не прошу оформленное по всем правилам ТЗ :)

Posted: Tue Aug 02, 2011 19:56
by CTPAHHuK
Нарож, сорри, я нпцду время скоро. Всй будет готовов.

Posted: Wed Aug 03, 2011 00:51
by Dalai
CTPAHHuK wrote:Нарож, сорри, я нпцду время скоро. Всй будет готовов.
Ээ-э-э-э.... :shock: Ты это, не спеши, в обчем. Лучше позже, да лучше. :roll:

Posted: Wed Aug 03, 2011 07:58
by jet800
CTPAHHuK wrote:Нарож, сорри, я нпцду время скоро. Всй будет готовов.
Напомнило мне какой-то старый то ли мульт, то ли фильм, но настолько неуловимо ;D

Posted: Wed Nov 09, 2011 02:38
by Dalai
Попытаюсь описать задачу по олимпийской системе и смежным вопросам.


1. Турнир объявляется. Кем - уполномоченными участниками от порталов, полномочия выдаются вручную путем внесения в группу. Инициатор определяет даты (начала, окончания этапов), систему (пока 1 - олимпийская), судей.

1.1. В таблице турниров создается новый идентификатор и прописываются его свойства - название, дата начала, дата окончания, прочее.

1.2. На странице турнира должна быть простая возможность (большая кнопка) присоединиться к турниру или выйти из него, пока он не стартовал (та же кнопка, функция определяется динамически в зависимости от юзера и его состояния "записанности" в турнир).

1.3. Т.к. отношение юзер-турнир - многие ко многим, нет нормальной возможности связывать их ни в таблице турниров, ни в таблице юзеров. Поэтому используется таблица турнир-юзер, куда пишутся строки при присоединении и удаляются при выходе из турнира. Там же предусмотрен третий столбец для достижения юзера в турнире - вылет в 1/16, в 1/8, ..., 3 место, 2-е, 1-е. Список столбцов впоследствии можно расширять. Например - кумулятивный результат по очкам, заработанным или потерянным в турнире.

Аналогично впоследствии можно создать таблицу многие ко многим - турниры и карты. Дальше я на нее сошлюсь.

2. Подходит дата начала турнира. Список участников замораживается и происходит составление турнирной сетки.

2.1. Делается анализ количества участников. То количество бойцов, которого не хватает до ближайшей степени двойки, заполняется ботами. Я думаю, если заранее создать 63 бота, нам хватит их на турнир любого уровня. У ботов 0 очков рейтинга, они, очевидно, всегда проигрывают, и также очевидно, что выигрыш у бота не приносит победителю очков в общем зачете и не должен выводиться в статистике игрока.
Пример: зарегистрировалось 27 участников. Ближайшая степень двойки - 32. В турнир добавляется 5 ботов.

Аналогично надо создать штук 127 игроков типа winner 1 - winner 127, и еще 127 loser 1 - loser 127. Тоже с нулем рейтинга, конечно. winner, loser и bot - специгроки.

2.2. Рисуется турнирная сетка. Вроде такой: http://images.challonge.com/wc2011.png (для облегчения понимания дальнейшего советую нарисовать себе на листе бумаги такую сетку с 6 уровнями). Рисуется в первую очередь как структура, а не как изображение. Мы помним, что основной факт у нас - это игра. Главная таблица базы имеет структуру типа следующей:

Code: Select all

Номер записи - ID игрок 1 - ID игрок 2 - (можно потом добавить игроков до 8) - ID мировоззрения игрока 1 - ID мировоззрения игрока 2 - (и так до 8) - ID статуса 1 игрока (победил, проиграл, ничья) - ID статуса 2 игрока - (и так до 8) - ID карты - ID типа победы (сдался, финалка и т.п.) - ID турнира (по умолчанию 0 - General) - № игры в турнире - коммент.
Сначала делаем для 2-х игроков, но все время держим в голове, что их может быть 3, 5, и 8. Что из них могут 2 выиграть и 6 проиграть, а могут 7 выиграть и 1 проиграть. Т.е. код должен быть легко расширяемым в эту сторону. То же самое при подсчете рейтинга. Хороший пример реализации подсчета очков для нескольких игроков - игра Carcassone. Хотя и не абсолютно идентичный нашему.

Так вот - в отличие от типичного репорта, где запись формируется после игры, задать структуру мы можем только сформировав все записи заранее. Для турнира, на который зарегистрировалось 27 участников, это будет 31 строка (надеюсь, не нужно пояснять, почему так). Для этого нужно пронумеровать все игры в турнире. Нанем с конца. Финал - номер 1. Полуфиналы - №2 и №3. И т.д. Участники финала - winner 2 и winner 3. Участники игры 2 - winner 4 и winner 5. Игры 4 - winner 8 и winner 9. Таким образом мы доходим до первого тура, где вместо виннеров - конкретные игроки.

2.3. Распределение игроков по парам. Боты достаются самым рейтинговым из зарегистрированных игроков. Если мы считаем, что рейтинг отражает класс игрока - значит именно эти игроки больше других заслуживают пройти в следующий тур. Остальные распределяются по парам случайным образом. Потом можно продумать что-то более продвинутое, в зависимости от рейтинга, чтобы монстры не встречались с монстрами на фоне хилых новичков. Пока же достаточно случайного выбора.
Принцип простой - есть всего 3 типа игроков. Боты, Гранды (лучшие по числу ботов), прочие. Выбираем случайно одного. В пару ему выбираем случайно второго, но уже из подгруппы. Для гранда выбираем бота и наоборот, для прочих - других прочих. Значения ищем, разумеется, по таблице из п.1.3.

2.4. В паре, где есть бот, победитель определяется автоматически. Допустим, это была игра 31, в которой участвовал MegaGamer и Bot 6. Строка с ID турнира и № игры=31 заполняется игроками, автоматом выбирается победитель MegaGamer, он же становится winner 31 и в следующем туре, уже в игре №15 вместо "winner 30 против winner 31" будет "winner 30 против MegaGamer".

3. Стартует турнир. Игрок постит репорт. Если в репорте указан турнир, происходит множество проверок. Подходит ли время? Есть ли такая пара игроков? Не является ли один или оба указанных игрока специгроками? Впоследствии можно добавить проверку карты - используется ли карта из набора карт, одобренных для турнира (п. 1.3 - последнее предложение).

3.1. Если репорт проверен и правилен - ID победителя игры №K заменяет в таблице ID игрока winner K.

Турнир продолжается до победного конца.

Впоследствии можно добавить возможность ручного и/или автоматического (по заранее заданному инициатором турнира календарю) форсирования этапа турнира. Все, кто не успел сыграть до сих пор, считаются проигравшими и выбывают, на место winner'ов их игр заходят боты.

Last but not least - визуализация результата. Картинка выше - неплохой пример.

Комментарии, дополнения, исправления?

Posted: Sun Jan 08, 2012 21:41
by CTPAHHuK
На днях на связь со мной вышел очередной Легионер последнего сезона ТоХ. Crag aka Kekc бывший соклановец :) Заразил меня энтузиазмом :) Предлагаю начать заканчивать создание нового сайта :)

Хочу понять, на каком мы сейчас этапе? Что сейчас нужно делать?


По предыдущему посту (исходя из настроения "давайте сделаем полную версию сайта какую сможем, а потом будем улучшать"):

1. Турнир объявляется. На новом сайте исполнителем ЧМ, на форумах уполномоченными участниками от порталов, полномочия выдаются вручную путем внесения в группу. Инициатор определяет даты (начала, окончания этапов), систему (пока 1 - олимпийская), судей.

ОК.

1.1. В таблице турниров создается новый идентификатор и прописываются его свойства - название, дата начала, дата окончания, прочее.

ОК

1.2. На странице турнира должна быть простая возможность (большая кнопка) присоединиться к турниру или выйти из него, пока он не стартовал (та же кнопка, функция определяется динамически в зависимости от юзера и его состояния "записанности" в турнир). Если игрок на сайте не зарегистрирован, то он заполняет минимальное число полей и автоматически попадает в базу игроков турнира.

ОК

1.3. Т.к. отношение юзер-турнир - многие ко многим, нет нормальной возможности связывать их ни в таблице турниров, ни в таблице юзеров. Поэтому используется таблица турнир-юзер, куда пишутся строки при присоединении и удаляются при выходе из турнира. Там же предусмотрен третий столбец для достижения юзера в турнире - вылет в 1/16, в 1/8, ..., 3 место, 2-е, 1-е. Список столбцов впоследствии можно расширять. Например - кумулятивный результат по очкам, заработанным или потерянным в турнире.

Аналогично впоследствии можно создать таблицу многие ко многим - турниры и карты. Дальше я на нее сошлюсь.

ОК

2. Подходит дата начала турнира. Список участников замораживается и происходит составление турнирной сетки в ручную инициатором турнира.

ОК

2.1. Делается анализ количества участников. То количество бойцов, которого не хватает до ближайшей степени двойки, заполняется ботами. Я думаю, если заранее создать 63 бота, нам хватит их на турнир любого уровня. У ботов 0 очков рейтинга, они, очевидно, всегда проигрывают, и также очевидно, что выигрыш у бота не приносит победителю очков в общем зачете и не должен выводиться в статистике игрока.
Пример: зарегистрировалось 27 участников. Ближайшая степень двойки - 32. В турнир добавляется 5 ботов.

Аналогично надо создать штук 127 игроков типа winner 1 - winner 127, и еще 127 loser 1 - loser 127. Тоже с нулем рейтинга, конечно. winner, loser и bot - специгроки.

ОК так сейчас и работает.

2.2. Рисуется турнирная сетка. Вроде такой: http://images.challonge.com/wc2011.png (для облегчения понимания дальнейшего советую нарисовать себе на листе бумаги такую сетку с 6 уровнями). Рисуется в первую очередь как структура, а не как изображение. Мы помним, что основной факт у нас - это игра. Главная таблица базы имеет структуру типа следующей:

Сначала делаем для 2-х игроков, но все время держим в голове, что их может быть 3, 5, и 8. Что из них могут 2 выиграть и 6 проиграть, а могут 7 выиграть и 1 проиграть. Т.е. код должен быть легко расширяемым в эту сторону. То же самое при подсчете рейтинга. Хороший пример реализации подсчета очков для нескольких игроков - игра Carcassone (а как там?). Хотя и не абсолютно идентичный нашему.

Так вот - в отличие от типичного репорта, где запись формируется после игры, задать структуру мы можем только сформировав все записи заранее. Для турнира, на который зарегистрировалось 27 участников, это будет 31 строка (надеюсь, не нужно пояснять, почему так). Для этого нужно пронумеровать все игры в турнире. Начнем с конца. Финал - номер 1. Полуфиналы - №2 и №3. И т.д. Участники финала - winner 2 и winner 3. Участники игры 2 - winner 4 и winner 5. Игры 4 - winner 8 и winner 9. Таким образом мы доходим до первого тура, где вместо виннеров - конкретные игроки.

ОК ОК

2.3. Распределение игроков по парам. Боты достаются самым рейтинговым из зарегистрированных игроков. Если мы считаем, что рейтинг отражает класс игрока - значит именно эти игроки больше других заслуживают пройти в следующий тур. Остальные распределяются по парам случайным образом. Потом можно продумать что-то более продвинутое, в зависимости от рейтинга, чтобы монстры не встречались с монстрами на фоне хилых новичков (здесь обычно работало другое правило - оттягивать встречи игроков из одной страны как можно дольше; все остальное регулирует рейтинг). Пока же достаточно случайного выбора.
Принцип простой - есть всего 3 типа игроков. Боты, Гранды (лучшие по числу ботов), прочие. Выбираем случайно одного. В пару ему выбираем случайно второго, но уже из подгруппы. Для гранда выбираем бота и наоборот, для прочих - других прочих. Значения ищем, разумеется, по таблице из п.1.3.

ОК

2.4. В паре, где есть бот, победитель определяется автоматически. Допустим, это была игра 31, в которой участвовал MegaGamer и Bot 6. Строка с ID турнира и № игры=31 заполняется игроками, автоматом выбирается победитель MegaGamer, он же становится winner 31 и в следующем туре, уже в игре №15 вместо "winner 30 против winner 31" будет "winner 30 против MegaGamer".

Ага :)

3. Стартует турнир. Игрок постит репорт. Если в репорте указан турнир, происходит множество проверок. Подходит ли время? Есть ли такая пара игроков? Не является ли один или оба указанных игрока специгроками? Впоследствии можно добавить проверку карты - используется ли карта из набора карт, одобренных для турнира (п. 1.3 - последнее предложение).

ОК

3.1. Если репорт проверен и правилен - ID победителя игры №K заменяет в таблице ID игрока winner K.

ОК

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

3.3. В момент старта следующего тура все победители завершающегося тура получают поздравительные типовые письма (форма имеется). Все проигравшие получают благодарственное письмо за участие.

Турнир продолжается до победного конца.

4. Турнир завершается рассылкой всем участниками информационного письма о итогах (список призеров и количество баллов, добавленное в рейтинг за участие игрока, которому направлено письмо). А так же сообщение о старте месяца реваншей (тут надо додумать).


Впоследствии можно добавить возможность ручного и/или автоматического (по заранее заданному инициатором турнира календарю) форсирования этапа турнира. Все, кто не успел сыграть до сих пор, считаются проигравшими и выбывают, на место winner'ов их игр заходят боты.

Last but not least - визуализация результата. Картинка выше - неплохой пример.

ОК

Всё описано очень подробно (в моем понимании) и очень совпадает с текущей схемой организации чемпионата мира :) Dalai, это ты сделал то, что ты просил сделать меня? Или что-то еще нужно описать?

Posted: Mon Jan 09, 2012 02:36
by Dalai
CTPAHHuK wrote:Dalai, это ты сделал то, что ты просил сделать меня? Или что-то еще нужно описать?
Да. Я мог упустить какие-то важные моменты, поэтому как минимум нужно было проверить. Кроме того, это же может стать образцом для описания других типов турнира.
CTPAHHuK wrote:Хочу понять, на каком мы сейчас этапе? Что сейчас нужно делать?
Пока можно ничего не делать, я пытаюсь организовать программиста.

Posted: Sat Mar 24, 2012 19:49
by CTPAHHuK
Dalai
Как у тебя дела с обновлением?

Я пока что сделал страховочный вариант для проведения ЧМ. На сайте собрана краткая инфа о двух последних ЧМ и будет добавлена подобная сетка про ЧМ 2008 и ЧМ 2009.

h4.ucoz.com

Posted: Sun Mar 25, 2012 00:58
by Dalai
Никак. Человек, которого я хотел задействовать в исполнении, сейчас сильно занят. До конца марта, а то и середины апреля, ситуация не изменится.

Posted: Sun Nov 30, 2014 15:40
by CTPAHHuK
Есть ли ресурсы на создание сайта лиги? С минимальным набором:
- профили игроков;
- система репорта игр;
- система рейтинга.

Posted: Mon Dec 01, 2014 15:57
by Dalai
Пока нет :(

Posted: Mon Dec 01, 2014 21:29
by CTPAHHuK
Ок-ок, покручу пока сам. Появилась необходимость. Французы пускают свой рейтинг на самотёк без особой поддержки,они предложили слияние всех игроков в одну лигу на любом сайте

Posted: Wed Dec 03, 2014 17:48
by Dalai
Ты готов заниматься этим в текущем режиме в роли постановщика задач, тестера, собирателя обратной связи и т.п.? Другими словами, уделять этому время часто? Я могу делать это лишь изредка и лишь ради некоторых специфических соображений, но скорее всего, не смогу заниматься этим рутинно. Если да - есть некоторая перспектива.

Posted: Fri Dec 05, 2014 11:25
by CTPAHHuK
Dalai wrote:Ты готов заниматься этим в текущем режиме в роли постановщика задач, тестера, собирателя обратной связи и т.п.? Другими словами, уделять этому время часто?
Уверен, что не я один готов этим заниматься, а ты зачем спрашиваешь?

Posted: Sat Dec 06, 2014 13:12
by Max_HMMI
CTPAHHuK wrote:Уверен, что не я один готов этим заниматься, а ты зачем спрашиваешь?
Потому что, как показывает опыт, первоначальный энтузиазм на подобных проектах быстро гаснет. Справедливости ради отмечу, что тому есть объективные причины.

Posted: Sat Dec 06, 2014 15:49
by CTPAHHuK
Я про это:
Dalai wrote:Если да - есть некоторая перспектива.
О какой перспективе речь? Не понял :)