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.
- */
- private void createRooms()
- {
- Room outside, theater, pub, lab, office, stairsFloor1, corridor1, stairsFloor2, library, canteen, gym, classroom, examHall;
- Item textbooks, studentID;
- // 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, you can pick up your student ID from here");
- stairsFloor1 = new Room("by some stairs that lead up to floor 1");
- corridor1 = new Room("in the corridor");
- classroom = new Room("in a classroom");
- library = new Room("in the library, there may be some useful textbooks");
- canteen = new Room("in the canteen");
- gym = new Room("in the gym");
- stairsFloor2 = new Room("by some stairs that lead up to the exam hall");
- examHall = new Room("in the exam hall");
- // initialise room exits
- outside.setExit("east", theater);
- outside.setExit("south", lab);
- outside.setExit("west", pub);
- theater.setExit("west", outside);
- pub.setExit("east", outside);
- pub.setExit("south", stairsFloor1);
- lab.setExit("north", outside);
- lab.setExit("east", office);
- office.setExit("west", lab);
- stairsFloor1.setExit("up", corridor1);
- stairsFloor1.setExit("north", pub);
- corridor1.setExit("down" , stairsFloor1);
- corridor1.setExit("east" , classroom);
- classroom.setExit("north", library);
- classroom.setExit("east", canteen);
- classroom.setExit("west", corridor1);
- canteen.setExit("north", gym);
- canteen.setExit("west", classroom);
- gym.setExit("south", canteen);
- gym.setExit("west", library);
- library.setExit("east", gym);
- library.setExit("south", classroom);
- library.setExit("west", stairsFloor2);
- stairsFloor2.setExit("up", examHall);
- stairsFloor2.setExit("east", library);
- examHall.setExit("down", stairsFloor2);
- textbooks = new Item("There are some textbooks");
- studentID = new Item("This is your studentID");
- textbooks.setItem(lab, textbooks);
- studentID.setItem(office, studentID);
- 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();
- 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(currentRoom.getLongDescription());
- }
- /**
- * 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);
- }
- //else if (commandWord.equals("carry")){
- // else command not recognised.
- 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:");
- parser.showCommands();
- }
- /**
- * Try to in 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 = currentRoom.getExit(direction);
- if (nextRoom == null) {
- System.out.println("There is no door!");
- }
- else {
- currentRoom = nextRoom;
- System.out.println(currentRoom.getLongDescription());
- }
- }
- /**
- * "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
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement