Существует такой 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)
- возможно, разместить скриншоты, а лучше, наверное, видео
Комментариев нет:
Отправить комментарий