Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * 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 Kölling and David J. Barnes
- * @version 2016.02.29
- */
- 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.
- * Exercise 8.4
- */
- private void createRooms()
- {
- Room start, trap1, trap2, hallway, exit;
- // create the rooms
- start = new Room("at the beginning of the maze");
- trap1 = new Room("on a fake floor with a spike pit underneath (trap)");
- trap2 = new Room("walking through a long endless hallway that seemingly goes nowhere (trap)");
- hallway = new Room("sneaking through a hallway that may lead closer to the exit");
- exit = new Room("at the end of the maze");
- // initialise room exits
- start.setExits(null, trap1, hallway, trap2);
- trap1.setExits(null, null, null, start);
- trap2.setExits(null, start, null, null);
- hallway.setExits(start, exit, null, null);
- exit.setExits(null, null, null, hallway);
- currentRoom = start; // 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();
- 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();
- printLocationInfo();
- }
- /**
- * Given a command, process (that is: execute) the command.
- * @param command The command to be processed.
- * @return true If the command ends the game, false otherwise.
- */
- 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 in 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 = currentRoom.getExit(direction);
- if (nextRoom == null) {
- System.out.println("There is no door!");
- }
- else {
- currentRoom = nextRoom;
- printLocationInfo();
- }
- }
- /**
- * Exercise 8.7
- * A better method to print the current location information
- */
- private void printLocationInfo()
- {
- System.out.println("You are " + currentRoom.getDescription());
- System.out.println("Exits: ");
- if(currentRoom.getExit("north") != null) {
- System.out.print("north ");
- }
- if(currentRoom.getExit("east") != null) {
- System.out.print("east ");
- }
- if(currentRoom.getExit("south") != null) {
- System.out.print("south ");
- }
- if(currentRoom.getExit("west") != 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
- }
- }
- }
- /**
- * Class Room - a room in an adventure game.
- *
- * This class is part 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 Kölling and David J. Barnes
- * @version 2016.02.29
- */
- public class Room
- {
- private String description;
- private Room northExit;
- private Room southExit;
- private Room eastExit;
- private Room westExit;
- /**
- * Create a room described "description". Initially, it has
- * no exits. "description" is something like "a kitchen" or
- * "an open court yard".
- * @param description The room's description.
- */
- 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).
- * @param north The north exit.
- * @param east The east east.
- * @param south The south exit.
- * @param west The west exit.
- */
- 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.
- */
- public String getDescription()
- {
- return description;
- }
- /**
- * Exercise 8.6
- */
- public Room getExit(String direction)
- {
- if(direction.equals("north")) {
- return northExit;
- }
- if(direction.equals("east")) {
- return eastExit;
- }
- if(direction.equals("south")) {
- return southExit;
- }
- if(direction.equals("west")) {
- return westExit;
- }
- return null;
- }
- /**
- * Exercise 8.7
- * Return a description of the room's exits,
- * for example, "Exits: north west".
- * @return A description of the available exits.
- */
- public String getExitString()
- {
- String exitString = "Exits: ";
- if(northExit != null) {
- exitString += "north";
- }
- if(eastExit != null) {
- exitString += "east";
- }
- if(southExit != null) {
- exitString += "south";
- }
- if(westExit != null) {
- exitString += "west";
- }
- return exitString;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement