EAS PBO
EAS - Hangman OOP
Anggota Kelompok :
1. Tabel
2. Tabel
Aditya Rizki Muhammad (5025221272)
Muhammad Rafi Budi Purnama (5025221307)
Github : Hangman OOP
Hangman OOP Implementation
Pada tugas kali ini, kita diminta untuk mengimplementasikan OOP dalam bentuk video game. disini kita memilih Hangman sebagai objek yang akan diprogram. Detail implementasi dari permainan ini dijelaskan dalam dokumen berikut.
Class Diagram
Class diagram
Terdapat 7 kelas dalam permainan ini :
HangmanGame.java - Main class, mengontrol alur permainanDatabaseManager.java - Mengelola semua operasi databaseGameState.java - Menyimpan dan mengelola state permainanWord.java - Model data untuk kataPlayer.java - Model data untuk pemainPlayerStats.java - Model data untuk statistik pemainHangmanDisplay.java - Mengelola tampilan UI di console1. Tabel words (Koleksi Kata)
Menyimpan semua kata yang bisa digunakan dalam permainan.
Kolom:
id→ Nomor unik setiap kata (auto increment)word→ Kata yang akan ditebak (contoh: "PROGRAMMING")category→ Kategori kata (contoh: "Teknologi", "Bahasa")difficulty→ Tingkat kesulitan ("Easy", "Medium", "Hard")
Fungsi: Sebagai "bank kata" yang dipilih secara random saat game dimulai.
2. Tabel games (Riwayat Permainan)
Mencatat setiap permainan yang dimainkan oleh pemain.
Kolom:
id→ Nomor unik setiap game (auto increment)player_name→ Nama pemainword_id→ Kata mana yang digunakan (terhubung ke tabelwords)won→ Menang (true) atau kalah (false)attempts_used→ Berapa kali salah tebak (0-6)play_date→ Kapan game dimainkan (otomatis tercatat)
Fungsi: Melacak histori permainan untuk statistik dan leaderboard.
Penjelasan Class
Kelas-Kelas & Tugas Masing-Masing
| Kelas | Method Utama | Fungsi |
|---|---|---|
DatabaseManager.java | connectToDatabase() createTablesIfNotExist() insertDefaultWords() getRandomWord() saveGameResult() getTopPlayers(limit) close() | Mengelola koneksi PostgreSQL, ambil kata random (ORDER BY RANDOM()), simpan hasil game, dan ambil leaderboard |
Word.java | getId(), getWord(), getCategory(), getDifficulty(), getLength() | Model data kata (contoh: "JAVA", kategori "Teknologi", difficulty "Easy") |
GameState.java | makeGuess(char) isAlreadyGuessed() isGameWon() isGameLost() isGameOver() getDisplayWord() | Logika inti permainan: proses tebakan, update guessedWord (P _ O G _ A _), hitung wrongGuesses (max 6) |
Player.java | recordGame(boolean won) getWinRate() | Mencatat statistik pemain hanya untuk sesi saat ini |
PlayerStats.java | playerName, totalGames, wins, avgAttempts | Data leaderboard dari database (digunakan untuk top 5 pemain sepanjang masa) |
HangmanDisplay.java | getHangman(wrongGuesses) displayGameState() displayWelcome() displayStatistics() | Tampilan ASCII art hangman (0–6 tahap), kata dengan spasi, huruf tertebak, dan tabel leaderboard |
HangmanGame.java (Main Class) | start() playRound() showLeaderboard() showFinalStats() | Mengatur alur utama: input nama → loop ronde → simpan hasil → tampilkan ranking → statistik akhir |
Alur Permainan (playRound)
- Ambil kata random dari DB →
getRandomWord() - Buat
GameStatebaru - Loop selama belum selesai:
HangmanDisplay.displayGameState()- Input 1 huruf (validasi)
GameState.makeGuess(huruf)- Cek
isGameOver()
- Tampilkan hasil Menang/Kalah
saveGameResult(playerName, wordId, won, attemptsUsed)- Tampilkan leaderboard top 5
Query SQL Penting
- Random kata:
ORDER BY RANDOM() LIMIT 1 - Leaderboard:
GROUP BY player_name ORDER BY wins DESC
Konsep OOP yang Diterapkan
- Encapsulation – semua atribut private + getter
- Single Responsibility – tiap kelas hanya 1 tugas
- Separation of Concerns – UI, Logic, dan Database terpisah rapi
- Dependency Injection – HangmanGame menerima DatabaseManager
Demo Program
Youtube : Hangman OOP
Komentar
Posting Komentar