| .. | ||
| .settings | ||
| Debug | ||
| Drivers | ||
| Inc | ||
| Middlewares/Third_Party/FreeRTOS/Source | ||
| Src | ||
| startup | ||
| Startup | ||
| .cproject | ||
| .cproject_org | ||
| .mxproject | ||
| .project | ||
| .project_org | ||
| README.md | ||
| SDK_Keyboard Debug.launch | ||
| SDK_Keyboard_converter.log | ||
| SDK_Keyboard.ioc | ||
| SDK_Keyboard.xml | ||
| SDK11M.cfg | ||
| STM32F407VGTx_FLASH.ld | ||
| STM32F407VGTX_FLASH.ld | ||
| STM32F407VGTX_RAM.ld | ||
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.