Игровая логика 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
+31
View File
@@ -88,3 +88,34 @@
content: '- ';
color: var(--color-accent-dim);
}
#battlecity-canvas-container {
max-width: 640px;
margin: 1.5rem 0;
}
#battlecity-canvas-container canvas {
border: var(--border);
background: var(--color-bg);
display: block;
}
#battle-result {
color: var(--color-accent);
font-size: 1.1rem;
margin: 0.75rem 0;
}
#battle-back {
background: transparent;
border: 1px solid var(--color-accent-dim);
color: var(--color-accent);
font-family: var(--font-mono);
padding: 0.35rem 0.75rem;
cursor: pointer;
}
#battle-back:hover {
border-color: var(--color-accent);
box-shadow: 0 0 6px var(--color-accent-dim);
}