EAS PBO

 

EAS - Hangman OOP

Anggota Kelompok :

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 permainan
  • DatabaseManager.java - Mengelola semua operasi database
  • GameState.java - Menyimpan dan mengelola state permainan
  • Word.java - Model data untuk kata
  • Player.java - Model data untuk pemain
  • PlayerStats.java - Model data untuk statistik pemain
  • HangmanDisplay.java - Mengelola tampilan UI di console

  • Tabel diagram pada permainan hangman


    1. 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 pemain
    • word_id → Kata mana yang digunakan (terhubung ke tabel words)
    • 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

    KelasMethod UtamaFungsi
    DatabaseManager.javaconnectToDatabase()
    createTablesIfNotExist()
    insertDefaultWords()
    getRandomWord()
    saveGameResult()
    getTopPlayers(limit)
    close()
    Mengelola koneksi PostgreSQL, ambil kata random (ORDER BY RANDOM()), simpan hasil game, dan ambil leaderboard
    Word.javagetId(), getWord(), getCategory(), getDifficulty(), getLength()Model data kata (contoh: "JAVA", kategori "Teknologi", difficulty "Easy")
    GameState.javamakeGuess(char)
    isAlreadyGuessed()
    isGameWon()
    isGameLost()
    isGameOver()
    getDisplayWord()
    Logika inti permainan: proses tebakan, update guessedWord (P _ O G _ A _), hitung wrongGuesses (max 6)
    Player.javarecordGame(boolean won)
    getWinRate()
    Mencatat statistik pemain hanya untuk sesi saat ini
    PlayerStats.javaplayerName, totalGames, wins, avgAttemptsData leaderboard dari database (digunakan untuk top 5 pemain sepanjang masa)
    HangmanDisplay.javagetHangman(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)

    1. Ambil kata random dari DB → getRandomWord()
    2. Buat GameState baru
    3. Loop selama belum selesai:
      • HangmanDisplay.displayGameState()
      • Input 1 huruf (validasi)
      • GameState.makeGuess(huruf)
      • Cek isGameOver()
    4. Tampilkan hasil Menang/Kalah
    5. saveGameResult(playerName, wordId, won, attemptsUsed)
    6. 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

    Display aplikasi ketika dijalankan

    Tampilan database ketika permainan dijalankan



    Youtube : Hangman OOP

    Komentar

    Postingan populer dari blog ini

    TUGAS 2 : Jettpack compose : Hello, World!

    Pertemuan 3 PPB (A) - Mengenal Composable Aplikasi Selamat Ulang Tahun

    Pertemuan 5 - Aplikasi Kalkulator Sederhana