My favorites | Sign in
Project Home Downloads Wiki Issues Source
Search
for
IdeasForSite  
Идеи для будущего сайта
Phase-Design
Updated Nov 8, 2009 by nbdar...@gmail.com

Курсив - то, над чем точно стоит подумать

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

Внутренняя машинерия

  • При новом бое сайт:
    1. Смотрит, нету ли блокировки, если блокировка, то ждет
    2. Ставит блокировку
    3. Копирует программы-участники боя на отдельные виртуальные машины
    4. Если программа на компилируемом языке, компилирует ее
    5. Запускает скрипт требуемого игрового движка на хост машине с параметрами - программами, запускаемыми через виртуальные машины
    6. Получает от движка xml-лог боя, сохраняет его, делает запись в базе данных, отдает
    7. Проверяет, все ли программы-игроки и движок завершились, убивает их, если нет
    8. Снимает блокировку
  • Как вариант: сайт при новом бое записывает сражающихся в очередь, очередь обрабатывается отдельным скриптом по крону

Sign in to add a comment
Powered by Google Project Hosting