arknoid là game chạy trên STM32 Nucleo-F401RE hiển thị trên màn OLED SPI (Ucglib). Điều khiển bằng nút nhấn (SW1–SW5), có buzzer báo khi nhấn nút điều khiển. Nháy đèn LED khi kết thúc game.
Vòng đời chương trình:
MENU -> GAME -> GAME OVER/LEVEL CLEAR -> MENU
- 3 level: Dễ (1) - Trung bình (2) - Khó (3).
- Ấn
B2để di chuyển thanh sang trái,B4để di chuyển thanh sang phải. - LED nháy 6 lần khi Game Over, 3 lần khi Level Clear.
- Buzzer sẽ kêu khi ấn nút bấm.
- Ấn
B5để con trỏ hình tam giác đi xuống mục chọn level. - Ấn
B3để vào mục chọn level. Ở đây có thể thay đổi level bằng nútB2(giảm level) hoặc nútB4(tăng level). - Ấn thêm một lần
B3để chọn level, khi này con trỏ sẽ xuống mục "START". - Ấn
B3một lần nữa và trải nghiệm trò chơi!
- Thuật toán di chuyển của bóng: Cập nhật vị trí tiếp theo của bóng thông qua vận tốc:
x += vx; y += vy. - Thuật toán va chạm: Cập nhật hướng của vận tốc khi va chạm với tường, với hộp, với thanh chắn.
- Cập nhật điểm, vẽ lại các vật thể khi thay đổi vị trí, cập nhật số lượng hộp còn lại sau khi va chạm với bóng, nhận biết khi nào game kết thúc.
- FSM cho toàn chương trình (
MENU -> GAME -> GAME OVER/LEVEL CLEAR -> MENU).
Hình. Lưu đồ thuật toán của chương trình
Hình. Màn hình trò chơi
.
├── Inc/
│ ├── drivers/
│ │ ├── gpio.h
| │ └── timebase.h
│ ├── game/
│ │ ├── collision.h
│ │ ├── entities.h
│ │ ├── levels.h
│ │ ├── menu_ui.h
│ │ └── run_game.h
│ ├── graphic/
│ │ ├── display_init.h
│ │ └── render.h
│ ├── periph/
│ │ ├── button.h
│ │ ├── buzzer.h
│ │ └── led.h
│ └── boardconfig.c
│
├── Src/
│ ├── drivers/
│ │ ├── gpio.c
| │ └── timebase.c
│ ├── game/
│ │ ├── collision.c
│ │ ├── entities.c
│ │ ├── levels.c
│ │ ├── menu_ui.c
│ │ └── run_game.c
│ ├── graphic/
│ │ ├── display_init.c
│ │ └── render.c
│ ├── periph/
│ │ ├── button.c
│ │ ├── buzzer.c
│ │ └── led.c
│ └── main.c
│
├── Startup/
├── Debug/
├── .project / .cproject
├── arknoid Debug.launch
├── STM32F401RETX_FLASH.ld
├── STM32F401RETX_RAM.ld
└── README.md

