Nama: Muhammad Risyad Himawan Putra
NRP: 5025231205
Kelas: Pemrograman Berbasis Obyek (G)
World of Zuul in BlueJ
Class Game
Class ini merupakan class utama dalam aplikasi World of Zuul yang bertanggung jawab untuk membuat ruangan, parser, dan runtut game sendiri.
public class Game {
private Parser parser;
private Room currentRoom;
public Game() {
createRooms();
parser = new Parser();
}
private void createRooms() {
Room outside, theater, pub, lab, office;
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");
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;
}
public void play() {
printWelcome();
boolean finished = false;
while (!finished) {
Command command = parser.getCommand();
finished = processCommand(command);
}
System.out.println("Thank you for playing. Good bye.");
}
}
Class Game ini adalah inti dari game World of Zuul. Pada method Game(), beberapa ruangan dbuat dan dihubungkan dengan method createRooms(). Pemain memulai game dari ruangan outside dan dapat berpindah dari satu ruangan ke ruangan lain menggunakan input yang ditangani oleh parser.
Class Command
Class ini menyimpan informasi tentang command yang diberikan oleh pemain. Perintah terdiri dari dua kata.
public class Command {
private String commandWord;
private String secondWord;
public Command(String firstWord, String secondWord) {
commandWord = firstWord;
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);
}
}
Class Command bertugas untuk menyimpan command-command yang dimasukkan oleh pemain. Perintah ini terdiri dari dua kata. Jika kata pertama tidak dikenali, maka command dianggap unknown.
Class Parser
Class Parser bertugas untuk membaca input dari pemain dan mencocokkan input tersebut dengan command yang valid dalam game.
public class Parser {
private CommandWords commands;
private Scanner reader;
public Parser() {
commands = new CommandWords();
reader = new Scanner(System.in);
}
public Command getCommand() {
String inputLine;
String word1 = null;
String word2 = null;
System.out.print("> ");
inputLine = reader.nextLine();
Scanner tokenizer = new Scanner(inputLine);
if (tokenizer.hasNext()) {
word1 = tokenizer.next();
if (tokenizer.hasNext()) {
word2 = tokenizer.next();
}
}
if (commands.isCommand(word1)) {
return new Command(word1, word2);
} else {
return new Command(null, word2);
}
}
}
Parser membaca input dari pemain melalui terminal. Setelah membaca input, ia akan memisahkan dua input dan digunakan sebagai perintah. Jika kata pertama valid, perintah dikirimkan sebagai instance Command; jika tidak, Parser menghasilkan command unknown.
Class Room
Class Room memberi direksi dalam game. Setiap ruangan terhubung ke ruangan lain melalui empat arah yaitu utara, selatan, timur, dan barat.
public class Room {
public String description;
public Room northExit;
public Room southExit;
public Room eastExit;
public Room westExit;
public Room(String description) {
this.description = description;
}
public void setExits(Room north, Room east, Room south, Room west) {
if (north != null) northExit = north;
if (east != null) eastExit = east;
if (south != null) southExit = south;
if (west != null) westExit = west;
}
public String getDescription() {
return description;
}
}
Class Room digunakan untuk memberi arah dalam game. Ruangan ini dapat terhubung dengan ruangan lain melalui empat arah. Pemain dapat berpindah ruangan dengan menggunakan command yang valid.
Class CommandWords
Class ini mengecek kata perintah yang valid dalam game. Setiap perintah yang diberikan pemain akan dicocokkan dengan daftar ini.
public class CommandWords {
private static final String[] validCommands = {
"go", "quit", "help"
};
public boolean isCommand(String aString) {
for (int i = 0; i < validCommands.length; i++) {
if (validCommands[i].equals(aString)) {
return true;
}
}
return false;
}
}
CommandWords menyimpan daftar command/perintah yang valid dalam game. Jika perintah yang dimasukkan pemain valid dengan salah satu command yang ada, maka command tersebut dianggap valid dan diteruskan untuk memberi respons yang tepat.
No comments:
Post a Comment