World Of Zull

 

Nama           : Hafidz Panji Ashari
NRP             : 5025231278
Kelas            : PBO-A



"World of Zuul" adalah permainan petualangan berbasis teks yang sederhana, di mana pemain menjelajahi berbagai ruangan dan berinteraksi dengan objek serta karakter melalui perintah teks.


1. Kelas Item

  • Deskripsi: Kelas ini digunakan untuk merepresentasikan objek atau barang dalam permainan yang dapat diambil oleh pemain.
  • Fungsi Utama:
    • Menyimpan nama dan deskripsi dari suatu item (misalnya, "kunci" dengan deskripsi "kunci untuk membuka pintu taman").
  • Struktur Dasar:
    • Properti: nama, deskripsi.
    • Metode: getNama(), getDeskripsi().

public class Item {
    private String nama;
    private String deskripsi;

    public Item(String nama, String deskripsi) {
        this.nama = nama;
        this.deskripsi = deskripsi;
    }

    public String getNama() {
        return nama;
    }

    public String getDeskripsi() {
        return deskripsi;
    }
}



2. Kelas Ruangan

  • Deskripsi: Kelas ini merepresentasikan setiap ruangan dalam permainan. Ruangan memiliki deskripsi, pintu keluar ke ruangan lain, item yang mungkin ada, dan rintangan yang harus diselesaikan untuk mengaksesnya.
  • Fungsi Utama:
    • Menyimpan deskripsi ruangan.
    • Menentukan arah pintu keluar (utara, timur, dll.).
    • Menyimpan item yang ada di ruangan.
    • Menentukan rintangan yang harus diselesaikan sebelum memasuki ruangan tertentu.
  • Struktur Dasar:
    • Properti: deskripsi, pintuKeluar, rintangan, item.
    • Metode:
      • setPintuKeluar() untuk menentukan pintu keluar.
      • setItem() untuk menambahkan item ke ruangan.
      • setRintangan() untuk menetapkan rintangan.
import java.util.HashMap;

public class Ruangan {
    private String deskripsi;
    private HashMap<String, Ruangan> pintuKeluar;
    private String rintangan;
    private Item item;

    public Ruangan(String deskripsi) {
        this.deskripsi = deskripsi;
        pintuKeluar = new HashMap<>();
    }

    public void setPintuKeluar(String arah, Ruangan tetangga) {
        pintuKeluar.put(arah, tetangga);
    }

    public void setRintangan(String rintangan) {
        this.rintangan = rintangan;
    }

    public void setItem(Item item) {
        this.item = item;
    }

    public String getDeskripsiSingkat() {
        return deskripsi;
    }

    public String getDaftarPintuKeluar() {
        StringBuilder daftarPintu = new StringBuilder("Pintu keluar:");
        for (String arah : pintuKeluar.keySet()) {
            daftarPintu.append(" ").append(arah);
        }
        return daftarPintu.toString();
    }

    public Ruangan getPintuKeluar(String arah) {
        return pintuKeluar.get(arah);
    }

    public String getRintangan() {
        return rintangan;
    }

    public Item getItem() {
        return item;
    }

    public boolean adaRintangan() {
        return rintangan != null;
    }
}



3. Kelas Permainan

  • Deskripsi: Kelas utama yang menangani logika permainan. Kelas ini memungkinkan pemain untuk menjelajahi ruangan, mengambil item, menyelesaikan rintangan, dan memenangkan permainan.
  • Fungsi Utama:
    • Mengatur alur permainan, termasuk perintah pengguna seperti pergi, ambil, inventaris, dan keluar.
    • Memeriksa apakah pemain memenuhi syarat untuk melewati rintangan (misalnya, memiliki kunci untuk membuka pintu taman).
    • Menentukan kemenangan pemain ketika mereka mencapai taman.
  • Struktur Dasar:
    • Properti: ruanganSaatIni, inventaris (item yang dimiliki pemain).
    • Metode:
      • mainkan() untuk memulai permainan.
      • prosesPerintah() untuk membaca dan mengeksekusi input pengguna.
      • pergiKeRuangan() untuk memindahkan pemain antar ruangan.
      • ambilItem() untuk mengambil item di ruangan saat ini.
      • tampilkanInventaris() untuk memeriksa barang yang dimiliki pemain.

import java.util.HashMap;
import java.util.Scanner;

public class Permainan {
    private Ruangan ruanganSaatIni;
    private HashMap<String, Item> inventaris;

    public Permainan() {
        inventaris = new HashMap<>();
        buatRuangan();
    }

    private void buatRuangan() {
        Ruangan ruangTamu, dapur, kamarTidur, taman;
        Item kunci;

        ruangTamu = new Ruangan("di ruang tamu");
        dapur = new Ruangan("di dapur");
        kamarTidur = new Ruangan("di kamar tidur");
        taman = new Ruangan("di taman");
        kunci = new Item("kunci", "Sebuah kunci yang dapat membuka pintu taman.");

        ruangTamu.setPintuKeluar("utara", dapur);
        ruangTamu.setPintuKeluar("timur", kamarTidur);
        dapur.setPintuKeluar("selatan", ruangTamu);
        kamarTidur.setPintuKeluar("barat", ruangTamu);
        kamarTidur.setPintuKeluar("utara", taman);

        kamarTidur.setItem(kunci);
        taman.setRintangan("Pintu taman terkunci. Anda membutuhkan kunci untuk membukanya.");

        ruanganSaatIni = ruangTamu; // Pemain mulai di ruang tamu
    }

    public void mainkan() {
        tampilkanSelamatDatang();

        boolean selesai = false;
        Scanner scanner = new Scanner(System.in);
        while (!selesai) {
            System.out.print("> ");
            String perintah = scanner.nextLine();
            selesai = prosesPerintah(perintah);
        }
        System.out.println("Terima kasih sudah bermain. Sampai jumpa!");
        scanner.close();
    }

    private void tampilkanSelamatDatang() {
        System.out.println("Selamat datang di Dunia Zuul!");
        System.out.println("Ini adalah permainan petualangan berbasis teks dengan teka-teki.");
        System.out.println("Ketik 'bantuan' jika Anda membutuhkan bantuan.");
        System.out.println();
        System.out.println(ruanganSaatIni.getDeskripsiSingkat());
        System.out.println(ruanganSaatIni.getDaftarPintuKeluar());
    }

    private boolean prosesPerintah(String perintah) {
        String[] kata = perintah.split(" ");
        String kataPerintah = kata[0];

        switch (kataPerintah) {
            case "pergi":
                if (kata.length < 2) {
                    System.out.println("Pergi ke mana?");
                } else {
                    pergiKeRuangan(kata[1]);
                }
                break;
            case "ambil":
                ambilItem();
                break;
            case "bantuan":
                tampilkanBantuan();
                break;
            case "inventaris":
                tampilkanInventaris();
                break;
            case "keluar":
                return true;
            default:
                System.out.println("Saya tidak mengerti apa yang Anda maksud...");
        }
        return false;
    }

    private void tampilkanBantuan() {
        System.out.println("Perintah yang tersedia:");
        System.out.println("   pergi <arah> ambil inventaris bantuan keluar");
    }

    private void pergiKeRuangan(String arah) {
        Ruangan ruanganBerikutnya = ruanganSaatIni.getPintuKeluar(arah);
   
        if (ruanganBerikutnya == null) {
            System.out.println("Tidak ada pintu di arah tersebut!");
        } else if (ruanganBerikutnya.adaRintangan() && !inventaris.containsKey("kunci")) {
            System.out.println(ruanganBerikutnya.getRintangan());
        } else {
            ruanganSaatIni = ruanganBerikutnya;
            System.out.println(ruanganSaatIni.getDeskripsiSingkat());
            System.out.println(ruanganSaatIni.getDaftarPintuKeluar());
   
            // Tambahkan logika untuk memeriksa kemenangan
            if (ruanganSaatIni.getDeskripsiSingkat().equals("di taman")) {
                System.out.println("Selamat, Anda berhasil menyelesaikan permainan!");
            }
        }
    }
   

    private void ambilItem() {
        Item item = ruanganSaatIni.getItem();
        if (item != null) {
            inventaris.put(item.getNama(), item);
            System.out.println("Anda mengambil: " + item.getDeskripsi());
            ruanganSaatIni.setItem(null);
        } else {
            System.out.println("Tidak ada item di ruangan ini.");
        }
    }

    private void tampilkanInventaris() {
        System.out.println("Inventaris Anda:");
        if (inventaris.isEmpty()) {
            System.out.println("Kosong.");
        } else {
            for (String namaItem : inventaris.keySet()) {
                System.out.println("- " + namaItem);
            }
        }
    }

    public static void main(String[] args) {
        Permainan permainan = new Permainan();
        permainan.mainkan();
    }
}




Contoh Permainan : 























Comments