понедельник, 7 июля 2014 г.

Tournament addition for OCC (Online Chess Club - PHP Chess game)


Существует такой Online Chess Club (OCC) - small PHP chess game.

Ссылки:
- Мой код, с нижеуказанными изменениями и всеми игроками, партиями и турнирами, которые мы играли - GitHub.
- Оригинальный код ОСС - Сайт.

Внесенные изменения для удобства игры и создания турниров.

1) Изменения в исходный код.
Свои изменения буду помечать комментарием // Sergei Ki

1.1) Внес изменения в страницу логина.
1.2) Добавил новый пункт меню All Games (и код).
1.3) Добавил новый пункт меню Tournaments (и код).
1.4) Добавил автообновление страниц My Games и All Games.
1.5) Заремил почти всю функцию renderPageEnd.


2) Добавление турниров.

2.1) В каталоге occ-data/tournaments создать каталог турнира, например, karpov.

2.2) Создать в occ-data/tournaments/karpov файлы турнира:

2.2.1) parties - участники турнира; перед генерацией скриптом ТП (турнирных партий) внести сюдю список участников, например:
Mazila
Killer
NozhVspinU
JohnnyXIV
STAKAN
Hostel_UA
halvaed

2.2.2) places - места; после окончании турнира, внести сюда места участников соответственно, например:
I
II
III
VI
V
IV
VII

2.2.3) tgames - список ТП; генерится автоматически скриптом.

2.2.4) tinfo - информация о турнире; первая строка - название, вторая - названия изображений (предварительно размещенных в images) через пробел, например:
Турнир в честь 63-летия Карпова
karpov.jpg t1.png t2.png t3.png

2.3) Проверить права на запись.
Файл occ-data/tournaments/karpov/tgames и каталог occ-data/games должны иметь права на запись.

2.4) Разремить строку вызова функции создания турнирных партий //if (isset($_GET['tname'])) Tournament::_createTGs("karpov"); где параметр функции - это название турнира

2.5) Запустить в браузере файл tournaments.php?tname=1
При этом в файл tgames запишутся названия файлов ТП, которые создались в каталоге games и имеют, в нашем случае, окончание karpov-

2.6) Турнирная таблица (ТТ) доступна на странице турниров - меню Tournaments.

2.7) ТП доступны в My Games и All Games и выделены жирным шрифтом.

P.S. Видео, иллюстрирующее вышеописанное:




PP.SS. Сохраню на всякий случай записи, которые я делал по ходу работы.

ТУРНИРЫ


Опять вернулся к идее автоматизации турниров.
Покуда в голове не укладывается что и как сделать.


Для начала нужно ввести ключевые понятия, и описать их взаимодействие (алгоритм работы).

Данные:

ТП - турнирная партия
партии турниров хранятся в каталоге games (где и обычные партии), но с пометкой турнирная
идея 3: название турнира добавлять к названию партии, а не в файл игры, т.к. функция ioLoadGameInfoList формирует список по названию файла игры, не читая содержимое
идея 4: список названий ТП хранить в ТФ, никак не меняя сами файлы ТП

ТТ - турнирная таблица
как идея1: найти какую-нибудь javascript-библиотеку, чтобы была сортировка по столбцам
как идея2: таблица статичная с сортировкой участников по местам на основе сыгранных партий

ТФ - турнирный файл
+ в каталоге tournaments сохранять файлы турниров, формат файла (может xml? - нет):
+ название турнира
- когда начнется
+ фотографии кому посвящен турнир и кубков
+ список участников
+ список партий

СУ - список участников

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


Действия:

КНТ - кнопка Новый турнир
- находится на странице Турниры.
- юзер с правами создает турнир кнопкой New Tournament
  - создается каталог и файлы будущего турнира в каталоге turnaments


*КЯВ - кнопка Я выиграл!
  - только для турнирных партий поменять Abort на I won! (иначе, вне турнира можно будет создавать партии черными для неактивных игроков и выигрывать по таймауту)
меняю на АЗТП

АЗТП - автозавершение ТП в связи с окончанием турнира.
Проигрывает тот, чей текущий ход.



Этапы турнира:

Предварительный этап.
Формирование СУ в ТФ.

Этап создания турнира.
На основе СУ из ТФ генерятся ТП и ТТ.
+ Сначала сгенерить ТП по двойной круговой системе.
+ Затем всё это как-то выводить в виде таблицы.


Этап проведения турнира.
Играются турнирные партии.
+ В списке игры они подсвечены жирным шрифтом.
+ Результаты автоматически обрабатываются и отображаются в таблице.

Этап завершения турнира.
После завершения всех ТП или срока проведения турнира (в таком случае АЗТП), формируется окончательная ТТ.



Решения на данный момент:
+ отработать все действия на уже имеющемся проведенном турнире
+ все действия сначала отработать вручную, затем уже автоматизировать
- организовать турнирную таблицу по идея2
+ создание игры $gid=ioCreateGame($white,$black,$comment); также есть переменная $uid (user id)
+ загрузка списка игр ioLoadGameInfoList, которая вызывает ioLoadGameInfo
+ обзор всех функций файла io.phр
+ добавлять турнир в название файла ТП или в файл? вот в чем вопрос: попробую сначала в имя файла ТП
+ создал файл newtournament.php
+ создаю партии с помощью ioCrateGame, io.php выдает Notice: Undefined index: mhistory in /var/www/html/occ/io.php on line 352 (проверил - в оригинальном newgame.php также)
+ наверное вышеуказанные меню неудобны, лучше чтобы все партии выводились одним меню, только надо как-то выделять ТП
+ как выделять? шрифтом, жирным или курсивом
+ пишу функцию формирования таблицы. для нее во время генерации ТП надо сохранять названия партий в файл tgames
+ а есть ли в php функция отзеркалить массив... не нашел
+ решить, какой массив мне легче вывести в html таблицу, одномерный или двумерный, от этого и отталкиваться далее. решаю: двумерный.
+ зачем я вообще привязался к файлу tgames с ТП, и потом ломаю голову как из списка ТП сделать ТТ, надо генерить ТТ как и список ТП
+ с другой стороны, названия ТП генерит функция создания партии, используя текущее время, как мне получить без неё теже имена файлов? похоже файл tgames нужен...
+ наверное, проще будет переделать алгоритм генерации ТП, чтобы сразу генерить ТТ? нет, написал функцию, которая генерит ТТ из списка ТП
+ оформить всё как класс Tournament, может как абстрактный (если не буду создавать объект), и функции статические, туда же добавить то, что делает newtournament.php, последний удалить
+ в файле tinfo сохранять всю информацию по турниру: названия, изображения, регламент, оттуда и выводить
+ создать партии ТТ Турова
+ формировать ТТ Турова с учетом результата партий
+ при мереименовании партий безвозвратно потеряны такие: 201404041258-JohnnyXIV-Mazila-, 201312021036-KingBazya-Mazila-, 201311041305-JohnnyXIV-KingBazya-, взял другие партии вместо них
- для сортировки по очкам, надо сразу формировать $points,  затем отсортировать и выводить используя его ключи, но покуда неясно как делать



Размещение в блоге:
- в файлах везде где пометка // Sergei Ki написать комментарии
- написать список новых функций
- описать алгоритм создания турнира (не забыть права на файл tgames и каталог games)
- возможно, разместить скриншоты, а лучше, наверное, видео

Комментариев нет:

Отправить комментарий