Question
Need to complete the following parts for a Zuul game code: Part 4: Another new command: back o The back command can have only one
Need to complete the following parts for a Zuul game code:
Part 4: Another new command: "back" o The "back" command can have only one word. If there is a second word in the command, just print "Back what?". o The "back" command takes you to the previous room that you visited. (The one you were in immediately before this one.) Print a message to say that you have gone back. o If you are at the beginning of the game, you cannot go back, so just print a message explaining this. o You will need to make various changes to implement this command correctly. o Hint: If you invoke the "back" command twice in a row, where should you be?
Part 6: Another new command "stackBack" o "stackBack" is a one word command. o "stackBack" allows you to go back one room at a time as far as you like (until you reach the beginning of the game). o If you are at the beginning of the game, you cannot go "stackBack", so just print a message explaining this. o You will need to use a Stack (see the Java documentation for information on this class). o Again, you will need to make various changes to implement this command correctly. o Hint: If you invoke the "stackBack" command twice in a row, where should you be? (The answer will normally be different from that of part 4.) o Hint: If you invoke "stackBack" enough times, you will eventually return to the beginning of the game.
Code:
import java.util.*;
/**
*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, make 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.
*
* @authorMichael Kolling and David J. Barnes
* @version 2006.03.30
*
* @author Matthieu Bourbeau
* @version 01 February 11, 2019
*/
public class Game
{
private Parser parser;
private Room currentRoom;
private Room previousRoom;
private Stack
/**
* Create the game and initialise its internal map.
*/
public Game()
{
createRooms();
parser = new Parser();
}
/**
* Make 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");
// create some items
Item desk = new Item("Desk", 10);
Item chair = new Item("Chair", 5);
Item beer = new Item("Beer", 0.5);
Item shovel = new Item("Shovel", 2);
Item podium = new Item("Podium", 5);
// add items to rooms
outside.addItem(shovel);
theatre.addItem(desk);
theatre.addItem(chair);
theatre.addItem(podium);
pub.addItem(beer);
pub.addItem(beer);
office.addItem(desk);
lab.addItem(chair);
lab.addItem(beer);
// initialise room exits
outside.setExit("east", theatre);
outside.setExit("south", lab);
outside.setExit("west", pub);
theatre.setExit("west", outside);
pub.setExit("east", outside);
lab.setExit("north", outside);
lab.setExit("east", office);
office.setExit("west", 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();
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("look")) {
look(command);
}
else if (commandWord.equals("eat")) {
eat(command);
}
else if (commandWord.equals("back")) {
back(command);
}
else if (commandWord.equals("stackBack")) {
stackBack(command);
}
else if (commandWord.equals("quit")) {
wantToQuit = quit(command);
}
// else command not recognised.
return wantToQuit;
}
// implementations of user commands:
/**
* Print out some help information.
* Here we print a 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(parser.getCommands());
}
/**
* Try to go to one direction. If there is an exit, enter the new
* room, otherwise print an error message.
*
* @param command The command to be processed
*/
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 {
previousRoom = currentRoom;
currentRoom = nextRoom;
System.out.println(currentRoom.getLongDescription());
}
}
private void look(Command command)
{
if(command.hasSecondWord())
{
System.out.println("Look what?");
return;
}
System.out.println(currentRoom.getLongDescription());
}
private void eat(Command command)
{
if(command.hasSecondWord())
{
System.out.println("Eat what?");
return ;
}
System.out.println("You have eaten now and you are not hungry anymore!");
}
private void enterRoom(Room nextRoom)
{
previousRoom = currentRoom;
currentRoom = nextRoom;
System.out.println(currentRoom.getLongDescription());
}
private void back(Command command)
{
if(command.hasSecondWord()) {
System.out.println("Back what?");
return;
}
if(previousRoom == null) {
System.out.println("Sorry, cannot go back.");
return;
}
roomStack.push(currentRoom);
Room temp = currentRoom;
currentRoom = previousRoom;
previousRoom = temp;
System.out.println("You have gone back to the previous room.");
System.out.println(currentRoom.getLongDescription());
}
private void stackBack(Command command)
{
if(command.hasSecondWord())
{
System.out.println("stackBack what?");
return;
}
if (previousRoom == null)
{
System.out.println("Sorry, cannot go stackBack.");
return;
}
previousRoom = currentRoom;
currentRoom = roomStack.pop();
System.out.println("You have gone stackBack:");
System.out.println(currentRoom.getLongDescription());
}
/**
* "Quit" was entered. Check the rest of the command to see
* whether we really quit the game.
*
* @param command The command to be processed
* @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
}
}
}
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started