SlideShare a Scribd company logo
2
Most read
1 / 7
zuul-bad
/**
* This class is the main class of the "World of Zuul"
application.
* "World of Zuul" is a very simple, text based
adventure game.
*
* This class holds information about a command that
was issued by the user.
* A command currently consists of two strings: a
command word and a second
* word (for example, if the command was "take map",
then the two strings
* obviously are "take" and "map").
*
* The way this is used is: Commands are already
checked for being valid
* command words. If the user entered an invalid
command (a word that is not
* known) then the command word is <null>.
*
* If the command had only one word, then the second
word is <null>.
*
* @author Michael Kolling and David J. Barnes
* @version 1.0 (February 2002)
*/
class Command
{
private String commandWord;
private String secondWord;
/**
* Create a command object. First and second word
must be supplied, but
* either one (or both) can be null. The command
word should be null to
* indicate that this was a command that is not
recognised by this game.
*/
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.
*/
public String getCommandWord()
{
return commandWord;
}
/**
* Return the second word of this command. Returns
null if there was no
* second word.
*/
public String getSecondWord()
{
return secondWord;
}
/**
* Return true if this command was not understood.
*/
public boolean isUnknown()
{
return (commandWord == null);
}
/**
* Return true if the command has a second word.
*/
public boolean hasSecondWord()
{
return (secondWord != null);
}
}
2 / 7
/*
* This class is the main class of the "World of Zuul"
application.
* "World of Zuul" is a very simple, text based
adventure game.
*
* This class holds an enumeration of all command words
known to the game.
* It is used to recognise commands as they are typed
in.
*
* @author Michael Kolling and David J. Barnes
* @version 1.0 (February 2002)
*/
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.
*/
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 / 7
/**
* This class is the main class of the "World of Zuul"
application.
* "World of Zuul" is a very simple, text based
adventure game. Users
* can walk around some scenery. That's all. It should
really be extended
* to make it more interesting!
*
* To play this game, create an instance of this class
and call the "play"
* method.
*
* This main class creates and initialises all the
others: it creates all
* rooms, creates the parser and starts the game. It
also evaluates and
* executes the commands that the parser returns.
*
* @author Michael Kolling and David J. Barnes
* @version 1.0 (February 2002)
*/
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, theatre, pub, lab, office;
// create the rooms
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");
// initialise 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. Loops until end of play.
*/
public void play()
{
printWelcome();
// Enter the main command loop. Here we
repeatedly read commands and
// execute them 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();
4 / 7
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();
}
/**
* Given a command, process (that is: execute) the
command.
* If this command ends the game, true is returned,
otherwise false is
* returned.
*/
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:
/**
* Print out some help information.
* Here we print some stupid, cryptic message and a
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"))
5 / 7
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.
*/
private boolean quit(Command command)
{
if(command.hasSecondWord()) {
System.out.println("Quit what?");
return false;
}
else
return true; // signal that we want to
quit
}
}
6 / 7
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/*
* This class is the main class of the "World of Zuul"
application.
* "World of Zuul" is a very simple, text based
adventure game.
*
* This parser reads user input and tries to interpret
it as an "Adventure"
* command. Every time it is called it reads a line
from the terminal and
* tries to interpret the line as a two word command.
It returns the command
* as an object of class Command.
*
* The parser has a set of known command words. It
checks user input against
* the known commands, and if the input is not one of
the known commands, it
* returns a command object that is marked as an
unknown command.
*
* @author Michael Kolling and David J. Barnes
* @version 1.0 (February 2002)
*/
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
first word
else
word1 = null;
if(tokenizer.hasMoreTokens())
word2 = tokenizer.nextToken(); // get
second word
else
word2 = null;
// note: we just ignore the rest of the input
line.
// Now check whether this word is known. If so,
create a command
// with it. If not, create a "null" command
(for unknown command).
if(commands.isCommand(word1))
return new Command(word1, word2);
else
return new Command(null, word2);
}
}
7 / 7
/*
* Class Room - a room in an adventure game.
*
* This class is the main class of the "World of Zuul"
application.
* "World of Zuul" is a very simple, text based
adventure game.
*
* A "Room" represents one location in the scenery of
the game. It is
* connected to other rooms via exits. The exits are
labelled north,
* east, south, west. For each direction, the room
stores a reference
* to the neighboring room, or null if there is no exit
in that direction.
*
* @author Michael Kolling and David J. Barnes
* @version 1.0 (February 2002)
*/
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".
*/
public Room(String description)
{
this.description = description;
}
/**
* Define the exits of this room. Every direction
either leads
* to another room or is null (no exit there).
*/
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;
}
/**
* Return the description of the room (the one that
was defined
* in the constructor).
*/
public String getDescription()
{
return description;
}
}

More Related Content

PDF
Big Data Day LA 2015 - Mongoose v/s Waterline: Battle of the ORM by Tim Fulme...
PDF
Apache Commons - Don\'t re-invent the wheel
PDF
iOS 2 - The practical Stuff
PPTX
Making Java more dynamic: runtime code generation for the JVM
PDF
運用Closure Compiler 打造高品質的JavaScript
KEY
What's New In Python 2.6
PPTX
Operator overload rr
PPTX
Entity Framework Core: tips and tricks
Big Data Day LA 2015 - Mongoose v/s Waterline: Battle of the ORM by Tim Fulme...
Apache Commons - Don\'t re-invent the wheel
iOS 2 - The practical Stuff
Making Java more dynamic: runtime code generation for the JVM
運用Closure Compiler 打造高品質的JavaScript
What's New In Python 2.6
Operator overload rr
Entity Framework Core: tips and tricks

What's hot (20)

PPTX
The zen of async: Best practices for best performance
PPTX
Clean Code: Chapter 3 Function
PPTX
Code generation for alternative languages
PPTX
Дмитрий Контрерас «Back to the future: the evolution of the Java Type System»
KEY
Djangocon11: Monkeying around at New Relic
PDF
UI testing in Xcode 7
KEY
Clojure Intro
PDF
Sam wd programs
PPTX
Clojure 7-Languages
PDF
The Ring programming language version 1.7 book - Part 35 of 196
PDF
Swift, functional programming, and the future of Objective-C
PDF
Important java programs(collection+file)
PPTX
Introduction to Software Testing
PPTX
Unit Testing with Foq
PDF
Some testing - Everything you should know about testing to go with @pedro_g_s...
PDF
My Favourite 10 Things about Xcode/ObjectiveC
PDF
#codemotion2016: Everything you should know about testing to go with @pedro_g...
PDF
PDF
C# Starter L07-Objects Cloning
The zen of async: Best practices for best performance
Clean Code: Chapter 3 Function
Code generation for alternative languages
Дмитрий Контрерас «Back to the future: the evolution of the Java Type System»
Djangocon11: Monkeying around at New Relic
UI testing in Xcode 7
Clojure Intro
Sam wd programs
Clojure 7-Languages
The Ring programming language version 1.7 book - Part 35 of 196
Swift, functional programming, and the future of Objective-C
Important java programs(collection+file)
Introduction to Software Testing
Unit Testing with Foq
Some testing - Everything you should know about testing to go with @pedro_g_s...
My Favourite 10 Things about Xcode/ObjectiveC
#codemotion2016: Everything you should know about testing to go with @pedro_g...
C# Starter L07-Objects Cloning
Ad

Similar to Chapter06 designing class-zuul bad (20)

DOCX
CS117-S18-AlharbiMohammed-master.gitignore.class.ctxt..docx
DOCX
MIS 4310-01 Final Take Home Exam (100 points) DUE Thursd.docx
PDF
Modified Code Game.java­import java.util.;public class Game.pdf
PDF
Please read the comment ins codeExpressionTree.java-------------.pdf
PDF
I need help completing this C++ code with these requirements.instr.pdf
PPTX
作業系統
PDF
mainpublic class AssignmentThree {    public static void ma.pdf
PDF
Frequency .java Word frequency counter package frequ.pdf
PDF
Lombok Features
PPTX
KOLEJ KOMUNITI - Sijil Aplikasi Perisian Komputer
PDF
Kotlin Bytecode Generation and Runtime Performance
PDF
Functional Programming You Already Know
DOCX
PPSX
Writing code that writes code - Nguyen Luong
PPSX
TechkTalk #12 Grokking: Writing code that writes code – Nguyen Luong
PPTX
Java SE 17 Study Guide for Certification - Chapter 01
PDF
package singlylinkedlist; public class Node { public String valu.pdf
PPTX
Lies Told By The Kotlin Compiler
PPT
Internet programming slide - java.ppt
DOCX
Latihan Java menggunakan Bluej-SUPPORT SYSTEM.docx
CS117-S18-AlharbiMohammed-master.gitignore.class.ctxt..docx
MIS 4310-01 Final Take Home Exam (100 points) DUE Thursd.docx
Modified Code Game.java­import java.util.;public class Game.pdf
Please read the comment ins codeExpressionTree.java-------------.pdf
I need help completing this C++ code with these requirements.instr.pdf
作業系統
mainpublic class AssignmentThree {    public static void ma.pdf
Frequency .java Word frequency counter package frequ.pdf
Lombok Features
KOLEJ KOMUNITI - Sijil Aplikasi Perisian Komputer
Kotlin Bytecode Generation and Runtime Performance
Functional Programming You Already Know
Writing code that writes code - Nguyen Luong
TechkTalk #12 Grokking: Writing code that writes code – Nguyen Luong
Java SE 17 Study Guide for Certification - Chapter 01
package singlylinkedlist; public class Node { public String valu.pdf
Lies Told By The Kotlin Compiler
Internet programming slide - java.ppt
Latihan Java menggunakan Bluej-SUPPORT SYSTEM.docx
Ad

More from Fajar Baskoro (20)

PPTX
Pengembangan Basis Data untuk Web Application.pptx
PPTX
Presentasi untuk video Pitch Deck Vlog Pervekt SMK 2025.pptx
PPTX
Sosialisasi Program Digital Skills Unicef 2025.pptx
PDF
DIGITAL SKILLS PROGRAMME 2025 - VERSI HZ.pdf
PDF
Digital Skills - 2025 - Dinas - Green Marketplace.pdf
PDF
Pemrograman Mobile menggunakan kotlin2.pdf
PPTX
Membangun Kewirausahan Sosial Program Double Track.pptx
PPTX
Membangun Kemandirian DTMandiri-2025.pptx
PDF
Panduan Entry Nilai Rapor untuk Operator SD_MI 2025.pptx (1).pdf
PDF
JADWAL SISTEM PENERIMAAN MURID BARU 2025.pdf
PPTX
Seleksi Penerimaan Murid Baru 2025.pptx
PPTX
Pengembangan Program Dual Track 2025-2.pptx
PPTX
Pengembangan Program Dual Track 2025-1.pptx
PDF
PETUNJUK PELAKSANAAN TEKNIS FESV RAMADHAN 2025.pdf
PPTX
Pengembangan Entrepreneur Vokasi Melalui PERFECT SMK-Society 50 .pptx
PPTX
PERFECT SMK 6 - Strategi Pelaksanaan.pptx
PPTX
Program Dual Track Kalimantan Timur 2025.pptx
PDF
Contoh Proposal konveksi untuk Program Magang Kewirausahaan.pdf
PPTX
Pengembangan Program Digital Skills - 2025.pptx
PPTX
PPT-Proyek Magang Kewirausahaan Double Track.pptx
Pengembangan Basis Data untuk Web Application.pptx
Presentasi untuk video Pitch Deck Vlog Pervekt SMK 2025.pptx
Sosialisasi Program Digital Skills Unicef 2025.pptx
DIGITAL SKILLS PROGRAMME 2025 - VERSI HZ.pdf
Digital Skills - 2025 - Dinas - Green Marketplace.pdf
Pemrograman Mobile menggunakan kotlin2.pdf
Membangun Kewirausahan Sosial Program Double Track.pptx
Membangun Kemandirian DTMandiri-2025.pptx
Panduan Entry Nilai Rapor untuk Operator SD_MI 2025.pptx (1).pdf
JADWAL SISTEM PENERIMAAN MURID BARU 2025.pdf
Seleksi Penerimaan Murid Baru 2025.pptx
Pengembangan Program Dual Track 2025-2.pptx
Pengembangan Program Dual Track 2025-1.pptx
PETUNJUK PELAKSANAAN TEKNIS FESV RAMADHAN 2025.pdf
Pengembangan Entrepreneur Vokasi Melalui PERFECT SMK-Society 50 .pptx
PERFECT SMK 6 - Strategi Pelaksanaan.pptx
Program Dual Track Kalimantan Timur 2025.pptx
Contoh Proposal konveksi untuk Program Magang Kewirausahaan.pdf
Pengembangan Program Digital Skills - 2025.pptx
PPT-Proyek Magang Kewirausahaan Double Track.pptx

Recently uploaded (20)

PDF
Design an Analysis of Algorithms I-SECS-1021-03
PDF
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
PDF
Digital Systems & Binary Numbers (comprehensive )
PDF
Nekopoi APK 2025 free lastest update
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PPTX
Reimagine Home Health with the Power of Agentic AI​
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
Designing Intelligence for the Shop Floor.pdf
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PDF
Digital Strategies for Manufacturing Companies
PDF
PTS Company Brochure 2025 (1).pdf.......
PDF
Cost to Outsource Software Development in 2025
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PPTX
Odoo POS Development Services by CandidRoot Solutions
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PPTX
L1 - Introduction to python Backend.pptx
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
Understanding Forklifts - TECH EHS Solution
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
Design an Analysis of Algorithms I-SECS-1021-03
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
Digital Systems & Binary Numbers (comprehensive )
Nekopoi APK 2025 free lastest update
Design an Analysis of Algorithms II-SECS-1021-03
Reimagine Home Health with the Power of Agentic AI​
How to Choose the Right IT Partner for Your Business in Malaysia
Designing Intelligence for the Shop Floor.pdf
Navsoft: AI-Powered Business Solutions & Custom Software Development
Digital Strategies for Manufacturing Companies
PTS Company Brochure 2025 (1).pdf.......
Cost to Outsource Software Development in 2025
Which alternative to Crystal Reports is best for small or large businesses.pdf
Odoo POS Development Services by CandidRoot Solutions
Upgrade and Innovation Strategies for SAP ERP Customers
L1 - Introduction to python Backend.pptx
Wondershare Filmora 15 Crack With Activation Key [2025
Understanding Forklifts - TECH EHS Solution
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf

Chapter06 designing class-zuul bad

  • 1. 1 / 7 zuul-bad /** * This class is the main class of the "World of Zuul" application. * "World of Zuul" is a very simple, text based adventure game. * * This class holds information about a command that was issued by the user. * A command currently consists of two strings: a command word and a second * word (for example, if the command was "take map", then the two strings * obviously are "take" and "map"). * * The way this is used is: Commands are already checked for being valid * command words. If the user entered an invalid command (a word that is not * known) then the command word is <null>. * * If the command had only one word, then the second word is <null>. * * @author Michael Kolling and David J. Barnes * @version 1.0 (February 2002) */ class Command { private String commandWord; private String secondWord; /** * Create a command object. First and second word must be supplied, but * either one (or both) can be null. The command word should be null to * indicate that this was a command that is not recognised by this game. */ 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. */ public String getCommandWord() { return commandWord; } /** * Return the second word of this command. Returns null if there was no * second word. */ public String getSecondWord() { return secondWord; } /** * Return true if this command was not understood. */ public boolean isUnknown() { return (commandWord == null); } /** * Return true if the command has a second word. */ public boolean hasSecondWord() { return (secondWord != null); } }
  • 2. 2 / 7 /* * This class is the main class of the "World of Zuul" application. * "World of Zuul" is a very simple, text based adventure game. * * This class holds an enumeration of all command words known to the game. * It is used to recognise commands as they are typed in. * * @author Michael Kolling and David J. Barnes * @version 1.0 (February 2002) */ 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. */ 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. 3 / 7 /** * This class is the main class of the "World of Zuul" application. * "World of Zuul" is a very simple, text based adventure game. Users * can walk around some scenery. That's all. It should really be extended * to make it more interesting! * * To play this game, create an instance of this class and call the "play" * method. * * This main class creates and initialises all the others: it creates all * rooms, creates the parser and starts the game. It also evaluates and * executes the commands that the parser returns. * * @author Michael Kolling and David J. Barnes * @version 1.0 (February 2002) */ 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, theatre, pub, lab, office; // create the rooms 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"); // initialise 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. Loops until end of play. */ public void play() { printWelcome(); // Enter the main command loop. Here we repeatedly read commands and // execute them 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();
  • 4. 4 / 7 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(); } /** * Given a command, process (that is: execute) the command. * If this command ends the game, true is returned, otherwise false is * returned. */ 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: /** * Print out some help information. * Here we print some stupid, cryptic message and a 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"))
  • 5. 5 / 7 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. */ private boolean quit(Command command) { if(command.hasSecondWord()) { System.out.println("Quit what?"); return false; } else return true; // signal that we want to quit } }
  • 6. 6 / 7 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; /* * This class is the main class of the "World of Zuul" application. * "World of Zuul" is a very simple, text based adventure game. * * This parser reads user input and tries to interpret it as an "Adventure" * command. Every time it is called it reads a line from the terminal and * tries to interpret the line as a two word command. It returns the command * as an object of class Command. * * The parser has a set of known command words. It checks user input against * the known commands, and if the input is not one of the known commands, it * returns a command object that is marked as an unknown command. * * @author Michael Kolling and David J. Barnes * @version 1.0 (February 2002) */ 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 first word else word1 = null; if(tokenizer.hasMoreTokens()) word2 = tokenizer.nextToken(); // get second word else word2 = null; // note: we just ignore the rest of the input line. // Now check whether this word is known. If so, create a command // with it. If not, create a "null" command (for unknown command). if(commands.isCommand(word1)) return new Command(word1, word2); else return new Command(null, word2); } }
  • 7. 7 / 7 /* * Class Room - a room in an adventure game. * * This class is the main class of the "World of Zuul" application. * "World of Zuul" is a very simple, text based adventure game. * * A "Room" represents one location in the scenery of the game. It is * connected to other rooms via exits. The exits are labelled north, * east, south, west. For each direction, the room stores a reference * to the neighboring room, or null if there is no exit in that direction. * * @author Michael Kolling and David J. Barnes * @version 1.0 (February 2002) */ 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". */ public Room(String description) { this.description = description; } /** * Define the exits of this room. Every direction either leads * to another room or is null (no exit there). */ 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; } /** * Return the description of the room (the one that was defined * in the constructor). */ public String getDescription() { return description; } }