embedded-systems-labs/wormz
2025-12-25 11:09:27 +03:00
..
.settings initial commit 2025-12-25 11:09:27 +03:00
Debug initial commit 2025-12-25 11:09:27 +03:00
Drivers initial commit 2025-12-25 11:09:27 +03:00
Inc initial commit 2025-12-25 11:09:27 +03:00
Middlewares/Third_Party/FreeRTOS/Source initial commit 2025-12-25 11:09:27 +03:00
Src initial commit 2025-12-25 11:09:27 +03:00
startup initial commit 2025-12-25 11:09:27 +03:00
Startup initial commit 2025-12-25 11:09:27 +03:00
.cproject initial commit 2025-12-25 11:09:27 +03:00
.cproject_org initial commit 2025-12-25 11:09:27 +03:00
.mxproject initial commit 2025-12-25 11:09:27 +03:00
.project initial commit 2025-12-25 11:09:27 +03:00
.project_org initial commit 2025-12-25 11:09:27 +03:00
README.md initial commit 2025-12-25 11:09:27 +03:00
SDK_Keyboard Debug.launch initial commit 2025-12-25 11:09:27 +03:00
SDK_Keyboard_converter.log initial commit 2025-12-25 11:09:27 +03:00
SDK_Keyboard.ioc initial commit 2025-12-25 11:09:27 +03:00
SDK_Keyboard.xml initial commit 2025-12-25 11:09:27 +03:00
SDK11M.cfg initial commit 2025-12-25 11:09:27 +03:00
STM32F407VGTx_FLASH.ld initial commit 2025-12-25 11:09:27 +03:00
STM32F407VGTX_FLASH.ld initial commit 2025-12-25 11:09:27 +03:00
STM32F407VGTX_RAM.ld initial commit 2025-12-25 11:09:27 +03:00

Lab 3 — Wormz (мини-игра на OLED + FreeRTOS)

Автор: А. Карпов P3313

1. Цель работы

Реализовать простую игру на OLED 128×64:

  • 2 игрока (червя)
  • прицеливание, сила выстрела, полёт с гравитацией/ветром
  • взрыв с кратером и уроном по радиусу
  • завершение игры при 0 HP

2. Аппаратная часть

МК: STM32F407VGTx
Периферия:

  • OLED по I2C
  • Клавиатура (сканирование строк/столбцов через PCA9538 / kb.c)
  • FreeRTOS

3. Управление

  • 2 — угол вверх
  • 8 — угол вниз
  • 4 — влево
  • 6 — вправо
  • 5 — FIRE: 1-е нажатие заряд силы, 2-е нажатие выстрел
  • * — следующее оружие (в режиме прицеливания)
  • # — предыдущее оружие (в режиме прицеливания)
  • 0 — рестарт

4. Архитектура и состояние игры

Основные состояния (GameState):

  • GS_AIM — прицеливание/движение/выбор оружия
  • GS_CHARGE — заряд силы
  • GS_FLIGHT — полёт снаряда
  • GS_EXPLOSION — анимация взрыва + кратер + урон
  • GS_GAMEOVER — конец игры
stateDiagram-v2
  [*] --> AIM

  AIM --> CHARGE: FIRE (5)
  CHARGE --> FLIGHT: FIRE (5)
  FLIGHT --> EXPLOSION: collision/hit
  EXPLOSION --> AIM: next player
  EXPLOSION --> GAMEOVER: hp == 0

  GAMEOVER --> AIM: restart (0)
  AIM --> AIM: restart (0)
  CHARGE --> AIM: restart (0)
  FLIGHT --> AIM: restart (0)
  EXPLOSION --> AIM: restart (0)

5. Модель мира

  • Земля: массив ground_y[x] (высота поверхности по X).
  • Кратер: “опускаем” ground_y[x] в радиусе взрыва.
  • Урон: линейно убывает с расстоянием до эпицентра.

6. Демо (небольшое)

видео

7. Выводы

  • Сделан игровой цикл со стабильным FPS (фиксированный шаг).
  • Реализованы физика полёта, взрыв, деформация ландшафта и урон.
  • Игра управляется только клавиатурой и выводится на OLED.