Сервер: Game — authoritative-тик 20 Гц через uSockets timer, движение/коллизии танков и пуль, разрушаемые кирпичные стены, respawn, победа/поражение/ничья, технический проигрыш при дисконнекте. game.ready запускает матч, когда оба игрока в pvp-комнате готовы. Клиент: заведён Quintus.js (MIT, vendored) — Tank/Bullet/Wall спрайты, рендер по снапшотам game.state, keyboard-инпут (WASD/стрелки/space), экран результата матча. Найден и исправлен use-after-free: колбэк onFinished_ синхронно удалял Game изнутри его же метода — перенесено на uWS::Loop::defer.
44 lines
1.5 KiB
HTML
44 lines
1.5 KiB
HTML
<!doctype html>
|
|
<html lang="ru">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>./battlecity — cacto</title>
|
|
<link rel="icon" type="image/svg+xml" href="/assets/cactus-logo.svg" />
|
|
<link rel="stylesheet" href="/css/theme.css" />
|
|
<link rel="stylesheet" href="/css/game.css" />
|
|
</head>
|
|
<body>
|
|
<canvas id="matrix-rain"></canvas>
|
|
|
|
<div class="container">
|
|
<header class="site-header">
|
|
<a href="/" class="logo" aria-label="cacto — на главную">
|
|
<img src="/assets/cactus-logo.svg" width="20" height="20" alt="" />
|
|
cacto
|
|
</a>
|
|
<ul class="nav-links">
|
|
<li><a href="/">whoami</a></li>
|
|
<li><a href="/projects.html">ls projects/</a></li>
|
|
<li><a href="/game.html" aria-current="page">./battlecity</a></li>
|
|
</ul>
|
|
</header>
|
|
|
|
<main id="game-root">
|
|
<!-- TODO: coop-режим с AI и защитой базы — этап 5 -->
|
|
<h2 class="prompt">./battlecity</h2>
|
|
<div id="lobby"></div>
|
|
<div id="battlecity-canvas-container" style="display: none"></div>
|
|
</main>
|
|
</div>
|
|
|
|
<script src="/vendor/quintus/quintus.js"></script>
|
|
<script src="/vendor/quintus/quintus_2d.js"></script>
|
|
<script src="/vendor/quintus/quintus_sprites.js"></script>
|
|
<script src="/vendor/quintus/quintus_scenes.js"></script>
|
|
<script src="/vendor/quintus/quintus_input.js"></script>
|
|
<script type="module" src="/js/matrix-rain.js"></script>
|
|
<script type="module" src="/js/game/main.js"></script>
|
|
</body>
|
|
</html>
|