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

Previous
Previous

GT Movies Store