Tugas Pertemuan 8 PBO
Nama : Moh. Rizky Rahmadian Makkani
NRP : 5025231035
Kelas : PBO A
Tugas Pertemuan 8 : PBO
Code Game.java
public class Game
{
private Parser parser;
private Room currentRoom;
/**
* Membuat game dan menginisialisasi map internal.
*/
public Game()
{
createRooms();
parser = new Parser();
}
/**
* Membuat semua room dan menghubungkan pintu keluar mereka.
*/
private void createRooms()
{
Room outside, theater, pub, lab, office;
// Membuat semua room
outside = new Room("outside the main entrance of the university");
theater = new Room("in a lecture theater");
pub = new Room("in the campus pub");
lab = new Room("in a computing lab");
office = new Room("in the computing admin office");
// inisialisasi jalan keluar dari room
outside.setExits(null, theater, lab, pub);
theater.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; // memulai game dari luar(outside)
}
/**
* Main play routine. Berulang hingga selesai permainan.
*/
public void play()
{
printWelcome();
// masuk ke main command loop. Disini kita berulang kali membaca perintah dan
// menjalankannya sampai permainan selesai.
boolean finished = false;
while (! finished) {
Command command = parser.getCommand();
finished = processCommand(command);
}
System.out.println("Thank you for playing. Good bye.");
}
/**
* Mencetak pesan selamat datang untuk pemain.
*/
private void printWelcome()
{
System.out.println();
System.out.println("Welcome to the World of Zuul!");
System.out.println("World of Zuul 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: menjalankan) perintah.
* @param command sebagai Perintah yang akan diproses.
* @return true Jika perintah menyelesaikan game, false jika tidak.
*/
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;
}
// Implementasi dari perintah pemain:
/**
* mencetak informasi help.
* Di sini kami mencetak beberapa pesan bodoh dan tersembunyi serta
* daftar kata command
*/
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 ke room baru, jika tidak cetak pesan error.
*/
private void goRoom(Command command)
{
if(!command.hasSecondWord()) {
// jika tidak ada second word, kita tidak kemana-mana...
System.out.println("Go where?");
return;
}
String direction = command.getSecondWord();
// Coba meninggalkan room sekarang.
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" dimasukkan. Cek sisa command untuk melihat
* apakah kita benar-benar keluar dari permainan.
* @return true, jika perintah ini untuk keluar dari game, false jika tidak.
*/
private boolean quit(Command command)
{
if(command.hasSecondWord()) {
System.out.println("Quit what?");
return false;
}
else {
return true; // sinyal bahwa kita mau quit
}
}
}
Code Commnad.java
public class Command
{
private String commandWord;
private String secondWord;
/**
* membuat objek command. Kata pertama dan kedua harus dimasukkan, tapi
* salah satu (atau keduanya) bisa null.
* @param firstWord kata pertama dari command. Null jika command
* tidak dikenal.
* @param secondWord kata kedua dari command.
*/
public Command(String firstWord, String secondWord)
{
commandWord = firstWord;
this.secondWord = secondWord;
}
/**
* Return kata command (kata pertama) dari command. If comand
* tidak mengerti, hasilnya null.
* @return kata command .
*/
public String getCommandWord()
{
return commandWord;
}
/**
* @return kata kedua dari command. Returns null jika
* tidak ada kata kedua.
*/
public String getSecondWord()
{
return secondWord;
}
/**
* @return true jika command ini tidak dimengerti.
*/
public boolean isUnknown()
{
return (commandWord == null);
}
/**
* @return true jika command punya kata kedua.
*/
public boolean hasSecondWord()
{
return (secondWord != null);
}
}
Code Parser.java :
import java.util.Scanner;
public class Parser
{
private CommandWords commands; // holds all valid command words
private Scanner reader; // source of command input
/**
* Membuat parser untuk membaca terminal.
*/
public Parser()
{
commands = new CommandWords();
reader = new Scanner(System.in);
}
/**
* @return Command berikutnya dari pengguna.
*/
public Command getCommand()
{
String inputLine; // akan menampung baris input
String word1 = null;
String word2 = null;
System.out.print("> "); // print prompt
inputLine = reader.nextLine();
// Find up to two words on the line.
Scanner tokenizer = new Scanner(inputLine);
if(tokenizer.hasNext()) {
word1 = tokenizer.next(); // mendapat kata pertama
if(tokenizer.hasNext()) {
word2 = tokenizer.next(); // mendapat kata kedua
// note: kami hanya mengabaikan sisa baris input.
}
}
// Sekarang periksa apakah kata ini dikenal. Jika demikian, buat command
// dengan itu. Jika tidak, buat command "null" (untuk command yang tidak diketahui).
if(commands.isCommand(word1)) {
return new Command(word1, word2);
}
else {
return new Command(null, word2);
}
}
}
Code CommandWords.java :
public class CommandWords
{
// array konstan yang menampung semua kata command yang valid
private static final String[] validCommands = {
"go", "quit", "help"
};
/**
* Constructor - initialise the command words.
*/
public CommandWords()
{
// tidak ada yang bisa dilakukan saat ini...
}
/**
* Periksa apakah String yang diberikan adalah kata command yang valid
* @return true jika diberikan command yang valid ,
* false jika tidak.
*/
public boolean isCommand(String aString)
{
for(int i = 0; i < validCommands.length; i++) {
if(validCommands[i].equals(aString))
return true;
}
// jika kita sampai di sini, string itu tidak ditemukan di commands
return false;
}
}
Output :
Komentar
Posting Komentar