TUGAS PBO-C Pertemuan-6: World of Zuul
TUGAS PBO-C Pertemuan-6 : World of Zuul
Pada pertemuan keenam kelas PBO-C, saya diberi tugas untuk membuat Program World of Zuul dengan menggunakan Blue-J. World of Zuul itu tersendiri yaitu mengimplementasikan prinsip-prinsip dalam membuat program yaitu loose coupling dan high cohesion.
1. Source code Command Class :
public class Command
{
private String commandWord;
private String secondWord;
public Command(String firstWord, String secondWord)
{
commandWord = firstWord;
this.secondWord = secondWord;
}
/**
* Return the command word (the first word) of this command. If the
* command was not understood, the result is null.
* @return String commandWord
*/
public String getCommandWord()
{
return commandWord;
}
/**
* Return the second word of this command. Returns null if there was no
* second word.
* @return String secondWord
*/
public String getSecondWord()
{
return secondWord;
}
/**
* Return true if this command was not understood.
* @return bool
*/
public boolean isUnknown()
{
return (commandWord == null);
}
/**
* Return true if the command has a second word.
* @return bool
*/
public boolean hasSecondWord()
{
return (secondWord != null);
}
}
2. Source code WordsCommand Class :
public class CommandWords
{
// a constant array that holds all valid command words
private static final String[] validCommands = {
"go", "quit", "help", "look"
};
/**
* Constructor - initialise the command words.
*/
public CommandWords()
{
// nothing to do at the moment...
}
/**
* Check whether a given String is a valid command word.
* Return true if it is, false if it isn't.
* @return bool
*/
public boolean isCommand(String aString)
{
for(int i = 0; i < validCommands.length; i++) {
if(validCommands[i].equals(aString))
return true;
}
//if we get here, the string was not found in the commands
return false;
}
}
3. Source code Game Class :
public class Game
{
private Parser parser;
private Room currentRoom;
/**
* Create the game and initialise its internal map
*/
public Game()
{
createRooms();
parser = new Parser();
}
/**
* Create all the rooms and link their exits together.
*/
private void createRooms()
{
Room outside, theater, pub, lab, office;
// Create the rooms
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");
// initialise room exits
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; // start game outside
}
/**
* Main play routine. Berulang hingga selesai permainan.
*/
public void play()
{
printWelcome();
// enter the main command loop. Here we repeatedlu read commands and
// execute the until the game is over.
boolean finished = false;
while (! finished) {
Command command = parser.getCommand();
finished = processCommand(command);
}
System.out.println("Thank you for playing. Good bye.");
}
/**
* Print out the opening message for the player.
*/
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();
}
/**
* Given a command, process (that is : execute) the command.
* If this command ends the game, true is returned, otherwise false is
* returned.
* @param command
* @return bool
*/
private boolean processCommand(Command command)
{
boolean wantToQuit = false;
if(command.isUnknown()) {
System.out.println("I don't understand...");
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 of user commands:
/**
* Print out some help information.
* Here we print some stupid, cryptic message and ad list of the
* command words
*/
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");
}
/**
* Try to go to one direction. If there is an exit, enter
* the new room, otherwise print an error message.
*/
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" was entered. Check the rest of the command to see
* whether we really quit the game. Return true, if this command
* quits the game, false otherwise.
*
* @return bool
*/
private boolean quit(Command command)
{
if(command.hasSecondWord()) {
System.out.println("Quit what?");
return false;
}
else {
return true; // signal that we want to quit
}
}
}
4. Source code Room Class :
public class Room
{
public String description;
public Room northExit;
public Room southExit;
public Room eastExit;
public Room westExit;
/**
* Create a room described "description". Initially, it has
* no exits. "description" is something like "a kitchen" or
*"an open court yard".
*
* @param String description
*/
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;
}
}
5. Source code Parser Class :
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.lang.String;
public class Parser
{
private CommandWords commands; // holds all valid command words
public Parser()
{
commands = new CommandWords();
}
public Command getCommand()
{
String inputLine = ""; // will hold the full input line
String word1;
String word2;
System.out.print("> "); // print prompt
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(); // get the first word
else
word1=null;
if(tokenizer.hasMoreTokens())
word2 = tokenizer.nextToken(); // get the second word
else
word2=null;
if(commands.isCommand(word1))
return new Command(word1, word2);
else
return new Command(null, word2);
}
}
Hasil Programmnya :
Sekian tugas pbo pertemuan ke-6 saya, mohon maaf jika ada kesalahan kata, sekian terima kasih.
Komentar
Posting Komentar