Cubic

игра кубик переделанная на js





список серверов:

инструкция по игре:

ходить через кнопки A и D
прыгать кнопкой Space
выбрать блок цифрами
поставить блок через ПКМ только перед этим выберите
ломать блоки через ЛКМ
меню отладки на F3
ресетнуться на кнопку R
открыть чат кнопка T

        

протокол сервачный:

работает через вебсокеты
дефолтный порт 8000

булевые значения пишутся как 0 и 1
в нике не должны быть пробелы
установка - добавление / изменение

формат пакетов:
    первый символ - тип пакета
    остальное - данные пакета, параметры через \n (перенос строки)
    пример пакета отправки мира:
       "WB10,0,1,normal,#fff\nP1name,0,1,0,0,#d00"
        🠅└─┬───────────────┘  └┬────────────────┘
      тип  параметр (блок)     параметр (игрок)


список пакетов:
    {данные} - типа это какието данные так обозначаю, скобки не надо
    [C] - айди пакета

    клиент отправляет:
        заход игрока                        [J]: {ник_игрока}
        прыжок выкл (controls_jump = false) [C]: "J", "0"
        прыжок вкл (controls_jump = true)   [C]: "J", "1"
        идти выкл (controls_x = 0)          [C]: "W", "0"
        идти левее (controls_x = -1)        [C]: "W", "1"
        идти правее (controls_x = 1)        [C]: "W", "2"
        корректировка движения              [R]: {x}, {y}, {vel_x}, {vel_y}
        установить блок                     [P]: {x}, {y}, {тип}
        сломать блок                        [D]: {x}, {y}
        нажатие кнопки (список кнопок ниже) [K]: {кнопка}, {нажата ли}
        отправить сообщение                 [M]: {сообщение}

    сервер отправляет:
        кикнуть игрока с ошибкой        [K]: {ошибка}
        установить цвета игроку         [C]: {цвет}
        установить ник игрока           [N]: {ник}
        установить позицию игрока       [P]: {x}, {y}
        установить velocity игрока      [V]: {x}, {y}
        установить walk speed игрока    [S]: "W", {скорость}
        установить jump speed игрока    [S]: "J", {скорость}
        установить gravity speed игрока [S]: "G", {скорость}
        отправить мир                   [W]: {изм. мира}, {изм. мира}, ...
        отправить все типы блоков:      [B]: {тип_1}, ..., {тип_9}
        отправить сообщение             [M]: {сообщение}, {сообщение}, ...

список кнопок которые может отправить игрок через отдельный пакет:
["KeyR", "KeyW", "KeyE", "KeyQ", "KeyS", "KeyZ", "KeyX", "KeyC"
"Numpad1", "Numpad2", "Numpad3", "Numpad4", "Numpad5",
"Numpad6", "Numpad7", "Numpad8", "Numpad9", "Numpad0",
"ShiftLeft", "ControlLeft", "Enter", "F1", "F2"]

формат изменения мира:
    установка блока: "B1{x},{y},{collides},{type},{color}"
    установка игрока: "P1{name},{x},{y},{vel_x},{vel_y},{color}"
    удаление блока: "B0{x},{y}"
    удаление игрока: "P0{name}"

готовая реализация сервера на Python