Missile Command on ESP32
A real-time embedded game built in C++ featuring dynamic missile movement, collision detection, linked-list memory management, and responsive hardware controls.
[Embedded Systems] [C++] [ESP32] [Data Structures] [Real-Time Graphics]
Georgia Tech ECE 2035 • Individual Project • Summer 2026
Real-Time Gameplay
Continuously updated missile positions, input, collisions, and display output.
Hardware Interaction
Managed active game objects using a doubly linked list.
Collision Systems
Dynamic Memory
Managed active game objects using a doubly linked list.
Implemented missile interception and explosion detection.
Rebuilding an arcade classic on embedded hardware
Missile Command is a real-time defense game developed for the ESP32 platform. The player protects cities from incoming missiles by launching interceptors through physical hardware controls. I designed the game loop, managed dynamically changing missile objects, implemented collision and interception logic, and coordinated the visual state shown on the embedded display.
The project required balancing gameplay responsiveness with the memory and processing constraints of an embedded system. Unlike a desktop game, every object update, input event, and screen redraw had to be handled carefully to preserve performance.
Short Gameplay Demonstration
Missile tracking
Incoming and defensive missiles update through the main game loop.Interception detection
Defensive explosions determine whether hostile missiles are destroyed.Game-state management
Cities, missiles, score, and player input remain synchronized throughout gameplay.
Technical Architecture
Game loop
Processed player input, advanced missile positions, checked collisions, updated game state, and refreshed the display.
Missile data structure
Stored active missiles in a doubly linked list so objects could be inserted, traversed, and removed as the game progressed.
Collision detection
Detected when defensive explosions overlapped incoming missile trajectories and safely removed intercepted missiles.
Rendering
Updated the embedded display while minimizing unnecessary redraw operations that could reduce responsiveness.
Managing dynamic game objects
The number of active missiles changes continuously during gameplay. I used a doubly linked list to represent active missile objects, allowing missiles to be added when launched and removed after impact or interception without relying on a fixed-size collection.
The implementation required careful pointer updates when deleting the head, tail, or an interior node. I also had to avoid accessing missile memory after an object had been removed.
Doubly Linked List Structure for Player and Enemy Missile Lists