- 10 волн, 5 видов врагов со своим поведением и босс в три фазы - меч, копьё и посох, 11 улучшений между волнами, опыт и уровни - меню, пауза, настройки, итоги партии и рекорд, русский и английский - мир 480×270 с масштабированием, интерфейс в 960×540, скорости от dt - асинхронный цикл: та же игра в браузере через pygbag - тесты без окна, автоигрок, CI, релизы exe/Linux, GitHub Pages - README на двух языках; исходная версия — релиз v1.0.0
8.5 KiB
Pixel Gamble
Русский · English
Пиксельный экшен на выживание на Python и pygame: десять волн врагов, улучшения между волнами и финальный бой с Красным самураем. Партия занимает около 10 минут, рекорд сохраняется.
▶ Играть в браузере · Скачать для Windows и Linux
Статус: начат как учебный проект Яндекс Лицея (2022), в 2026 доработан до законченной игры; версия с защиты — в релизе v1.0.0
Стек: Python 3.10+ · pygame · pygbag (браузерная сборка) · PyInstaller · pytest
Как играть
| Действие | Клавиши |
|---|---|
| Движение | WASD или стрелки |
| Удар | левая кнопка мыши, пробел или J |
| Сменить оружие | Q, колесо мыши, 1–3 |
| Пауза | Esc или P |
| Полный экран | F11 |
При ударе мышью оружие бьёт в сторону курсора, с клавиатуры — туда, куда смотрит герой.
Что в игре
- 10 волн. Враги появляются у краёв арены, каждая следующая волна больше и сильнее, 10-я — босс.
- 5 видов врагов с разным поведением:
- слайм медленно ползёт к игроку;
- летучая мышь петляет и пролетает над камнями;
- ниндзя замахивается и делает выпад;
- скелет держит дистанцию и метает сюрикены;
- демон-циклоп предупреждает вспышкой и бросается тараном.
- Босс — Красный самурай с тремя фазами: рубит мечом вблизи, с 60% здоровья добавляет рывок с веером сюрикенов, с 30% ускоряется, призывает помощников и стреляет кольцом.
- Три оружия: меч бьёт широким взмахом, копьё — дальше и насквозь, посох стреляет зарядами.
- 11 улучшений: между волнами нужно выбрать одно из трёх — сердца, урон, скорость, новое оружие, тройной заряд, лечение за победы и другие.
- Опыт и уровни. Сердечки выпадают из врагов и разбитых камней и лечат.
- Меню, пауза, настройки (громкость, язык, полный экран), итоги партии и рекорд.
- Два языка: русский и английский.
| Выбор улучшения | Босс |
|---|---|
Быстрый старт
Проще всего — играть в браузере или скачать готовый файл
со страницы релизов: PixelGamble-windows.exe или
PixelGamble-linux.tar.gz, Python для них не нужен.
Из исходников:
git clone https://github.com/EDeev/pixel_gamble.git
cd pixel_gamble
pip install -r requirements.txt
python game/main.py
Рекорд и настройки хранятся в %APPDATA%\pixel_gamble (Windows), ~/.local/share/pixel_gamble
(Linux), в браузере — в localStorage.
Устройство
game/
├── main.py # точка входа (рабочий стол и браузер)
├── pixelgamble/
│ ├── app.py # окно, главный цикл, меню, настройки, итоги
│ ├── game.py # партия: волны, бой, камера, интерфейс боя
│ ├── player.py # герой и оружие
│ ├── enemies.py # пять видов врагов
│ ├── boss.py # Красный самурай, три фазы
│ ├── waves.py # состав волн и очередь появления
│ ├── upgrades.py # улучшения между волнами
│ ├── world.py # арена из плиток
│ ├── bot.py # автоигрок для проверок и записи GIF
│ └── … # ресурсы, эффекты, интерфейс, тексты, сохранения
└── assets/ # графика, звук, музыка и шрифты
tools/import_assets.py # перенос нужных файлов из набора Ninja Adventure
web/template.tmpl # шаблон страницы для pygbag
Мир рисуется в разрешении 480×270 и масштабируется в два раза, а интерфейс — поверх, в 960×540, поэтому пиксели остаются чёткими и текст читается. Скорости не зависят от FPS. Игровой цикл асинхронный, поэтому тот же код работает в браузере через pygbag.
Проверки
pip install -r requirements-dev.txt
ruff check .
pytest
python game/main.py --bot --fast --frames 7200 # автоигрок, две минуты игры без окна
Тесты запускаются без окна и звука. Проверяются:
- автоигрок проходит первые волны;
- босс проходит все три фазы, победа и смерть ведут на экран итогов;
- улучшения применяются, а каждая волна выпускает ровно свой состав;
- сохранение переживает испорченный файл;
- персонаж не проходит сквозь стены.
CI прогоняет всё это на Python 3.10 и 3.12.
Сборка
-
Релиз: тег
v*собираетPixelGamble-windows.exeиPixelGamble-linux.tar.gzчерез PyInstaller и прикладывает их к релизу. -
Браузерная версия: каждый пуш в
mainсобирает её через pygbag и выкладывает на GitHub Pages. Локально это делается так:pip install pygbag==0.9.3 python -m pygbag --build --width 960 --height 540 --template web/template.tmpl game
Ресурсы
- Графика, звуки, музыка и шрифт заголовка — Ninja Adventure
(pixel-boy, лицензия CC0), текст лицензии —
game/assets/LICENSE-ninja-adventure.txt. - Шрифт интерфейса — Tiny5 (SIL Open Font License,
game/assets/fonts/OFL.txt). - Шаблон страницы — на основе стандартного шаблона pygbag.
Лицензия
Учебный проект (Яндекс Лицей, 2021–2022 учебный год), доработанный в 2026 — код доступен для изучения, отдельной лицензии нет.
Автор
Деев Егор Викторович — GitHub · Telegram · egor@deev.space
Сделано с ❤️ — deev.space