Implementasi permainan billiard 2D menggunakan JavaFX dengan simulasi fisika realistis dan antarmuka retro-arcade. Proyek ini dibuat sebagai tugas mata kuliah Desain dan Pemrograman Berbasis Objek (OOP) dengan menerapkan prinsip-prinsip OOP seperti inheritance, polymorphism, encapsulation, dan separation of concerns.
- Dua Mode Permainan: 8-Ball (kompetitif) dan Arcade (time-attack)
- Simulasi Fisika Realistis: Collision detection, momentum transfer, dan friction
- Antarmuka Retro: Pixel art, custom fonts, dan efek visual arcade
- High Score System: Persistensi skor menggunakan Java Preferences API
- Dokumentasi Lengkap: Javadoc berbahasa Indonesia untuk semua public API
| Komponen | Teknologi | Versi |
|---|---|---|
| Bahasa | Java | 17+ |
| GUI Framework | JavaFX | 21 |
| Build Tool | Gradle (Kotlin DSL) | 8.14 |
| IDE | IntelliJ IDEA | Community Edition |
Billiards-2D/
├── src/main/java/com/billiards2d/
│ ├── core/
│ │ ├── BilliardApp.java # Main application & JavaFX entry point
│ │ ├── GameObject.java # Interface untuk game entities
│ │ └── GameConstants.java # Konstanta konfigurasi global
│ ├── entities/
│ │ ├── balls/
│ │ │ ├── Ball.java # Abstract base class untuk bola
│ │ │ ├── BallType.java # Enum tipe bola (Solid/Stripe/8-Ball)
│ │ │ ├── CueBall.java # Bola putih (cue ball)
│ │ │ └── ObjectBall.java # Bola target (1-15)
│ │ ├── CueStick.java # Logika stik biliar
│ │ └── Table.java # Meja biliar & pocket detection
│ ├── game/
│ │ ├── GameController.java # Game loop orchestrator
│ │ ├── GameRules.java # Aturan 8-Ball & Arcade
│ │ └── PhysicsEngine.java # Simulasi fisika & collision
│ ├── input/
│ │ └── InputHandler.java # Mouse/keyboard input handler
│ ├── ui/
│ │ ├── SceneManager.java # Manager scene (Menu/Game/GameOver)
│ │ ├── GameUIRenderer.java # Renderer utama game canvas
│ │ ├── HUDRenderer.java # Heads-up display (score, timer, dll)
│ │ └── FloatingText.java # Efek teks floating untuk feedback
│ └── util/
│ └── Vector2D.java # Utilitas matematika vektor 2D
├── src/main/resources/assets/ # Sprite, font, dan gambar
├── build.gradle.kts # Konfigurasi build & dependensi
└── gradlew / gradlew.bat # Gradle wrapper
Proyek ini menerapkan beberapa prinsip OOP dan design pattern:
- Separation of Concerns: Package terpisah untuk core, entities, game logic, input, dan UI
- Inheritance & Polymorphism: Hierarchy
Ball→CueBall/ObjectBall, interfaceGameObject - Encapsulation: Konstanta terpusat di
GameConstants, state management diGameController - Single Responsibility: Setiap class memiliki tanggung jawab yang jelas dan terbatas
- MVC-like Pattern: Pemisahan antara model (entities), controller (game logic), dan view (UI renderers)
Sebelum menjalankan proyek, pastikan telah terinstall:
-
Java JDK 17 atau lebih baru
- Download dari Eclipse Temurin atau Oracle JDK
- Verifikasi instalasi:
java -version
-
Git (untuk clone repository)
Gradle dan JavaFX akan diunduh otomatis oleh Gradle Wrapper saat pertama kali build.
-
Clone repository:
git clone https://github.com/Nand-o/Billiards-2D.git
-
Buka IntelliJ IDEA dan pilih Open, lalu pilih folder
Billiards-2D -
Tunggu IntelliJ mengunduh dependencies (terlihat di progress bar pojok kanan bawah)
-
Jalankan aplikasi melalui Gradle panel:
- Klik tab Gradle di sisi kanan
- Navigasi: Billiards-2D → Tasks → application → run
- Double-click run
# Clone repository
git clone https://github.com/Nand-o/Billiards-2D.git
cd Billiards-2D
# Jalankan aplikasi (Windows)
gradlew.bat run
# Jalankan aplikasi (Linux/macOS)
./gradlew run# Windows
gradlew.bat javadoc
# Linux/macOS
./gradlew javadocDokumentasi akan tersedia di: build/docs/javadoc/index.html
Build gagal / JavaFX error:
- Pastikan menggunakan Gradle task
run, jangan run langsung dariBilliardApp.java - Gradle akan otomatis menghandle JavaFX module path
Gradle sync error:
- Periksa koneksi internet (Gradle perlu download dependencies)
- Coba: File → Invalidate Caches → Invalidate and Restart di IntelliJ
High DPI display issues:
- Set VM options:
-Dglass.gtk.uiScale=1.0atau sesuaikan scaling
Proyek ini dikembangkan oleh Kelompok 1 sebagai tugas mata kuliah OOP.
Nama Anggota:
| Nama Lengkap | GitHub |
|---|---|
| Ernando Febrian | Ernando Febrian |
| Faris Maulana | bai |
| Candra Afriansyah | Candra Afriansyah |
| Muhammad Yasyfi Alhafizh | Muhammad Yasyfi Alhafizh |
Proyek ini dibuat untuk keperluan edukasi.