Group vibEcoderS - Class INT2204 6
- Nguyễn Thế Hưng - 24020150
- Nguyễn Quốc Khánh - 24022671
- Phạm Quang Minh - 24020239
- Nguyễn Gia Quang - 24020619
Instructor: Kiều Văn Tuyên Semester: HK1 2025-2026
Moongazer is a story-driven Arkanoid game that combines classic brick-breaking gameplay with visual novel storytelling elements. Set in the world of Wuthering Waves, players experience an engaging narrative while enjoying challenging Arkanoid mechanics.
Key features:
- Dual Game Modes: Story Mode with narrative chapters and Endless Mode for infinite gameplay
- Visual Novel Integration: Fully voiced story scenes with character dialogues
- Modern Tech Stack: Built with Java 25 and LibGDX framework
- Comprehensive Save System: Multiple save slots with progress tracking
- Rich Visual Effects: Parallax backgrounds, combo animations, and smooth transitions
- Database-Driven: SQLite database for high scores, saves, and leaderboards
- Professional UI: Wuthering Waves-inspired interface with custom fonts and assets
Game mechanics:
- Control a paddle to bounce balls and destroy bricks
- Collect power-ups for enhanced abilities (Expand Paddle, Multi Ball, Laser Gun, etc.)
- Progress through 5 story chapters with unique narratives
- Compete in Endless Mode with increasing difficulty waves
- Track high scores for each stage and endless mode
- Experience smooth parallax effects and dynamic visuals
Used in: Game class and all Scene implementations
Purpose: Manages game states and transitions between different scenes (Main Menu, Story Mode, Endless Mode, etc.)
Used in: Brick creation system
Purpose: Creates different types of bricks (breakable, unbreakable, power-up bricks) with various durability levels
Used in: UI callbacks and game event handling
Purpose: Handles button clicks, menu actions, and game state changes through callback systems
Used in: Different game modes (Story vs Endless)
Purpose: Different scoring, progression, and win/lose conditions for each game mode
The game uses multiple threads to ensure smooth performance:
- Main Game Thread: LibGDX's application thread handles the game loop at 60 FPS
- Asset Loading Thread: Asynchronous loading of audio files and resources
- Audio Playback: Background music and sound effects play on separate threads
- Database I/O Thread: SQLite operations for saves and high scores run asynchronously
- Video Playback: Background video in main menu runs on dedicated thread
- Java 25 or higher
- Gradle 9.0+ (included via wrapper)
-
Clone the repository:
git clone https://github.com/teppyboy/Moongazer.git cd Moongazer -
Build the project:
./gradlew build
-
Run the game:
./gradlew run
| Key | Action |
|---|---|
← (Changable) |
Move paddle left |
→ (Changable) |
Move paddle right |
SPACE |
Launch ball / Shoot bullet |
ESC |
Pause game / Go back |
Mouse Click |
UI interactions |
- Select Story Mode from the main menu
- Choose from 5 chapters (Victory?, Echoes of Oblivion, The Realm of Chaos, Fate Rewritten, A New Beginning)
- Experience visual novel scenes between gameplay
- Complete objectives to progress through the story
- Save your progress at any time
- Track high scores for each chapter
- Select Endless Mode from the main menu
- Survive through infinite waves of bricks
- Difficulty increases with each wave
- Compete for the highest score on the leaderboard
- Track your best wave and score
| Power-up | Effect | Duration |
|---|---|---|
| Expand Paddle | Increases paddle width | 10 seconds |
| Extra Life | Grants an additional life | Permanent |
| Fast Ball | Increases ball speed by 100% | Temporary |
| Slow Ball | Decreases ball speed by 50% | Temporary |
| Multi Ball | Spawns 2 additional balls | Permanent |
| Super Ball | Ball passes through bricks without bouncing | 15 seconds |
| Laser Gun | Shoot lasers to destroy bricks | 12 seconds |
| Explosive | Destroys nearby bricks on impact | Instant |
- Hit bricks consecutively without missing to build combo multiplier
- Visual feedback with Iuno character appearance at 10x, 20x, 30x combos
- Combo resets when ball is missed
- Story Mode: Save progress at any time during gameplay
- Multiple Slots: Support for 3 separate save slots
- Auto-save: High scores are automatically saved
- Load Game: Resume from last checkpoint
Main Menu with Parallax Effect

[Video Demo Coming Soon]
Gameplay videos will be available in docs/demo/ folder
Moongazer/
├── app/
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/org/vibecoders/moongazer/
│ │ │ │ ├── arkanoid/ # Core game objects
│ │ │ │ ├── dialogue/ # Visual novel system
│ │ │ │ ├── managers/ # Asset & Audio managers
│ │ │ │ ├── scenes/ # Game scenes
│ │ │ │ │ ├── arkanoid/ # Arkanoid gameplay
│ │ │ │ │ └── story/ # Story stages
│ │ │ │ ├── ui/ # UI components
│ │ │ │ ├── Game.java # Main game class
│ │ │ │ └── SaveGameManager.java # Database management
│ │ │ └── resources/
│ │ │ ├── textures/ # Game sprites
│ │ │ ├── audio/ # Music & SFX
│ │ │ ├── videos/ # Background videos
│ │ │ └── fonts/ # UI fonts
│ │ └── test/ # Unit tests
│ └── build.gradle.kts # Build configuration
├── docs/ # Documentation
└── README.md
| Technology | Version | Purpose |
|---|---|---|
| Java | 25 | Core language |
| LibGDX | 1.13.0 | Game framework |
| Gradle | 9.0.0 | Build tool |
| SQLite | 3.46.1.0 | Database (via JDBC) |
| SLF4J + Logback | 2.0.16 / 1.5.12 | Logging |
| JUnit Jupiter | 5.11.3 | Unit testing |
| gdx-video | 1.3.3 | Video playback |
For all dependencies please referer to build.gradle.kts
The project includes comprehensive unit tests for core game mechanics:
# Run all tests
./gradlew test
# Run specific test class
./gradlew test --tests "org.vibecoders.moongazer.arkanoid.BallTest"Test Coverage:
- Ball mechanics (velocity, launch, combo, properties)
- Brick system (durability, power-ups, destruction)
- Paddle movement and controls
- Bullet mechanics
-
Enhanced Story Mode
- Additional chapters and story branches
- Multiple endings based on player choices
- More character interactions and voiced dialogues
-
Gameplay Enhancements
- More power-up varieties (Shield, Time Slow, Magnet, etc.)
- Boss battles with unique mechanics
- Challenge mode with special objectives
- Co-op multiplayer support
-
Technical Improvements
- Achievement system with rewards
- Cloud save synchronization
- Steam integration for leaderboards
- Mobile version (Android/iOS)
- Modding support for custom stages
-
Visual & Audio
- More particle effects and animations
- Additional background music tracks
- Customizable themes and skins
- Replay system for recording gameplay
- None currently reported
Please report any bugs or issues on the GitHub Issues page
GNU GPLv3, Wuthering Waves assets belong to KURO GAMES.
- Instructor: Kiều Văn Tuyên for guidance and support
- Kuro Games: For inspiration from Wuthering Waves
- LibGDX Community: For excellent documentation and support
- Group Members: For vibe coding and collaborative effort
For questions or feedback about this project:
- GitHub: teppyboy/Moongazer
- Group: vibEcoderS
- The game was developed as part of the Object-Oriented Programming with Java course curriculum
- All code is written by group members with guidance from the instructor
- Project demonstrates practical application of OOP principles, design patterns, and modern Java development
- Assets are used for educational purposes only
Last updated: November 12, 2025






