Курсив - то, над чем точно стоит подумать - Авторизация. Было бы здорово найти (или попросить) АПИ от хабра, на авторизацию пользователей с хабра. Инвайты + подтверждения на почту
- Дисциплина - это вид игры. У дисциплины прописан движок.
- Рейтинг по дисциплине
- Предложения по улучшению - оформить как комментарии или как блог
- АПИ/туториал
- Задумки дисциплин:
- ХабраWars - простенький движок, ужо написан. Будут инопланетяне, сжигающие друг друга телепатией
- Танчики - на совести DarkV
- Nethack/rogue - когда - нибудь напишу
- Пользователь.
- Почта, стена/комментарии/блог
- Программы-игроки - пользователь может загрузить программы игроки, с указанием языка программирования. Если он скриптовый, то предоставляется форма для ввода кода, если компилируемые - форма для ввода кода и возможность загрузки кода (на ajax лучше всего это написать, с подсветкой кода - http://www.cdolivet.com/editarea/editarea/exemples/exemple_full.html). Программы-игроки сгруппированы по дисциплинам
- У каждой программы-игрока есть рейтинг, первоначально = 0. Когда одна программа-игрок побеждает другую с большим рейтингом, то у победившей рейтинг=рейтинг_проигравшей+1
- К программе-игроку можно писать комментарии
- Игрок по данной дисциплине видит программы с меньшим рейтингом чем у него. Если программа бинарная, он может ее скачать. Возможность для пользователей прятать/показывать исходники/бинарники
- Изменить загруженную программу нельзя, можно удалить и загрузить новую - нужно для того чтобы пользователи не грузили сервер бесконечными боями. Может ввести изменение, но тогда какую то систему версий, которая щелкает при изменении
- Переключатель "По умолчанию для этой дисциплины"
- Список битв, в которых участвовала программа
- Рейтинг по каждой дисциплине, в которой пользователь участвует - равен рейтингу самой рейтинговой программы пользователя по данной дисциплине. Рейтинг в дисциплине, в которой пользователь не участвует равен нулю
- Общий рейтинг - наверное среднее арифметическое от рейтингов
- Список битв, в которых участвовал пользователь
- Битвы: Есть два режима выбора битв - предложение и нападение.
- Напасть можно только на пользователей/программы с более высоким рейтингом. На AJAX: окошечко "Напасть на" со списком пользователей, везде где на сайте упоминаются пользователи - рядом с ними значки дисциплин с их баллами, при щелчке по ним - они добавляются в окошечко, при этом бой будет происходить с их программой отмеченной по умолчанию для этой дисциплине, если хочется с другой - нужно зайти на страницу пользователя и выбрать нужную программу, добавить ее (рядом с именами программ тоже значки их дисциплин с баллами). Если щелкается по дисциплине, отличной от уже добавленных - либо не добавлять, либо разделить окошечко на дисциплины. В окошечке "Напасть на" список своих программ по выбранной дисциплине, выбрана отмеченная по умолчанию, Кнопочка "битва", при щелчке переход на страницу битвы
- Арена - создать бой, присоединиться к бою
- В любом случае, битва произойдет, только если не имела место быть битва с теми же программами-участниками. В противном случае пользователю покажут лог старой битвы с пометкой, что битва старая
- Страница битвы - отдает флешплеер с xml логом битвы, если xml лога битвы нету на сервере - он генерится, флешплеер говорит подождите, идет бой. Если xml лог есть на сервере, то на страничке написанно - лог старый. Комментарии к битве. Ссылки на программы - участники
Внутренняя машинерия- При новом бое сайт:
- Смотрит, нету ли блокировки, если блокировка, то ждет
- Ставит блокировку
- Копирует программы-участники боя на отдельные виртуальные машины
- Если программа на компилируемом языке, компилирует ее
- Запускает скрипт требуемого игрового движка на хост машине с параметрами - программами, запускаемыми через виртуальные машины
- Получает от движка xml-лог боя, сохраняет его, делает запись в базе данных, отдает
- Проверяет, все ли программы-игроки и движок завершились, убивает их, если нет
- Снимает блокировку
- Как вариант: сайт при новом бое записывает сражающихся в очередь, очередь обрабатывается отдельным скриптом по крону
|