Conflicts:
	data/rooms.dat
This commit is contained in:
vleevalerio
2019-05-08 14:35:10 -04:00
7 changed files with 709 additions and 622 deletions

View File

@@ -1,18 +1,22 @@
Room Name: Circle Room Room Name: Circle Room
Room Description: You are in the circular room. The windows to the west are bolted shut and curtains cover them. To the east, a hallway. Room Description: You are in the circular room. The windows to the west are bolted shut and curtains cover them. To the east, a hallway.
Exit Rooms: E-Apple Hallway Exit Rooms: E-Apple Hallway
Items: Candlestick, Candlestick
Room Name: Apple Hallway Room Name: Apple Hallway
Room Description: You are in an empty hallway. Many closed doors surround you. To the west is the round room and north is the stairs. You cannot see what they lead to. Room Description: You are in an empty hallway. Many closed doors surround you. To the west is the round room and north is the stairs. You cannot see what they lead to.
Exit Rooms: Circle Room, N-Porcupine Stairs Exit Rooms: Circle Room, N-Porcupine Stairs
Items:
Room Name: Porcupine Stairs Room Name: Porcupine Stairs
Room Description: You are in the Porcupine Stairs. Below you is the second floor and above you is the third floor. Room Description: You are in the Porcupine Stairs. The stone, cold walls are trapped in darkness. Below you is the second floor and above you is the third floor.
Exit Rooms: up-third floor, down-second floor Exit Rooms: up-third floor, down-second floor
Items:
Room Name: Hallway 3 Room Name: Bulb Room
Room Description: You are in an empty hallway. Many closed doors surround you. To the west is the round room and north is the stairs. You cannot see what they lead to. Room Description: You are in the Bulb Room. There is a ragged red rug with a noticeable lump in the middle. One window facing north is bolted shut.
Exit Rooms: W-Round Room (third floor), N-Stairs to second floor Exit Rooms: W-Round Room (third floor), N-Stairs to second floor
Items:
Room Name: Hallway 3 Room Name: Hallway 3
Room Description: You are in an empty hallway. Many closed doors surround you. To the west is the round room and north is the stairs. You cannot see what they lead to. Room Description: You are in an empty hallway. Many closed doors surround you. To the west is the round room and north is the stairs. You cannot see what they lead to.

View File

@@ -1,87 +1,100 @@
package com.bayviewglen.zork; package com.bayviewglen.zork;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
* Class Command - Part of the "Zork" game. * Class Command - Part of the "Zork" game.
* *
* author: Michael Kolling version: 1.0 date: July 1999 * author: Michael Kolling version: 1.0 date: July 1999
* *
* This class holds information about a command that was issued by the user. A * 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 * 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 * (for example, if the command was "take map", then the two strings obviously
* are "take" and "map"). * are "take" and "map").
* *
* The way this is used is: Commands are already checked for being valid command * 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 * words. If the user entered an invalid command (a word that is not known) then
* the command word is <null>. * the command word is <null>.
* *
* If the command had only one word, then the second word is <null>. * If the command had only one word, then the second word is <null>.
* *
* The second word is not checked at the moment. It can be anything. If this * The second word is not checked at the moment. It can be anything. If this
* game is extended to deal with items, then the second part of the command * game is extended to deal with items, then the second part of the command
* should probably be changed to be an item rather than a String. * should probably be changed to be an item rather than a String.
*/ * test
class Command { */
private String commandWord; class Command {
private String direction; private String commandWord;
private ArrayList<String> otherWords; private String direction;
private String item; private ArrayList<String> otherWords;
private String item;
/**
* 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 * Create a command object. First and second word must be supplied, but
* indicate that this was a command that is not recognised by this game. * 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, ArrayList<String> otherWords, String direction, String item) { */
commandWord = firstWord; public Command(String firstWord, ArrayList<String> otherWords, String direction, String item) {
this.otherWords = otherWords; commandWord = firstWord;
this.direction = direction; this.otherWords = otherWords;
this.item = item; this.direction = direction;
} if(direction.equals("e"))
this.direction = "east";
/** if(direction.equals("w"))
* Return the command word (the first word) of this command. If the command this.direction = "west";
* was not understood, the result is null. if(direction.equals("s"))
*/ this.direction = "south";
public String getCommandWord() { if(direction.equals("n"))
return commandWord; this.direction = "north";
} if(direction.equals("u"))
this.direction = "up";
/** if(direction.equals("d"))
* Return the second word of this command. Returns null if there was no this.direction = "down";
* second word. this.item = item;
*/ }
public ArrayList<String> getOtherWords() {
return otherWords; /**
} * Return the command word (the first word) of this command. If the command
/* * was not understood, the result is null.
public String getSecondWord() { */
return otherWords.get(0); public String getCommandWord() {
} return commandWord;
*/ }
/** /**
* Return true if this command was not understood. * Return the second word of this command. Returns null if there was no
*/ * second word.
public boolean isUnknown() { */
return (commandWord == null); public ArrayList<String> getOtherWords() {
} return otherWords;
}
/** /*
* Return true if the command has a second word. public String getSecondWord() {
*/ return otherWords.get(0);
public boolean hasSecondWord() { }
return otherWords.size() > 0; */
}
/**
public boolean hasItem(){ * Return true if this command was not understood.
return item.equals(""); */
} public boolean isUnknown() {
public boolean hasDirection() { return (commandWord == null);
return CommandWords.isDirection(commandWord); }
}
public String getDirection() { /**
return direction; * Return true if the command has a second word.
} */
} public boolean hasSecondWord() {
return otherWords.size() > 0;
}
public boolean hasItem(){
return item.equals("");
}
public boolean hasDirection() {
return CommandWords.isDirection(direction);
}
public String getDirection() {
return direction;
}
}

View File

@@ -1,74 +1,78 @@
package com.bayviewglen.zork; package com.bayviewglen.zork;
import java.io.File; import java.io.File;
import java.util.HashMap; import java.util.HashMap;
import java.util.Scanner; import java.util.Scanner;
/* /*
* Author: Michael Kolling. * Author: Michael Kolling.
* Version: 1.0 * Version: 1.0
* Date: July 1999 * Date: July 1999
* *
* This class holds an enumeration of all command words known to the 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. * It is used to recognise commands as they are typed in.
* *
* This class is part of the "Zork" game. * This class is part of the "Zork" game.
*/ */
class CommandWords { class CommandWords {
// a constant array that holds all valid command words // a constant array that holds all valid command words
private static HashMap<String, String> m_words = new HashMap<String, String>();; private static HashMap<String, String> m_words = new HashMap<String, String>();;
/** /**
* Constructor - initialise the command words. * Constructor - initialise the command words.
*/ */
public CommandWords() { public CommandWords() {
// Import words from words.dat into HashMap // Import words from words.dat into HashMap
try { try {
Scanner in = new Scanner(new File("data/words.dat")); Scanner in = new Scanner(new File("data/words.dat"));
while(in.hasNext()){ while(in.hasNext()){
String text = in.nextLine(); String text = in.nextLine();
String[] textarr = text.split(","); String[] textarr = text.split(",");
m_words.put(textarr[0], textarr[1].substring(1)); m_words.put(textarr[0], textarr[1].substring(1));
} }
in.close(); in.close();
}catch (Exception e) { }catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
/** /**
* Check whether a given String is a valid command word. Return true if it * Check whether a given String is a valid command word. Return true if it
* is, false if it isn't. * is, false if it isn't.
**/ **/
// Check if given string is verb or direction // Check if given string is verb or direction
public static boolean isCommand(String aString) { public static boolean isCommand(String aString) {
try { try {
return (m_words.get(aString).equals("verb") || m_words.get(aString).equals("direction")); return (m_words.get(aString).equals("verb") || m_words.get(aString).equals("direction"));
}catch(Exception e) { }catch(Exception e) {
return false; return false;
} }
} }
// Check if given string is direction // Check if given string is direction
public static boolean isDirection(String aString) { public static boolean isDirection(String aString) {
return m_words.get(aString).equals("direction"); try {
} return m_words.get(aString).equals("direction");
}catch(Exception e) {
public static boolean isItem(String aString){ return false;
try { }
return m_words.get(aString).equals("item"); }
} catch(Exception e) {
return false; public static boolean isItem(String aString){
} try {
} return m_words.get(aString).equals("item");
} catch(Exception e) {
/* return false;
* Print all valid commands to System.out. }
*/ }
public void showAll() {
for (String i : m_words.keySet()) { /*
if(m_words.get(i).equals("verb")){ * Print all valid commands to System.out.
System.out.print(i + " "); */
} public void showAll() {
} for (String i : m_words.keySet()) {
System.out.println(); if(m_words.get(i).equals("verb")){
} System.out.print(i + " ");
}
}
System.out.println();
}
} }

View File

@@ -1,29 +1,29 @@
package com.bayviewglen.zork.Entities; package com.bayviewglen.zork.Entities;
import com.bayviewglen.zork.Items.Item; import com.bayviewglen.zork.Items.Item;
import java.util.ArrayList; import java.util.ArrayList;
public class Player extends Entity{ public class Player extends Entity{
private ArrayList<Item> inventory = new ArrayList<Item>(); private ArrayList<Item> inventory = new ArrayList<Item>();
private final int INVENTORY_CAPACITY = 120; private final int INVENTORY_CAPACITY = 120;
private int currentInventoryWeight; private int currentInventoryWeight;
public Player() { public Player() {
super(); super();
} }
private boolean addToInventory(Item item){ public boolean addToInventory(Item item){
if(currentInventoryWeight + item.getWeight() < INVENTORY_CAPACITY){ if(currentInventoryWeight + item.getWeight() < INVENTORY_CAPACITY){
inventory.add(item); inventory.add(item);
System.out.println(item.getName() + " add"); System.out.println(item.getName() + " add");
return true; return true;
} }
return false; return false;
} }
private void removeFromInventory(Item item){ public void removeFromInventory(Item item){
inventory.remove(item); inventory.remove(item);
} }
} }

View File

@@ -1,207 +1,227 @@
package com.bayviewglen.zork; package com.bayviewglen.zork;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.util.HashMap; import java.lang.reflect.Constructor;
import java.util.Scanner; import java.util.HashMap;
import java.util.Scanner;
import com.bayviewglen.zork.Items.*;
import com.bayviewglen.zork.Items.*;
/**
* Class Game - the main class of the "Zork" game. /**
* * Class Game - the main class of the "Zork" game.
* Author: Michael Kolling Version: 1.1 Date: March 2000 *
* * Author: Michael Kolling Version: 1.1 Date: March 2000
* This class is the main class of the "Zork" application. Zork is a very *
* simple, text based adventure game. Users can walk around some scenery. That's * This class is the main class of the "Zork" application. Zork is a very
* all. It should really be extended to make it more interesting! * 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" *
* routine. * To play this game, create an instance of this class and call the "play"
* * routine.
* This main class creates and initialises all the others: it creates all rooms, *
* creates the parser and starts the game. It also evaluates the commands that * This main class creates and initialises all the others: it creates all rooms,
* the parser returns. * creates the parser and starts the game. It also evaluates the commands that
*/ * the parser returns.
class Game { */
private Parser parser; class Game {
private Room currentRoom; private Parser parser;
// This is a MASTER object that contains all of the rooms and is easily private Room currentRoom;
// accessible. // This is a MASTER object that contains all of the rooms and is easily
// The key will be the name of the room -> no spaces (Use all caps and // accessible.
// underscore -> Great Room would have a key of GREAT_ROOM // The key will be the name of the room -> no spaces (Use all caps and
// In a hashmap keys are case sensitive. // underscore -> Great Room would have a key of GREAT_ROOM
// masterRoomMap.get("GREAT_ROOM") will return the Room Object that is the // In a hashmap keys are case sensitive.
// Great Room (assuming you have one). // masterRoomMap.get("GREAT_ROOM") will return the Room Object that is the
private HashMap<String, Room> masterRoomMap; // Great Room (assuming you have one).
private HashMap<Item, String> itemsInRooms = new HashMap<Item, String>(); private HashMap<String, Room> masterRoomMap;
//private HashMap<Item, String> itemsInRooms = new HashMap<Item, String>();
private void initRooms(String fileName) throws Exception {
itemsInRooms.put(new Candlestick(), "Candlestick"); private void initRooms(String fileName) throws Exception {
masterRoomMap = new HashMap<String, Room>(); //itemsInRooms.put(new Candlestick(), "Candlestick");
Scanner roomScanner; masterRoomMap = new HashMap<String, Room>();
try { Scanner roomScanner;
HashMap<String, HashMap<String, String>> exits = new HashMap<String, HashMap<String, String>>(); try {
roomScanner = new Scanner(new File(fileName)); HashMap<String, HashMap<String, String>> exits = new HashMap<String, HashMap<String, String>>();
while (roomScanner.hasNext()) { roomScanner = new Scanner(new File(fileName));
Room room = new Room(); while (roomScanner.hasNext()) {
// Read the Name Room room = new Room();
String roomName = roomScanner.nextLine(); // Read the Name
room.setRoomName(roomName.split(":")[1].trim()); String roomName = roomScanner.nextLine();
// Read the Description room.setRoomName(roomName.split(":")[1].trim());
String roomDescription = roomScanner.nextLine(); // Read the Description
room.setDescription(roomDescription.split(":")[1].replaceAll("<br>", "\n").trim()); String roomDescription = roomScanner.nextLine();
// Read the Exits room.setDescription(roomDescription.split(":")[1].replaceAll("<br>", "\n").trim());
String roomExits = roomScanner.nextLine(); // Read the Items
// An array of strings in the format E-RoomName String items = roomScanner.nextLine();
String[] rooms = roomExits.split(":")[1].split(","); try {
HashMap<String, String> temp = new HashMap<String, String>(); String[] itemArr = items.split(":")[1].split(",");
for (String s : rooms) { for(String s : itemArr) {
temp.put(s.split("-")[0].trim(), s.split("-")[1]); Class<?> clazz = Class.forName("com.bayviewglen.zork.Items." + s.trim());
} Constructor<?> ctor = clazz.getConstructor();
Item object = (Item) ctor.newInstance();
exits.put(roomName.substring(10).trim().toUpperCase().replaceAll(" ", "_"), temp); room.addItem(object);
}
// This puts the room we created (Without the exits in the }catch(Exception e) {
// masterMap) }
masterRoomMap.put(roomName.toUpperCase().substring(10).trim().replaceAll(" ", "_"), room);
// Read the Exits
// Now we better set the exits. String roomExits = roomScanner.nextLine();
} // An array of strings in the format E-RoomName
String[] rooms = roomExits.split(":")[1].split(",");
for (String key : masterRoomMap.keySet()) { HashMap<String, String> temp = new HashMap<String, String>();
Room roomTemp = masterRoomMap.get(key); for (String s : rooms) {
HashMap<String, String> tempExits = exits.get(key); temp.put(s.split("-")[0].trim(), s.split("-")[1]);
for (String s : tempExits.keySet()) { }
// s = direction
// value is the room. exits.put(roomName.substring(10).trim().toUpperCase().replaceAll(" ", "_"), temp);
String roomName2 = tempExits.get(s.trim()); // This puts the room we created (Without the exits in the
Room exitRoom = masterRoomMap.get(roomName2.toUpperCase().replaceAll(" ", "_")); // masterMap)
roomTemp.setExit(s.trim().charAt(0), exitRoom); masterRoomMap.put(roomName.toUpperCase().substring(10).trim().replaceAll(" ", "_"), room);
} // Now we better set the exits.
}
}
for (String key : masterRoomMap.keySet()) {
roomScanner.close(); Room roomTemp = masterRoomMap.get(key);
} catch (FileNotFoundException e) { HashMap<String, String> tempExits = exits.get(key);
e.printStackTrace(); for (String s : tempExits.keySet()) {
} // s = direction
} // value is the room.
/** String roomName2 = tempExits.get(s.trim());
* Create the game and initialise its internal map. Room exitRoom = masterRoomMap.get(roomName2.toUpperCase().replaceAll(" ", "_"));
*/ roomTemp.setExit(s.trim().charAt(0), exitRoom);
public Game() {
try { }
initRooms("data/Rooms.dat");
currentRoom = masterRoomMap.get("ROOM_1"); }
} catch (Exception e) {
// TODO Auto-generated catch block roomScanner.close();
e.printStackTrace(); } catch (FileNotFoundException e) {
} e.printStackTrace();
parser = new Parser(); }
} }
/** /**
* Main play routine. Loops until end of play. * Create the game and initialise its internal map.
*/ */
public void play() { public Game() {
printWelcome(); try {
// Enter the main command loop. Here we repeatedly read commands and initRooms("data/Rooms.dat");
// execute them until the game is over. currentRoom = masterRoomMap.get("ROOM_1");
} catch (Exception e) {
boolean finished = false; e.printStackTrace();
while (!finished) { }
Command command = parser.getCommand(); parser = new Parser();
finished = processCommand(command); }
}
System.out.println("Thank you for playing. Good bye."); /**
} * Main play routine. Loops until end of play.
*/
/** public void play() {
* Print out the opening message for the player. printWelcome();
*/ // Enter the main command loop. Here we repeatedly read commands and
private void printWelcome() { // execute them until the game is over.
System.out.println();
System.out.println("Welcome to Zork!"); boolean finished = false;
System.out.println("Zork is a new, incredibly boring adventure game, for now..."); while (!finished) {
System.out.println("Type 'help' if you need help."); Command command = parser.getCommand();
System.out.println(); finished = processCommand(command);
System.out.println(currentRoom.longDescription()); }
} System.out.println("Thank you for playing. Good bye.");
}
/**
* Given a command, process (that is: execute) the command. If this command /**
* ends the game, true is returned, otherwise false is returned. * Print out the opening message for the player.
*/ */
private boolean processCommand(Command command) { private void printWelcome() {
System.out.println();
if (command.isUnknown()) { System.out.println("Welcome to Zork!");
System.out.println("I don't know what you mean..."); System.out.println("Zork is a new, incredibly boring adventure game, for now...");
return false; System.out.println("Type 'help' if you need help.");
} System.out.println();
String commandWord = command.getCommandWord(); System.out.println(currentRoom.longDescription());
switch(commandWord) { }
case "go": case "n": case "s": case "e": case "w": case "north": case "south": case "west": case "east": case "up": case "down":
goRoom(command); /**
break; * Given a command, process (that is: execute) the command. If this command
case "help": * ends the game, true is returned, otherwise false is returned.
printHelp(); */
break; private boolean processCommand(Command command) {
case "jump":
System.out.println("Good Job!"); if (command.isUnknown()) {
break; System.out.println("I don't know what you mean...");
case "quit": return false;
return true; }
case "eat": String commandWord = command.getCommandWord();
System.out.println("Do you really think you should be eating at a time like this?"); switch(commandWord) {
break; case "go": case "n": case "s": case "e": case "w": case "north": case "south": case "west": case "east": case "up": case "down":
case "look": goRoom(command);
for (Item i : itemsInRooms.keySet()) { break;
System.out.print(i.getName() + " "); case "help":
} printHelp();
System.out.println(); break;
break; case "jump":
default: System.out.println("Good Job!");
return false; break;
} case "quit":
return false; return true;
} case "eat":
System.out.println("Do you really think you should be eating at a time like this?");
// implementations of user commands: break;
/** case "look":
* Print out some help information. Here we print some stupid, cryptic System.out.print("Items: ");
* message and a list of the command words. for(Item i : currentRoom.getItems()) {
*/ System.out.print(i.getName() + " ");
private void printHelp() { }
System.out.println("You are lost. You are alone. You wander"); System.out.println();
System.out.println("around at Monash Uni, Peninsula Campus."); /*
System.out.println(); for (Item i : itemsInRooms.keySet()) {
System.out.println("Your command words are:"); System.out.print(i.getName() + " ");
parser.showCommands(); }
} System.out.println();
*/
/** break;
* Try to go to one direction. If there is an exit, enter the new room, default:
* otherwise print an error message. return false;
*/ }
private void goRoom(Command command) { return false;
if (!command.hasDirection()) { }
// if there is no second word, we don't know where to go...
System.out.println("Go where?"); // implementations of user commands:
return; /**
} * Print out some help information. Here we print some stupid, cryptic
String direction = command.getDirection(); * message and a list of the command words.
// Try to leave current room. */
Room nextRoom = currentRoom.nextRoom(direction); private void printHelp() {
if (nextRoom == null) System.out.println("You are lost. You are alone. You wander");
System.out.println("There is no door!"); System.out.println("around at Monash Uni, Peninsula Campus.");
else { System.out.println();
currentRoom = nextRoom; System.out.println("Your command words are:");
System.out.println(currentRoom.longDescription()); parser.showCommands();
} }
}
/**
* 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.hasDirection()) {
// if there is no second word, we don't know where to go...
System.out.println("Go where?");
return;
}
String direction = command.getDirection();
// Try to leave current room.
Room nextRoom = currentRoom.nextRoom(direction);
if (nextRoom == null)
System.out.println("There is no door!");
else {
currentRoom = nextRoom;
System.out.println(currentRoom.longDescription());
}
}
} }

View File

@@ -1,78 +1,78 @@
package com.bayviewglen.zork; package com.bayviewglen.zork;
/* /*
* Author: Michael Kolling * Author: Michael Kolling
* Version: 1.0 * Version: 1.0
* Date: July 1999 * Date: July 1999
* *
* This class is part of Zork. Zork is a simple, text based adventure game. * This class is part of Zork. Zork is a simple, text based adventure game.
* *
* This parser reads user input and tries to interpret it as a "Zork" * This parser reads user input and tries to interpret it as a "Zork"
* command. Every time it is called it reads a line from the terminal and * 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 * tries to interpret the line as a two word command. It returns the command
* as an object of class Command. * as an object of class Command.
* *
* The parser has a set of known command words. It checks user input against * 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 * 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. * returns a command object that is marked as an unknown command.
*/ */
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import com.bayviewglen.zork.CommandWords; import com.bayviewglen.zork.CommandWords;
class Parser { class Parser {
private CommandWords commands; // holds all valid command words private CommandWords commands; // holds all valid command words
public Parser() { public Parser() {
commands = new CommandWords(); commands = new CommandWords();
} }
public Command getCommand() { public Command getCommand() {
String inputLine = ""; // will hold the full input line String inputLine = ""; // will hold the full input line
String verb = ""; String verb = "";
String direction = ""; String direction = "";
String item = ""; String item = "";
//String word2; //String word2;
ArrayList<String> words = new ArrayList<String>(); ArrayList<String> words = new ArrayList<String>();
ArrayList<String> otherWords = new ArrayList<String>(); ArrayList<String> otherWords = new ArrayList<String>();
System.out.print("> "); // print prompt System.out.print("> "); // print prompt
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try { try {
inputLine = reader.readLine(); inputLine = reader.readLine();
} catch (java.io.IOException exc) { } catch (java.io.IOException exc) {
System.out.println("There was an error during reading: " + exc.getMessage()); System.out.println("There was an error during reading: " + exc.getMessage());
} }
StringTokenizer tokenizer = new StringTokenizer(inputLine); StringTokenizer tokenizer = new StringTokenizer(inputLine.toLowerCase());
while(tokenizer.hasMoreTokens()) { while(tokenizer.hasMoreTokens()) {
words.add(tokenizer.nextToken()); words.add(tokenizer.nextToken());
} }
for(int i=0; i<words.size(); i++) { for(int i=0; i<words.size(); i++) {
if(CommandWords.isCommand(words.get(i))) { if(CommandWords.isCommand(words.get(i))) {
verb = words.get(i); verb = words.get(i);
if(CommandWords.isDirection(words.get(i))) { if(CommandWords.isDirection(words.get(i))) {
direction = words.get(i); direction = words.get(i);
} }
}else if(CommandWords.isItem(words.get(i))){ }else if(CommandWords.isItem(words.get(i))){
item = words.get(i); item = words.get(i);
} }
else { else {
otherWords.add(words.get(i)); otherWords.add(words.get(i));
} }
} }
//System.out.println(verb); //System.out.println(verb);
if (CommandWords.isCommand(verb)) if (CommandWords.isCommand(verb))
return new Command(verb, otherWords, direction, item); return new Command(verb, otherWords, direction, item);
else else
return new Command(null, otherWords, direction, item); return new Command(null, otherWords, direction, item);
} }
/** /**
* Print out a list of valid command words. * Print out a list of valid command words.
*/ */
public void showCommands() { public void showCommands() {
commands.showAll(); commands.showAll();
} }
} }

View File

@@ -1,144 +1,190 @@
package com.bayviewglen.zork; package com.bayviewglen.zork;
/* /*
* Class Room - a room in an adventure game. * Class Room - a room in an adventure game.
* *
* Author: Michael Kolling * Author: Michael Kolling
* Version: 1.1 * Version: 1.1
* Date: August 2000 * Date: August 2000
* *
* This class is part of Zork. Zork is a simple, text based adventure game. * This class is part of Zork. Zork is a simple, text based adventure game.
* *
* "Room" represents one location in the scenery of the game. It is * "Room" represents one location in the scenery of the game. It is
* connected to at most four other rooms via exits. The exits are labelled * connected to at most four other rooms via exits. The exits are labelled
* north, east, south, west. For each direction, the room stores a reference * north, east, south, west. For each direction, the room stores a reference
* to the neighbouring room, or null if there is no exit in that direction. * to the neighbouring room, or null if there is no exit in that direction.
*/ */
import java.util.Set; import java.util.Set;
import java.util.HashMap; import java.util.ArrayList;
import java.util.Iterator; import java.util.HashMap;
import java.util.Iterator;
class Room { import com.bayviewglen.zork.Items.*;
private String roomName;
private String description; class Room {
private HashMap<String, Room> exits; // stores exits of this room. private String roomName;
private String description;
/** private HashMap<String, Room> exits; // stores exits of this room.
* Create a room described "description". Initially, it has no exits. private ArrayList<Item> items;
* "description" is something like "a kitchen" or "an open court yard".
*/ /**
public Room(String description) { * Create a room described "description". Initially, it has no exits.
this.description = description; * "description" is something like "a kitchen" or "an open court yard".
exits = new HashMap<String, Room>(); */
} public Room(String description) {
this.description = description;
public Room() { exits = new HashMap<String, Room>();
// default constructor. items = new ArrayList<Item>();
roomName = "DEFAULT ROOM"; }
description = "DEFAULT DESCRIPTION";
exits = new HashMap<String, Room>(); public Room() {
} // default constructor.
roomName = "DEFAULT ROOM";
public void setExit(char direction, Room r) throws Exception { description = "DEFAULT DESCRIPTION";
String dir = ""; exits = new HashMap<String, Room>();
switch (direction) { items = new ArrayList<Item>();
case 'E': }
dir = "east";
break; public void setExit(char direction, Room r) throws Exception {
case 'W': String dir = "";
dir = "west"; switch (direction) {
break; case 'E':
case 'S': dir = "east";
dir = "south"; break;
break; case 'W':
case 'N': dir = "west";
dir = "north"; break;
break; case 'S':
case 'U': dir = "south";
dir = "up"; break;
break; case 'N':
case 'D': dir = "north";
dir = "down"; break;
break; case 'U':
default: dir = "up";
throw new Exception("Invalid Direction"); break;
case 'D':
} dir = "down";
break;
exits.put(dir, r); default:
} throw new Exception("Invalid Direction");
/** }
* Define the exits of this room. Every direction either leads to another
* room or is null (no exit there). exits.put(dir, r);
*/ }
public void setExits(Room north, Room east, Room south, Room west, Room up, Room down) {
if (north != null) /*
exits.put("north", north); * Add passed in item to item array list
if (east != null) */
exits.put("east", east); public void addItem(Item item) {
if (south != null) items.add(item);
exits.put("south", south); }
if (west != null)
exits.put("west", west); /*
if (up != null) * Remove first instance of item passed in
exits.put("up", up); * Return item if removed, otherwise return null
if (up != null) */
exits.put("down", down); public Item removeItem(Item item) {
for(int i=0; i<items.size(); i++) {
} if(item.equals(items.get(i))) {
items.remove(i);
/** return item;
* Return the description of the room (the one that was defined in the }
* constructor). }
*/ return null;
public String shortDescription() { }
return "Room: " + roomName + "\n\n" + description;
} /*
* Remove item at index
/** * Return item if removed, otherwise return null
* Return a long description of this room, on the form: You are in the */
* kitchen. Exits: north west public Item removeItem(int i) {
*/ if(i >= items.size())
public String longDescription() { return null;
Item temp = items.get(i);
return "Room: " + roomName + "\n\n" + description + "\n" + exitString(); items.remove(i);
} return temp;
}
/**
* Return a string describing the room's exits, for example "Exits: north public ArrayList<Item> getItems() {
* west ". return items;
*/ }
private String exitString() {
String returnString = "Exits:"; public Item getItem(int i) {
Set keys = exits.keySet(); return items.get(i);
for (Iterator iter = keys.iterator(); iter.hasNext();) }
returnString += " " + iter.next();
return returnString; /**
} * Define the exits of this room. Every direction either leads to another
* room or is null (no exit there).
/** */
* Return the room that is reached if we go from this room in direction public void setExits(Room north, Room east, Room south, Room west, Room up, Room down) {
* "direction". If there is no room in that direction, return null. if (north != null)
*/ exits.put("north", north);
public Room nextRoom(String direction) { if (east != null)
return (Room) exits.get(direction); exits.put("east", east);
} if (south != null)
exits.put("south", south);
public String getRoomName() { if (west != null)
return roomName; exits.put("west", west);
} if (up != null)
exits.put("up", up);
public void setRoomName(String roomName) { if (up != null)
this.roomName = roomName; exits.put("down", down);
}
}
public String getDescription() {
return description; /**
} * Return the description of the room (the one that was defined in the
* constructor).
public void setDescription(String description) { */
this.description = description; public String shortDescription() {
} return "Room: " + roomName + "\n\n" + description;
} }
/**
* Return a long description of this room, on the form: You are in the
* kitchen. Exits: north west
*/
public String longDescription() {
return "Room: " + roomName + "\n\n" + description + "\n" + exitString();
}
/**
* Return a string describing the room's exits, for example "Exits: north
* west ".
*/
private String exitString() {
String returnString = "Exits:";
Set keys = exits.keySet();
for (Iterator iter = keys.iterator(); iter.hasNext();)
returnString += " " + iter.next();
return returnString;
}
/**
* Return the room that is reached if we go from this room in direction
* "direction". If there is no room in that direction, return null.
*/
public Room nextRoom(String direction) {
return (Room) exits.get(direction);
}
public String getRoomName() {
return roomName;
}
public void setRoomName(String roomName) {
this.roomName = roomName;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}