-
Notifications
You must be signed in to change notification settings - Fork 0
API комнат
Каждая комната имеет ID (hex строка), имя/алиас (произвольная строка, по умолчанию тот же ID), параметры игры (изначальная длина змеи, размер поля, max/min количество игроков, etc.) и список администраторов (игроков, которые могут менять параметры комнаты). Доступ к комнате может быть (1) недоступен для других (полезно на время настройки параметров), (2) доступен по вайт-листу (задаётся параметром), (3) доступен по паролю (задаётся параметром) или (4) доступен для всех.
Игра в комнате начинается только тогда, когда количество игроков не меньше min_players, и все игроки в комнате отправили серверу сообщение Ready.
На уровне сообщений вам скорее всего не придётся работать. Релевантное API библиотеки указано ниже описания новых сообщений.
ListRooms() Запросить у сервера список комнат. В ответ возвращается сообщение
RoomListAvailable.
EnterRoom(room_name: str) Подсоединиться к комнате. room_name — либо имя комнаты,
либо её ID. В ответ приходит сообщение Ok.
EnterAnyRoom() Подключиться к любой комнате на усмотрение сервера. В ответ приходит
сообщение Ok.
NewRoom() Создать новую комнату с параметрами по умолчанию и подсоединиться
к ней. В этой комнате вы будете единственным игроком и администратором.
В ответ приходит сообщение Ok.
LeaveRoom() Выйти из текущей комнаты в хаб. В ответ приходит сообщение Ok.
GetRoomProperties() Запросить у сервера параметры текущей комнаты. Можно использовать
только если вы сейчас находитесь в комнате. В ответ возвращается
сообщение RoomPropertiesAvailable. Некоторые параметры (например
пароли) доступны для просмотра только администраторам комнаты.
Остальным вернутся недействительные значения таких параметров
(например, вместо паролей вернутся пустые строки).
SetRoomProperties(properties) Установить параметры текущей комнаты. Можно использовать только
если вы сейчас находитесь в комнате и являетесь её администратором.
Некоторые параметры установить нельзя (например players), их можно
только прочитать сообщением GetRoomProperties.
properties — это словарь (dict), в котором ключами являются названия
параметров, а значениями — новые значения для соответствующих параметров.
Таким образом можно изменять сразу несколько параметров одним
сообщением. В ответ возвращается Ok.
В случае ошибки вместо ответа присылается сообщение Err с сообщением об ошибке.
RoomListAvailable(rooms) Ответ сервера на ListRooms со списком комнат.
rooms — это список (list) объектов RoomInfo.
RoomPropertiesAvailable(props) Ответ сервера на GetRoomProperties.
props — это словарь, ключами которого являются названия
параметров, а значениями — их значения.
id: str ID комнаты.
name: str Имя комнаты.
players: List[str] Список имён игроков в комнате.
min_players: int Мин. число игроков.
max_players: int Макс. число игроков.
can_join: "yes"|"no"|"password" "yes" = подключиться можно, "no" = подключиться нельзя,
"password" = подключиться можно, зная пароль.
.list_rooms() -> List[RoomInfo]
.enter_room(room_name: str)
.enter_any_room()
.new_room()
.get_room_properties() -> Dict[str, Any]
.set_room_properties(properties: Dict[str, any])
.name: str Название события.
.data: Any Данные (в зависимости от типа события).
.must_know: bool Если клиенту неизвестно такое событие, то при False он его проигнорирует,
а при True завершится с ошибкой.
name: str Человекочитаемое имя комнаты.
players (Read Only): List[str] Список игроков в комнате.
admins: List[str] Список администраторов комнаты.
min_players: int Мин. количестов игроков, при котором можно начать игру.
max_players: int Макс. количество игроков, которое можно пустить в комнату.
snake_len: int Изначальная длина питонов.
field_width: int Ширина поля.
field_height: int Высота поля.
num_food_items: int Количество клеток с едой в начале игры.
respawn_food: FoodRespawnBehavior Как респаунить еду при её поедании.
open: RoomOpenness Открытость комнаты для других игроков (по умолчанию: Closed).
max_turns: Optional[int] Лимит на количество ходов, после которого игра завершается (None значит отсутствие лимита)
turn_timeout_seconds: Optional[float] Лимит на время хода в секундах. None означает отсутствие лимита
Yes При каждом поедании 1 клетки еды создавать новую (если есть место).
No Не создавать новую еду.
Random(p: float) Каждый ход (не обязательно при поедании) создавать где-то
еду с вероятностью p. 0 ≤ p ≤ 1.
Open Подключиться могут все.
Closed Подключиться нельзя.
Whitelist(List[str]) Подключиться могут только игроки из белого списка. Значение "@viewers" в списке позволяет подключаться всем желающим визуализаторам.
Password(str) Подключиться можно только по паролю.