Developed YuSurg, a 2D medical simulation game requiring players to perform emergency surgical procedures, manage fluctuating patient vitals, and strategically treat randomized maladies. The project was built using the Java-based LibGDX framework to demonstrate mastery of the four pillars of Object-Oriented Programming (OOP) and six GoF Software Design Patterns.

Software Architecture & Design Patterns
Constructed the core application using a Model-View-Controller (MVC) architecture, decoupling business logic, UI rendering, and input handling:
- Singleton Pattern: Applied in the core
GameManagerclass to prevent data duplication and manage a single, global source of truth for the game state across all rendered screens. - Factory Pattern: Implemented a
MaladyFactoryto instantiate randomized patient illnesses based on user-selected difficulty parameters and scaling algorithms. - Observer Pattern: Designed a decoupled
PatientObserverinterface to link backend data models with the UI layer, enabling real-time graphical updates for fluctuating patient vitals (e.g., pulse and core temperature). - State Pattern: Structured
PatientStatelogic to dynamically alter patient behavior (e.g., variable pulse decay rates) based on their current condition, using defined states such asStableState,CriticalState, andDeadState. - Template Method Pattern: Established a standardized algorithmic framework within the abstract
SurgicalToolclass, allowing specific subclass tools to execute distinct validation checks, animations, and mathematical effects. - Command Pattern: Encapsulated UI button interactions within
ToolCommandinterfaces, separating input handling from the business logic of surgical instruments.
Object-Oriented Programming (OOP) Principles
- Encapsulation: Secured
Patientdata variables behind private access modifiers, exposing only validated getter and setter methods to enforce data access contracts during state transitions. - Inheritance: Designed a hierarchical tool system where specific surgical instruments (e.g., Scalpel, Defibrillator, Stitches) inherit properties and operational methods from a unified abstract parent class.
- Polymorphism: Leveraged method overriding within the state pattern architecture, allowing the generic
update()method to execute different mathematical and rendering behaviors depending on the patient's active state. - Abstraction: Hid internal execution requirements and RNG (Random Number Generator) fail-rate algorithms behind a simplified
use()method interface.
Backend Infrastructure (REST API)
- Framework: Built a backend REST API using Spring Boot 3 (managed via Gradle) to manage player progression logic and global leaderboards. Integrated Lombok to reduce boilerplate across data model classes.
- Database & ORM: Configured dual-environment database support combining H2 Database for local development and a PostgreSQL database hosted on Neon Cloud for production. Adopted Spring Data JPA/Hibernate for Object-Relational Mapping (ORM).
- Security: Implemented JWT-based authentication and route-level access control via Spring Security.

Core Competencies
Java, LibGDX, Spring Boot, PostgreSQL, Object-Oriented Programming (OOP), Software Design Patterns, REST API Architecture