Для создания API использовался фреймворк Laravel.
Статус игры
GET /status
Возвращает информацию о текущей партии. Содержит следующую информацию:
- Текущий игрок.
- Закончена ли игра.
- Положение фигур на доске.
- Победитель (если игра закончена).
Пример ответа:
{
"currentPlayer": "black",
"isOver": true,
"board": [
[ "0", "A", "B", "C", "D", "E", "F", "G", "H"],
["1", "WR", "WK", "WB", "WQ", "__", "WB", "WK", "WR"],
["2", "WP", "WP", "WP", "WP", "__", "WP", "WP", "WP"],
["3", "__", "__", "__", "__", "__", "__", "__", "__"],
["4", "__", "__", "__", "__", "__", "__", "__", "__"],
["5", "__", "__", "__", "__", "WKing", "__", "__", "__"],
["6", "BP","__", "__", "BQ", "__", "BK", "__", "__"],
["7", "__", "BP", "BP", "__", "__", "BP", "BP", "BP"],
["8", "BR", "BK", "BB", "__", "BKing", "BB", "__", "BR"]
],
"winner": "black"
}
Создание новой игры
POST /new_game
Создается новая игра, результаты старой партии теряются.
Ход
POST /make_move
Пример запроса:
{
"figureCoordinates": "A2",
"destination": "A3",
"transformationModificator": "Q"
}
В теле запроса передается JSON. Есть два обязательных параметра "figureCoordinates" и "destination". Первый параметр - координаты фигуры, которой ходят, второй параметр - координаты квадрата, на котором эта фигура должна оказаться. Координаты задаются строкой, состоящей из одной латинской буквы от "A" до "H" и цифры от 1 до 8.
Также есть не обязательный параметр - "transformationModificator", он обозначает фигуру, в которую превратится пешка при переходе на последнюю горизонталь, если его не указать, то пешка превратится в королеву. Возможные значения параметра: "Q" - королева, "R" - ладья, "K" - конь, "B" - слон.
Ответ
После хода возвращается статус игры:
- Окончена ли игра.
- Какая фигура была взята.
- Расположение фигур на доске.
- Текущий игрок.
Пример ответа
{
"isOver": false,
"taken": "",
"board": [
[ "0", "A", "B", "C", "D", "E", "F", "G", "H"],
[ "1", "WR", "WK", "WB", "WQ", "WKing", "WB", "WK", "WR"],
[ "2", "__", "WP", "WP", "WP", "WP", "WP", "WP", "WP"],
[ "3", "WP", "__", "__", "__", "__", "__", "__", "__"],
[ "4", "__", "__", "__", "__", "__", "__", "__", "__"],
[ "5", "__", "__", "__", "__", "__", "__", "__", "__"],
[ "6", "__", "__", "__", "__", "__", "__", "__", "__"],
[ "7", "BP", "BP", "BP", "BP", "BP", "BP", "BP", "BP"],
[ "8", "BR", "BK", "BB", "BQ", "BKing", "BB", "BK", "BR"]
],
"currentPlayer": "black"
}
Если поставлен мат, то будет возвращаться следующее сообщение:
{
"message": "Game is over, black wins!"
}
Особые ходы
Любые ходы, в том числе взятие на проходе и рокировка задаются координатами фигуры и координатами квадрата, куда она должна попасть. Рокировка и взятие на проходе будут распознаны автоматически.
Для запуска нужно выполнить команду
php artisan serve
Для запуска тестов нужно выполнить команду
vendor/bin/phpunit