Skip to content
This repository has been archived by the owner on Apr 27, 2021. It is now read-only.

Турнирный сервер по игре "Дурак"

Notifications You must be signed in to change notification settings

MikhailChe/DurakTournamentServer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Турнирный сервер по игре "Дурак"

Карточная игра "Дурак" 1х1

Есть колода В начале игры раздаётся по 6 карт Игроки ходят по очереди. Серия из 10 матчей. Игру начинает игрок с самой младщей картой козырей.

Во время игры игрокам передаётся состояние игры в виде набора карт игрока, количества карт соперника, количества карт в колоде (с учётом козырной карты), козырной карты, передаются пары карт на поле. Игра в подкидного дурака, без переводов.

Действия игрока:

  • Игрок который ходит
    • Сходить определённой картой
    • Подкинуть карту
    • Объявить отбой
  • Игрок который отбивается
    • Отбиться определённой картой
    • Сдаться при невозможности отбиться или по тактическим соображениям

Порядок игры с точки зрения сервера: Игроки регистрируются в систеаме, получая токен для игры. Далее они используют этот токен, чтобы пинговать сервис один раз в секнунду на наличие готовой пары игры. login/get-token?login=login&password=password

Из пула подключенных игроков собирается пара.

Игра инициализируется, карты раздаются игрокам. Игроки узнают о том что игра собралась из ручки game/my-games-list?token=token

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

Игрок, который должен сходить обращается к соответствующим ручкам игрвого API. Сервер проверяет есть ли игра с таким game-id, проверяет зарегистрирован ли пользователь с таким token в этой игре, проверяет может ли игрок выполнять действия сейчас и можно ли выполнить это действие в таком состоянии. Ответ - успех или отказ в действии и новое текущее состояние игрового поля.

Не забываем профилировать каждого игрока и логировать все действия игроков для анализа игры.

Игровое API состоит из двух ручек:

http://server-ip/game/play/<game-id>/get_state?token=token - ручка для того чтобы посмотреть статус. Формат возвращаемых данных смотри в разделе Структура данных

http://server-ip/game/play/<game-id>/take_action?token=token&action=put&card=9H - ручка для того чтобы выполнить ход. Использовать метод POST. В параметрах передаём token, который получили в личном кабинете, action - строчка действия, должна соответствовать одному из доступных игроку действий (см. структуру данных). Если действие put, то дополнительно нужно передать какую карту мы хотим положить на игровое поле.

Карты в формате NS, где N-величина карты от 6 до 14, S - масть: 'C' - 'Clubs' крести, 'D' - 'Diamonds' бубны, 'S' - 'Spades' пики, 'H' - 'Hearts' черви

Структура данных:

{
	"action_accepted": true,
	"actions_available": ["put", "endturn", "take"],
	"game_field": {
		"cards": ["6C", "7H"],
		"field_cards": [["7S","8D"],["9D"]],
		"deck_counter": 24,
		"trump": "1S",
		"enemy_cards_counter": 6
	},
	"game_state":{
		"status":"gameover",
		"number_of_turns": 0,
		"number_of_moves": 0,
		"result": "draw"
	}
}

action_accepted флаг подтверждает ли сервер данное действие может быть true,false или null (когда игрок не производил никаких действий, а просто запросил состояние поля)

actions_available: put - можно сходить картой, endturn - можно завершить ход (для атакующей стороны, отправить в "биту"), take - взять карты, завершить ход (для защищающейся стороны)

game_field - состояние игрового поля

cards - массив карт игрока

field_cards - список пар карт, которые находятся на игровом поле. В случае если вместо пары одна карта - именно её нужно покрыть.

deck_counter - количество карт, которые остались в колоде

trump - козырная карта. Остаётся здесь на всё время игры для того чтобы знать какой был козырь.

enemy_cards_counter - количество карт у противника

game_state - структура статуса игры

game_state - "start" - игра только что началась, не было ни одного хода. "play" - игра уже идёт и был хотя бы один ход. "gameover" - игра окончена. Никто не может ходить. В поле result появляется результат игры.

result - null - если игра ещё идёт, то результата нет. "winner" - игрок выиграл. "looser" - игрок проиграл.

About

Турнирный сервер по игре "Дурак"

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published