Implementasi World Of Zuul

Nama : Azka Rizqullah Ramadhani

NRP: 5025231148

Kelas: Pemrograman Berbasis Object (A)


1. Class Command

Class Command merepresentasikan perintah yang dimasukkan oleh pemain. Setiap perintah terdiri dari kata utama (misalnya go, quit) dan kata kedua (misalnya north, east).

Penjelasan Tugas:

  • Menyimpan kata perintah (command word) dan kata kedua (second word) yang diberikan oleh pemain.
  • Memastikan apakah kata perintah dikenal atau tidak.
  • Mengecek apakah perintah memiliki kata kedua.

Method:

  • Command(String commandWord, String secondWord): Konstruktor untuk menginisialisasi objek Command.
  • isUnknown(): Mengembalikan true jika kata perintah tidak dikenal.
  • hasSecondWord(): Mengembalikan true jika terdapat kata kedua pada perintah.
Hubungan dengan Kelas Lain: Kelas ini digunakan oleh Parser untuk memproses input pemain dan oleh Game untuk menjalankan logika berdasarkan perintah.

public class Command {
private String commandWord;
private String secondWord;

public Command(String commandWord, String secondWord) {
this.commandWord = commandWord;
this.secondWord = secondWord;
}

public String getCommandWord() {
return commandWord;
}

public String getSecondWord() {
return secondWord;
}

public boolean isUnknown() {
return commandWord == null;
}

public boolean hasSecondWord() {
return secondWord != null;
}
}

2. Class CommandWords

Class ini akan menyimpan daftar perintah yang valid dalam permainan, seperti go, quit, dan help.

Penjelasan Tugas:

  • Memverifikasi apakah sebuah kata termasuk dalam daftar perintah yang valid.
  • Menampilkan semua kata perintah yang valid.

Method:

  • isCommand(String aString): Mengembalikan true jika kata termasuk dalam daftar perintah yang valid.
  • showAll(): Menampilkan daftar semua perintah yang valid ke konsol.
  • Hubungan dengan Kelas Lain: Kelas ini digunakan oleh Parser untuk memvalidasi kata perintah yang dimasukkan pemain.

public class CommandWords {
private static final String[] validCommands = { "go", "quit", "help" };

public boolean isCommand(String aString) {
for (String command : validCommands) {
if (command.equals(aString)) {
return true;
}
}
return false;
}

public void showAll() {
System.out.println("Valid commands are:");
for (String command : validCommands) {
System.out.print(command + " ");
}
System.out.println();
}
}


3. Class Parser

Class Ini akan Membaca input dari pemain, memecahnya menjadi kata-kata, dan membuat objek Command

Penjelasan Tugas:
  • Membaca input pemain dari terminal.
  • Memisahkan input menjadi kata perintah (command word) dan kata kedua (second word).
  • Mengembalikan objek Command berdasarkan input pemain.
Method:
  • getCommand(): Membaca input dari pemain, memprosesnya, dan mengembalikan objek Command.
  • showCommands(): Menampilkan daftar perintah yang valid dengan bantuan kelas CommandWords.
  • Hubungan dengan Kelas Lain: Kelas ini digunakan oleh Game untuk menerima dan memproses perintah dari pemain.
import java.util.Scanner;

public class Parser {
private CommandWords commandWords;
private Scanner scanner;

public Parser() {
commandWords = new CommandWords();
scanner = new Scanner(System.in);
}

public Command getCommand() {
System.out.print("> ");
String inputLine = scanner.nextLine();
String[] words = inputLine.split(" ", 2);
String commandWord = (words.length > 0) ? words[0] : null;
String secondWord = (words.length > 1) ? words[1] : null;

if (commandWords.isCommand(commandWord)) {
return new Command(commandWord, secondWord);
} else {
return new Command(null, secondWord);
}
}

public void showCommands() {
commandWords.showAll();
}
}

4. Class Room

Class ini akan merepresentasikan ruangan dalam game dengan deskripsi dan pintu keluar (exits) ke ruangan lain.

Penjelasan Tugas:

  • Menyimpan deskripsi ruangan.
  • Menyimpan informasi tentang pintu keluar (arah dan ruangan tetangga).
  • Mengembalikan ruangan yang menjadi tujuan berdasarkan arah yang diberikan.

Metode Utama:

  • setExit(String direction, Room neighbor): Menghubungkan ruangan dengan ruangan lain berdasarkan arah tertentu.
  • getExit(String direction): Mengembalikan ruangan tetangga berdasarkan arah yang diberikan.
  • getExitString(): Mengembalikan daftar arah keluar dari ruangan saat ini.
  • getDescription(): Mengembalikan deskripsi ruangan.

Hubungan dengan Kelas Lain: Kelas ini digunakan oleh Game untuk mengatur dan menjelajahi ruangan dalam permainan.

import java.util.HashMap;

public class Room {
private String description;
private HashMap<String, Room> exits;

public Room(String description) {
this.description = description;
exits = new HashMap<>();
}

public void setExit(String direction, Room neighbor) {
exits.put(direction, neighbor);
}

public Room getExit(String direction) {
return exits.get(direction);
}

public String getDescription() {
return description;
}

public String getExitString() {
StringBuilder exitString = new StringBuilder("Exits: ");
for (String direction : exits.keySet()) {
exitString.append(direction).append(" ");
}
return exitString.toString();
}
}


5. Class Game

Ini adalah class utama yang mengatur alur permainan, termasuk logika utama, interaksi dengan pemain, dan pengelolaan ruangan.

Penjelasan Tugas:

  • Membuat dan menghubungkan ruangan dalam permainan.
  • Menerima perintah dari pemain dan menjalankan logika berdasarkan perintah tersebut.
  • Mengatur pemain untuk berpindah dari satu ruangan ke ruangan lain.
  • Menyediakan opsi bantuan dan fitur keluar dari permainan.

Metode Utama:

  • setupRooms(): Menginisialisasi ruangan dan pintu keluar.
  • play(): Memulai permainan dan mengatur loop utama permainan.
  • processCommand(Command command): Memproses input pemain dan menjalankan aksi berdasarkan perintah.
  • goRoom(Command command): Mengatur perpindahan pemain ke ruangan lain.
  • printWelcome(): Menampilkan pesan sambutan kepada pemain.
  • printRoomDetails(): Menampilkan detail ruangan saat ini.
  • quit(Command command): Mengatur logika untuk keluar dari permainan.

Hubungan dengan Kelas Lain: Kelas ini adalah pusat dari permainan dan menggunakan semua kelas lain (Room, Command, CommandWords, dan Parser) untuk mengatur permainan.

public class Game {
private Parser parser;
private Room currentRoom;

public Game() {
setupRooms();
parser = new Parser();
}

private void setupRooms() {
Room outside = new Room("outside the main entrance of the university");
Room theater = new Room("in a lecture theater");
Room pub = new Room("in the campus pub");
Room lab = new Room("in a computing lab");
Room office = new Room("in the office");

outside.setExit("east", theater);
outside.setExit("south", lab);
outside.setExit("west", pub);

theater.setExit("west", outside);
pub.setExit("east", outside);
lab.setExit("north", outside);
lab.setExit("east", office);
office.setExit("west", lab);

currentRoom = outside;
}

public void play() {
printWelcome();

boolean finished = false;
while (!finished) {
Command command = parser.getCommand();
finished = processCommand(command);
}
System.out.println("Thank you for playing. Goodbye!");
}

private void printWelcome() {
System.out.println("Welcome to the World of Zuul!");
System.out.println("World of Zuul is a simple adventure game.");
System.out.println("Type 'help' if you need help.");
System.out.println();
printRoomDetails();
}

private void printRoomDetails() {
System.out.println("You are " + currentRoom.getDescription());
System.out.println(currentRoom.getExitString());
}

private boolean processCommand(Command command) {
String commandWord = command.getCommandWord();

if (commandWord == null) {
System.out.println("I don't understand that command...");
return false;
}

switch (commandWord) {
case "help":
printHelp();
break;
case "go":
goRoom(command);
break;
case "quit":
return quit(command);
default:
System.out.println("I don't understand that command...");
}
return false;
}

private void printHelp() {
System.out.println("You are lost. You are alone. You wander around at the university.");
parser.showCommands();
}

private void goRoom(Command command) {
if (!command.hasSecondWord()) {
System.out.println("Go where?");
return;
}

String direction = command.getSecondWord();
Room nextRoom = currentRoom.getExit(direction);

if (nextRoom == null) {
System.out.println("There is no door!");
} else {
currentRoom = nextRoom;
printRoomDetails();
}
}

private boolean quit(Command command) {
if (command.hasSecondWord()) {
System.out.println("Quit what?");
return false;
}
return true;
}

public static void main(String[] args) {
Game game = new Game();
game.play();
}
}


Hasil:


Github


Komentar

Postingan populer dari blog ini

Implementasi Support System

Implementasi Unit Test

Tugas Ticket Machine