Battle of Balls

Battle of Balls
A game that evolved through three major versions, each pushing the boundaries of different programming languages and platforms.
Project Evolution
Version 1: C & ARMv7 (2021) - The Origin
The original implementation was developed in C for ARM processors with VGA display output as the ECE243 final project. This version demonstrated low-level programming skills and hardware interaction, earning a full mark in the course.
Key Features:
- Direct hardware programming on ARM processor
- VGA display rendering
- Assembly optimization for performance
- Real-time physics simulation
Technologies: C, ARMv7 Assembly, VGA Display, ARM Architecture
Repository: C/ARM Version on GitHub
Version 2: JavaScript Web (2022) - Going Online
The second iteration brought the game to the web using JavaScript, making it accessible to anyone with a browser. This version focused on creating a smooth single-player experience with improved graphics and gameplay.
Key Features:
- Browser-based gameplay
- Enhanced visual effects
- Smooth ball physics
- Single-player survival mode
Technologies: JavaScript, HTML5 Canvas, CSS
Try it now: Play the web version here
Version 3: Rust Multiplayer (2025) - The Ultimate Version
The latest and most advanced version, Ball Ball U, was rebuilt from scratch in Rust with multiplayer PvP capabilities. This version explores Rust's memory safety and concurrency features for game development.
Key Features:
- Real-time multiplayer PvP gameplay
- Advanced physics engine in Rust
- Optimized networking for low-latency gameplay
- Challenging puzzle mechanics
- Enhanced level design
Technologies: Rust, Game Development, Networking, Multiplayer Systems
Repository: Rust Multiplayer Version on GitHub
The Journey
This project showcases a unique journey of reimagining the same game concept across three different programming paradigms:
- Systems Programming (C/Assembly)
- Web Development (JavaScript)
- Modern Systems Language (Rust)
Each version taught valuable lessons about performance optimization, language design trade-offs, and platform-specific challenges.