Nama : Safa Mashita
NRP : 5025241022
Pertemuan 8 - Implementasi World of Zuul
-
Game -
Parser -
Command -
CommandWords -
Room -
Player(opsional tambahan)
Setiap kelas memiliki peran tertentu untuk membentuk dunia permainan yang dinamis dan terstruktur.
A. Visualisasi Hubungan Antar Kelas
Hubungan antar kelas pada World of Zuul dapat dijelaskan sebagai berikut:
Main : Titik awal program. Membuat objek
Gamedan memanggil methodplay()untuk memulai permainan.-
Game : Mengatur jalannya permainan, menampilkan pesan, memproses input, serta menyimpan posisi pemain saat ini (
currentRoom). -
Parser : Membaca input dari pemain dan mengubahnya menjadi objek
Command. -
Command : Menyimpan kata perintah utama (seperti
go,help,quit,look) serta argumen tambahan (misalnya arah tujuan). -
CommandWords : Menyimpan daftar perintah valid dan membantu
Parsermemverifikasi apakah input pemain dikenali oleh sistem. -
Room : Mewakili lokasi dalam dunia permainan yang dapat saling terhubung melalui arah (north, south, east, west).
Pemain menjalankan program
Game.-
Sistem menampilkan sambutan dan menjelaskan cara bermain.
-
Pemain mengetik perintah (misalnya “go east” atau “help”).
-
Parsermembaca input pemain dan membuat objekCommand. -
Gamememproses perintah tersebut:-
Jika perintah valid, pemain akan berpindah ke ruangan yang sesuai.
-
Jika tidak, sistem menampilkan pesan kesalahan.
-
-
Permainan berlanjut hingga pemain mengetik
quituntuk keluar.
Kegunaan:
Merepresentasikan setiap lokasi dalam dunia permainan yang bisa memiliki koneksi (exit) ke ruangan lain.
Atribut:
-
String description: deskripsi ruangan. -
Room northExit, southExit, eastExit, westExit: referensi ke ruangan lain berdasarkan arah.
Method:
-
Room(String description): konstruktor untuk membuat ruangan dengan deskripsi tertentu. -
setExits(Room north, Room east, Room south, Room west): menentukan ruangan yang terhubung dari ruangan saat ini. -
getDescription(): mengembalikan deskripsi ruangan. -
getExit(String direction): mengembalikan ruangan tujuan berdasarkan arah yang dimasukkan pemain. -
getExitString(): menampilkan daftar arah (exit) yang tersedia dari ruangan saat ini.
Hubungan:
Digunakan oleh kelas Game untuk membangun peta dunia permainan dan menentukan arah perpindahan pemain.
Kegunaan:
Menyimpan hasil input pemain yang sudah diproses, berupa kata perintah dan argumen tambahan.
Atribut:
-
String commandWord: perintah utama (misalnya: go, help, quit, look). -
String secondWord: kata kedua atau argumen tambahan (misalnya: arah tujuan).
Method:
-
Command(String firstWord, String secondWord): konstruktor untuk menyimpan dua kata input. -
isUnknown(): mengembalikan true jika perintah tidak dikenali. -
hasSecondWord(): mengecek apakah pemain memasukkan argumen tambahan. -
getCommandWord(): mengambil kata perintah utama. -
getSecondWord(): mengambil kata kedua (argumen).
Hubungan:
Objek Command dibuat oleh kelas Parser dan digunakan oleh Game untuk menentukan aksi yang akan dijalankan.
3. Class CommandWords
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.print("Your command words are:\n\t");
for (int i = 0; i < validCommands.length; i++) {
System.out.print(validCommands[i]);
if (i < validCommands.length - 1) System.out.print(" ");
}
System.out.println();
}
}
Kegunaan:
Menyimpan daftar semua kata perintah valid yang dikenali oleh sistem.
Atribut:
-
String[] validCommands: array yang berisi daftar perintah yang diperbolehkan (go,quit,help,look).
Method:
-
isCommand(String aString): memeriksa apakah string tertentu merupakan perintah yang valid. -
showAll(): menampilkan semua perintah yang dapat digunakan pemain.
Hubungan:
Digunakan oleh Parser untuk memvalidasi apakah input pemain termasuk perintah yang sah.
4. Class Parser
import java.util.Scanner;
public class Parser {
private CommandWords commands;
private Scanner reader;
public Parser() {
commands = new CommandWords();
reader = new Scanner(System.in);
}
public Command getCommand() {
System.out.print("> ");
String inputLine = reader.nextLine();
String word1 = null, word2 = null;
String[] words = inputLine.split(" ");
if (words.length > 0) word1 = words[0];
if (words.length > 1) word2 = words[1];
if (commands.isCommand(word1)) {
return new Command(word1, word2);
} else {
return new Command(null, word2);
}
}
public void showCommands() {
commands.showAll();
}
}
Kegunaan:
Bertanggung jawab membaca input pemain dari konsol, memecahnya menjadi kata-kata, dan menghasilkan objek Command.
Atribut:
-
CommandWords commands: referensi ke daftar perintah valid. -
Scanner reader: objek untuk membaca input teks dari pemain.
Method:
-
Parser(): konstruktor yang menginisialisasi objekCommandWordsdanScanner. -
getCommand(): membaca satu baris input, memisahkan kata pertama dan kedua, lalu membuat objekCommand. -
showCommands(): menampilkan semua perintah yang valid.
Hubungan:
Dipanggil oleh Game untuk mendapatkan input pemain dalam bentuk objek Command.
5. Class Game
public class Game {
private Parser parser;
private Room currentRoom;
public Game() {
createRooms();
parser = new Parser();
}
private void createRooms() {
Room gate, hallway, lab, office;
gate = new Room("You are standing at the university gate. The air smells like coffee and deadlines.");
hallway = new Room("You are in the main hallway. Posters of past tech fairs line the walls.");
lab = new Room("You enter the computer lab. The monitors glow silently in the dark.");
office = new Room("You step into the admin office. Papers and cables are everywhere — chaos reigns.");
// set exits
gate.setExits(null, hallway, lab, null);
hallway.setExits(null, null, null, gate);
lab.setExits(gate, office, null, null);
office.setExits(null, null, null, lab);
currentRoom = gate;
}
public void play() {
printIntro();
boolean finished = false;
while (!finished) {
System.out.println("\n" + currentRoom.getDescription());
System.out.println(currentRoom.getExitString());
Command command = parser.getCommand();
finished = processCommand(command);
}
System.out.println("Thanks for playing World of Zuul. See you, adventurer!");
}
private void printIntro() {
System.out.println("Welcome to World of Zuul!");
System.out.println("A thrilling (and slightly buggy) text adventure by Safa.");
System.out.println("Type 'help' if you get lost.\n");
}
private boolean processCommand(Command command) {
if (command.isUnknown()) {
System.out.println("I’m not sure what you mean...");
return false;
}
String commandWord = command.getCommandWord();
switch (commandWord) {
case "help": printHelp(); break;
case "go": goRoom(command); break;
case "quit": return true;
}
return false;
}
private void printHelp() {
System.out.println("You're wandering through campus in search of your lost laptop.");
System.out.println("Explore each room carefully!\n");
parser.showCommands();
}
private void goRoom(Command command) {
if (!command.hasSecondWord()) {
System.out.println("Go where?");
return;
}
Room nextRoom = currentRoom.getExit(command.getSecondWord());
if (nextRoom == null) {
System.out.println("You bump into a wall. No path that way!");
} else {
currentRoom = nextRoom;
}
}
}
Kegunaan:
Menjadi pengendali utama permainan. Mengatur ruangan, membaca input, memproses perintah, dan menampilkan hasil ke pemain.
Atribut:
-
Parser parser: untuk membaca dan memproses input pemain. -
Room currentRoom: menyimpan posisi pemain saat ini.
Method:
-
Game(): konstruktor yang memanggilcreateRooms()untuk membuat peta permainan dan menyiapkan parser. -
createRooms(): membuat objekRoomdan mengatur koneksi antar ruangan. -
play(): menjalankan loop utama permainan hingga pemain keluar. -
printHelp(): menampilkan daftar perintah yang bisa digunakan. -
goRoom(Command command): menangani perintahgodan memindahkan pemain ke ruangan yang sesuai.
Hubungan:
Merupakan pusat dari semua kelas. Menggunakan Parser, Command, dan Room untuk menjalankan seluruh mekanisme permainan.
6. Class Main
public class Main {
public static void main(String[] args) {
Game game = new Game();
game.play();
}
}
Kegunaan:
Sebagai titik awal eksekusi program. Menjalankan permainan dengan membuat objek Game dan memanggil play().
Atribut:
(Tidak memiliki atribut khusus.)
Method:
-
main(String[] args)– method utama yang dijalankan oleh Java. Membuat objekGamedan memulai permainan.
Hubungan:
Menjadi pintu masuk program dan berhubungan langsung dengan kelas Game untuk menjalankan logika utama.
Dari latihan kali ini saya memahami bagaimana:
-
Menggunakan konsep OOP untuk membangun dunia permainan berbasis teks.
-
Memisahkan tanggung jawab antar kelas agar kode mudah dipelihara.
-
Menghubungkan antar ruangan menggunakan konsep reference antar objek.
-
Memproses input pemain secara dinamis menggunakan kelas
ParserdanCommand.
Struktur World of Zuul ini bisa dikembangkan menjadi game petualangan yang lebih kompleks, seperti menambahkan item, musuh, puzzle, atau skor pemain.
Tidak ada komentar:
Posting Komentar