145 lines
No EOL
6 KiB
HTML
145 lines
No EOL
6 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>cubic</title>
|
||
|
||
<link rel="stylesheet" href="/css/style.css">
|
||
|
||
<link rel="apple-touch-icon" sizes="180x180" href="/icon/apple-touch-icon.png">
|
||
<link rel="icon" type="image/png" sizes="32x32" href="/icon/favicon-32x32.png">
|
||
<link rel="icon" type="image/png" sizes="16x16" href="/icon/favicon-16x16.png">
|
||
<link rel="manifest" href="/icon/site.webmanifest">
|
||
|
||
<script>
|
||
if (!new URLSearchParams(location.search).has("PLEASE_HTTPS")) {
|
||
if (location.protocol !== 'http:') {
|
||
location.replace(`http:${location.href.substring(location.protocol.length)}`);
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style>
|
||
pre {
|
||
font-family: 'Fira Code', 'Times New Roman', Times, serif;
|
||
font-size: 15px;
|
||
border-radius: 10px;
|
||
padding: 15px;
|
||
background: #333;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body oncontextmenu="return false;">
|
||
<div class="container">
|
||
<h1>Cubic</h1>
|
||
<p>игра кубик переделанная на js</p>
|
||
|
||
<div class="margin-25"></div>
|
||
|
||
<input type="text" id="server-ip" placeholder="айпи серрве"><br>
|
||
<input type="text" id="server-nick" placeholder="ник игроаа"><br>
|
||
<span id="server-error" style="color: red;margin: 5px 0;display: inline-block;"></span><br>
|
||
<button id="connect-server">поддключт к серваа</button><br>
|
||
|
||
|
||
<div class="margin-25"></div>
|
||
|
||
<canvas width="640" height="480" id="game"></canvas>
|
||
|
||
<div class="margin-25"></div>
|
||
|
||
<h3>список серверов:</h3>
|
||
|
||
<ul>
|
||
<li>meex.lol</li>
|
||
<li>других пока нет</li>
|
||
</ul>
|
||
|
||
<div class="margin-25"></div>
|
||
|
||
<h3>инструкция по игре:</h3>
|
||
|
||
<pre>
|
||
ходить через кнопки A и D
|
||
прыгать кнопкой Space
|
||
выбрать блок цифрами
|
||
поставить блок через ПКМ только перед этим выберите
|
||
ломать блоки через ЛКМ
|
||
меню отладки на F3
|
||
ресетнуться на кнопку R
|
||
открыть чат кнопка T
|
||
|
||
</pre>
|
||
|
||
<div class="margin-25"></div>
|
||
|
||
<h3>протокол сервачный:</h3>
|
||
|
||
<pre>
|
||
работает через вебсокеты
|
||
дефолтный порт 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}"
|
||
|
||
</pre>
|
||
|
||
<a href="server.py">готовая реализация сервера на Python</a>
|
||
</div>
|
||
|
||
<script src="script.js"></script>
|
||
</body>
|
||
</html> |