Pada laporan ini saya telah berhasil mengimplementasikan game World of Zuul. Aplikasi menjadi modul-modul yang kecil untuk memastikan bahwa modul yang dirancang menganut prinsip
"Loose Coupling, High Cohesion".
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 CommandWords {
private static final String validCommands[] = {
"go", "quit", "help", "look"
};
public CommandWords() {
}
public boolean isCommand(String aString) {
for (int i = 0; i < validCommands.length; i++) {
if (validCommands[i].equals(aString))
return true;
}
return false;
}
}
class Game {
private Parser parser;
private Room currentRoom;
public Game() {
createRooms();
parser = new Parser();
}
private void createRooms() {
Room outside, theatre, pub, lab, office;
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");
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;
}
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.");
}
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();
}
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;
}
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");
}
private void goRoom(Command command) {
if (!command.hasSecondWord()) {
System.out.println("Go where?");
return;
}
String direction = command.getSecondWord();
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();
}
}
private boolean quit(Command command) {
if (command.hasSecondWord()) {
System.out.println("Quit what?");
return false;
} else
return true;
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class Parser {
private CommandWords commands;
public Parser() {
commands = new CommandWords();
}
public Command getCommand() {
String inputLine = "";
String word1;
String word2;
System.out.print("> ");
BufferedReader reader =
new BufferedReader(new InputStreamReader(System.in));
try {
inputLine = reader.readLine();
} catch (java.io.IOException exc) {
System.out.println("There was an error during reading: "
+ exc.getMessage());
}
StringTokenizer tokenizer = new StringTokenizer(inputLine);
if (tokenizer.hasMoreTokens())
word1 = tokenizer.nextToken();
else
word1 = null;
if (tokenizer.hasMoreTokens())
word2 = tokenizer.nextToken();
else
word2 = null;
if (commands.isCommand(word1))
return new Command(word1, word2);
else
return new Command(null, word2);
}
}
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;
}
}