/**
* Kelas ini adalah kelas utama dari aplikasi "Dunia Zuul".
* "World of Zuul" adalah game petualangan berbasis teks yang sangat sederhana. Pengguna
* Bisa berjalan di sekitar pemandangan. Itu saja. Ini benar-benar harus diperpanjang
* agar lebih menarik!
*
* Untuk memainkan game ini, buat instance dari kelas ini dan panggil "play"
* metode.
*
* Kelas utama ini membuat dan menginisialisasi semua yang lain: itu menciptakan semua
* ruangan, membuat parser dan memulai permainan. Itu juga mengevaluasi dan
* menjalankan perintah yang dikembalikan parser.
*
* @author Ricky Supriyanto
* @version 1.0 (November 2020)
*/
class Game
{
private Parser parser;
private Room currentRoom;
/**
* Buat game dan inisialisasi peta internalnya.
*/
public Game()
{
createRooms();
parser = new Parser();
}
/**
* Buat semua room dan hubungkan room exit nya.
*/
private void createRooms()
{
Room outside, theatre, pub, lab, office;
// Buat room
outside = new Room("outside the main entrance of the university");
theatre = new Room("in a lecture theatre");
pub = new Room("in the campus pub");
lab = new Room("in a computing lab");
office = new Room("in the computing admin office");
// inisialisasi room exits
outside.setExits(null, theatre, lab, pub);
theatre.setExits(null, null, null, outside);
pub.setExits(null, outside, null, null);
lab.setExits(outside, office, null, null);
office.setExits(null, null, null, lab);
currentRoom = outside; // start game outside
}
/**
* Main play routine. Ulangi sampai akhir permainan.
*/
public void play()
{
printWelcome();
// Masuk ke loop perintah utama. Di sini kami berulang kali membaca perintah dan
// jalankan sampai permainan selesai.
boolean finished = false;
while (! finished) {
Command command = parser.getCommand();
finished = processCommand(command);
}
System.out.println("Thank you for playing. Good bye.");
}
/**
* Cetak pesan pembuka untuk pemain tersebut.
*/
private void printWelcome()
{
System.out.println();
System.out.println("Welcome to Adventure!");
System.out.println("Adventure is a new, incredibly boring adventure game.");
System.out.println("Type \'help\' if you need help.");
System.out.println();
System.out.println("You are " + currentRoom.getDescription());
System.out.print("Exits: ");
if(currentRoom.northExit != null)
System.out.print("north ");
if(currentRoom.eastExit != null)
System.out.print("east ");
if(currentRoom.southExit != null)
System.out.print("south ");
if(currentRoom.westExit != null)
System.out.print("west ");
System.out.println();
}
/**
* Diberikan perintah, proses (yaitu: mengeksekusi) perintah.
* Jika perintah ini mengakhiri permainan, true dikembalikan, jika tidak false adalah
* kembali.
*/
private boolean processCommand(Command command)
{
boolean wantToQuit = false;
if(command.isUnknown()) {
System.out.println("I don\'t know what you mean...");
return false;
}
String commandWord = command.getCommandWord();
if (commandWord.equals("help"))
printHelp();
else if (commandWord.equals("go"))
goRoom(command);
else if (commandWord.equals("quit"))
wantToQuit = quit(command);
return wantToQuit;
}
// implementations of user commands:
/**
* Cetak beberapa informasi bantuan.
* Di sini kami mencetak beberapa pesan yang bodoh dan samar serta daftar
* kata perintah.
*/
private void printHelp()
{
System.out.println("You are lost. You are alone. You wander");
System.out.println("around at the university.");
System.out.println();
System.out.println("Your command words are:");
System.out.println(" go quit help");
}
/**
* Cobalah untuk pergi ke satu arah. Jika ada jalan keluar, masuk
* ruang baru, jika tidak cetak pesan kesalahan.
*/
private void goRoom(Command command)
{
if(!command.hasSecondWord()) {
// if there is no second word, we don\'t know where to go...
System.out.println("Go where?");
return;
}
String direction = command.getSecondWord();
// Try to leave current room.
Room nextRoom = null;
if(direction.equals("north"))
nextRoom = currentRoom.northExit;
if(direction.equals("east"))
nextRoom = currentRoom.eastExit;
if(direction.equals("south"))
nextRoom = currentRoom.southExit;
if(direction.equals("west"))
nextRoom = currentRoom.westExit;
if (nextRoom == null)
System.out.println("There is no door!");
else {
currentRoom = nextRoom;
System.out.println("You are " +
currentRoom.getDescription());
System.out.print("Exits: ");
if(currentRoom.northExit != null)
System.out.print("north ");
if(currentRoom.eastExit != null)
System.out.print("east ");
if(currentRoom.southExit != null)
System.out.print("south ");
if(currentRoom.westExit != null)
System.out.print("west ");
System.out.println();
}
}
/**
* "Quit" telah dimasukkan. Periksa sisa perintah untuk melihat
* apakah kita benar-benar keluar dari permainan. Kembalikan true, jika perintah ini
* keluar dari permainan, salah jika tidak.
*/
private boolean quit(Command command)
{
if(command.hasSecondWord()) {
System.out.println("Quit what?");
return false;
}
else
return true; // signal that we want to quit
}
}