PAC-MAN
Ретро-аркада · Rust + WebAssembly · 4 игры в одной

Классический PAC-MAN — заново

Переписанный на Rust легендарный лабиринт: четыре режима — Pac-Man, Ms. Pac-Man, Cookie-Man и Crazy Otto, — честный ИИ четырёх призраков со сменой настроений, энергайзеры, фрукты и цепочки очков. Игровой цикл 60 Гц в WebAssembly, рендер Canvas2D. Открой ссылку — и играй.

Демо Игра pacman.dfv24.com · Управление: стрелки · Enter старт
60 Гц на Rust · 4 классических режима · без установки и регистраций
pacman.dfv24.com · погоня
PAC-MAN — погоня призраков в лабиринте
Построено на Rust (edition 2024) WebAssembly wasm-bindgen Canvas2D Web Audio Docker + nginx Gitea registry
Возможности

Аркадный автомат в браузере

Повадки оригинала воспроизведены по таблицам: у каждого призрака свой характер, у каждого уровня — свои скорости и тайминги.

4 игры в одной

Pac-Man, Ms. Pac-Man, Cookie-Man и Crazy Otto — выбор прямо в меню. Разные лабиринты, спрайты и характеры поведения в одном движке.

Честный ИИ призраков

У каждого призрака своя цель: Blinky преследует, Pinky заходит наперерез, Inky комбинирует, Clyde стесняется. Всё по правилам оригинального автомата.

Scatter / Chase / Frightened

Призраки живут по таймерам: рассыпаются по углам, срываются в погоню, синеют от энергайзера и уходят домой на «регенерацию» — как в оригинале.

Энергайзеры и цепочки очков

Съел энергайзер — охота открыта: 200, 400, 800, 1600 за подряд съеденных призраков. Плюс фрукты, бонусные жизни и переходы уровней.

Таблицы уровней

Скорости пакмана и призраков, длительности режимов, очки за фрукты — всё задаётся таблицами уровней (tables.rs), как в документации к автомату.

Буферизованное управление

Поворот можно нажать заранее — движок тайловый, и Pac-Man свернёт в ближайшем допустимом месте. Никаких «промахнулся мимо поворота».

60 Гц на Rust

Фиксированный шаг игрового цикла в WASM: детерминированная логика без сборщика мусора, плавность аркадного автомата в любом браузере.

Аркадный кабинет

Стилизация под автомат: пиксельный шрифт, неоновая рамка, оригинальные звуки через Web Audio — вплоть до сирены погони.

Образ 23 МБ — деплой за минуту

Multi-stage сборка Rust→WASM→nginx публикуется в свой Gitea-registry; сервер просто делает docker compose pull — и игра в бою.

Под капотом

Ядро на Rust, кабинет на вебе

Игра — один WASM-модуль; браузеру остаётся ввод, звук и requestAnimationFrame.

Игровое ядро

src — Rust → WASM

lib.rs: игровой цикл с фиксированным шагом, ИИ призраков со всеми режимами, тайловые коллизии, очки и жизни, рендер. tables.rs: конфигурация уровней и характеры призраков по таблицам оригинала.

  • Детерминированный цикл 60 Гц — воспроизводимое поведение
  • Цели призраков по правилам автомата (scatter-углы, chase-таргеты)
  • Тайловый движок с буферизованными поворотами
  • wasm-bindgen API: init, tick, ввод, состояние для рендера
Оболочка

web — браузерный кабинет

Лёгкий bootstrap без фреймворков: main.js грузит WASM, гоняет requestAnimationFrame и пробрасывает клавиатуру; styles.css рисует аркадный кабинет; в assets — шрифты, спрайты и звуки.

  • Меню выбора из четырёх игр, рестарт, паузы
  • Canvas2D-рендер по спрайтам, чёткий pixel-art масштаб
  • Web Audio: вака-вака, сирены, фрукты — как у автомата
  • nginx.conf с корректным MIME для .wasm
Загляните внутрь

Как это выглядит

Реальные экраны с боевого стенда pacman.dfv24.com.

Меню

Четыре легенды на выбор

Стартовый экран аркадного кабинета: неоновый логотип и меню из четырёх игр — Pac-Man, Ms. Pac-Man, Cookie-Man и Crazy Otto. Стрелки — выбор, Enter — старт.

pacman.dfv24.com · меню
PAC-MAN — меню выбора из четырёх игр
Старт уровня

Оригинальный лабиринт

Точки, энергайзеры по углам, дом призраков в центре и туннели по бокам — расстановка повторяет автомат. Сверху счёт и уровень, снизу жизни.

pacman.dfv24.com · уровень 1
PAC-MAN — начало уровня
Погоня

Режим CHASE: призраки вышли на охоту

Blinky уже в лабиринте, остальные выходят из дома по таймерам. Индикатор режима в углу подсказывает, когда бежать, а когда — есть энергайзер и охотиться самому.

pacman.dfv24.com · CHASE
PAC-MAN — погоня в режиме CHASE
Движок

Кадр за кадром, как на автомате

Каждый тик ядро читает буфер ввода, двигает Pac-Man по тайлам, даёт каждому призраку выбрать цель по его характеру и текущему режиму, считает коллизии и обновляет счёт. Браузер только рисует готовое состояние.

  • Фиксированный шаг 60 Гц — без «плавающей» физики
  • Таймеры scatter/chase и frightened по таблицам уровня
  • Персональные цели призраков: погоня, упреждение, комбинация
  • Цепочки очков, фрукты и бонусные жизни — по оригиналу
# один тик игрового цикла (60 раз в секунду)
input буфер → поворот в ближайшем тайле
mode таймеры → scatter ⇄ chase · frightened?
ghosts цели → Blinky · Pinky · Inky · Clyde
move тайлы → коллизии: точки · фрукт · призрак

→ score(200·400·800·1600 за цепочку)
→ render(Canvas2D · спрайты)
✓ WAKA-WAKA в Web Audio
Как запустить

От исходников до автомата

src (Rust)

Ядро компилируется в wasm32, биндинги — wasm-bindgen.

web (кабинет)

Статика без сборщиков: HTML + main.js + спрайты и звуки.

Registry → сервер

Образ публикуется в Gitea; сервер делает compose pull.

1

Разработка

make wasm + make serve — сборка ядра и локальный сервер. Версия wasm-bindgen-cli зафиксирована и проверяется Makefile.

2

Релиз в registry

make docker-push собирает multi-stage образ (Rust→WASM→nginx, ~23 МБ) и публикует в свой Gitea-registry с тегом версии и latest.

3

Сервер одним скриптом

deploy/create-proxmox-lxc.sh создаёт LXC, ставит Docker и запускает игру из registry; обновление — повторный запуск install.sh.

Репозитории

Исходники проекта

Полный README: сборка, точные версии инструментов, релизный конвейер и деплой.

Вака-вака?

Четыре классических лабиринта и призраки с характером — прямо в браузере, без установки.

Играть ↗
Демо pacman.dfv24.com · стрелки · Enter старт