Contents
【Unity Game】Tank Drone War
A 2D top-down tank defense shooter built in Unity, designed around the SOLID principles.
Full Source Code: On GitHub
Demo: On itch.io
Project Notes on SOLID: SOLID Principles in Project Practice
Project Info
| Type | Tech Stack | Category |
|---|---|---|
| 2D Top-Down Shooter | C# + Unity 2022.3 | Extended Project |
Overview
This is a 2D shooter game developed in Unity. I built the basic version while learning the SOLID principles, then expanded it into a more complete system. The focus is on scalable architecture and decoupled systems for multiple characters and weapons.
Core Gameplay
- Players can switch between three types of tanks: Light (L), Medium (M), and Heavy (H)
- Each tank has unique movement, weapon type, and damage model
- Enemy drones spawn continuously from the right side of the screen; players earn points by shooting them down
- If a drone crashes into a tank, that tank is deactivated; the game ends when all tanks are down
Extensions
New Medium Tank (Vertical Movement)
- Added via inheritance and interfaces without modifying existing tank logic
- Medium tank has moderate speed and movement range, between light and heavy tanks
Weapon System Refactor & Expansion
Each tank has its own weapon type, implemented using the Strategy Pattern for flexibility:
| Tank Type | Weapon | Features |
|---|---|---|
| Light Tank | Laser | Short cooldown, lowest damage, spread |
| Medium Tank | Bullet | Medium cooldown and damage |
| Heavy Tank | Rocket | Long cooldown, highest damage |
Differentiated Damage System
- Tanks take different amounts of damage
- Heavy tanks are the most durable; light tanks are the most fragile
New Heavy Drone (Random Vertical Movement)
- Uses a separate movement strategy for more complex enemy behavior
Difficulty Curve for Enemy Spawning
- Heavy drones are rare at the start
- Their spawn rate increases over time
- Controlled by a time-based, configurable spawn strategy
Design Highlights (SOLID in Action)
- Single Responsibility: Clear separation of concerns for tanks, weapons, enemies, and spawners
- Open/Closed Principle: New tanks and weapons can be added without changing existing code
- Liskov Substitution: All tanks are controlled through a common interface
- Interface Segregation: Movement, attack, and damage behaviors are split into separate interfaces
- Dependency Inversion: High-level modules depend on abstractions, not concrete implementations
Gameplay Video
Animal World
Implementation of FSM and Boids Algorithm.
Project Overview
| Category | Tech Stack | Role |
|---|---|---|
| Algorithm Implementation | C++ + raylib | Solo Project |
Project Description
This project was independently completed during my second year in the Game Design program, with the goal of simulating a dynamic ecosystem. Grass, sheep, wolves, and crows each follow distinct behavioral patterns:
- Grass grows and spreads
- Sheep search for and eat grass, avoid wolves, reproduce, or wander
- Wolves hunt sheep, reproduce, or wander
- Crows randomly fly in and out of the scene
Through the interaction of these behaviors, the grassland ecosystem gradually develops into a state of dynamic balance.
Highlights
- Utilized a Finite State Machine (FSM) to manage animal behavior logic, enabling clear state transitions and responsive mechanisms
- Applied the Boids algorithm to simulate flocking behavior of crows, enhancing realism and dynamic expression
- Built a foundational ecological cycle system supporting grass growth and spread, animal reproduction, and resource consumption
Showcase
🔗 Source code on GitHub
Hum to Heal
Collaborative Rhythm Game with hand-clapping, exploring the healing power of music and interaction
Project Overview
| Category | Tech Stack | Showcase Experience |
|---|---|---|
| Arcade Rhythm Game | Unity + C# | 2023 Gotland Game Conference |
Project Description
Players stand at the four corners of the machine and clap hands with adjacent partners to hit note blocks, creating rhythmic coordination. The design encourages interaction and a sense of rhythm among players, making it enjoyable for friends to play together while also serving as an icebreaker for strangers. At the exhibition, the project received enthusiastic feedback and attracted a large number of visitors to try it out.
Role
I independently handled all programming and technical implementation, including note detection, rhythm synchronization, and player input logic. In addition, I designed and created a player accessory—gloves—that integrate physical feedback with game mechanics, enhancing immersion and player experience.
Game Showcase