Игровая логика PvP: сервер (C++) + клиент (Quintus.js)

Сервер: 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.
This commit is contained in:
2026-07-28 12:05:01 +05:00
parent a9e4828dd9
commit 2d0be9c287
17 changed files with 6632 additions and 5 deletions
+7 -2
View File
@@ -25,13 +25,18 @@
</header>
<main id="game-root">
<!-- TODO: лобби (этап 3) и игровое поле на Quintus.js (этапы 4-5) -->
<!-- TODO: coop-режим с AI и защитой базы — этап 5 -->
<h2 class="prompt">./battlecity</h2>
<div id="lobby"></div>
<div id="battlecity-canvas-container"></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>