Tugas 6 World of Zuul Kelas PBO C

Pada tugas kali ini, saya mencoba membuat sebuah program yang bernama "World of Zuul" dimana program ini mengimplementasikan prinsip - prinsip dalam membuat program yaitu loose coupling dan high cohesion. Coupling adalah keterikatan program ditinjau dari hubungan antar modul atau class. Sementara Cohesion adalah keterikatan program ditinjau dari hubungan antar method dalam satu class. Program "World of Zuul" ini menggunakan 5 class yaitu Class Game, Class Command, Class CommandWords, Class Room, dan Class Parser.



Source Code Class Game

/**
 * Write a description of class Game here.
 *
 * @author Aimar Wibowo
 * @version 18 November 2020
 */

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;
     
        // 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");
       
        // initialise room exits
        outside.setExits(null, theater, lab, pub);
        theater.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. Berulang hingga selesai permainan.
     */
    public void play()
    {            
        printWelcome();
 
        // enter the main command loop. Here we repeatedlu read commands and
        // execute the 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("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.
     * @param command 
     * @return bool
     */
    private boolean processCommand(Command command)
    {
        boolean wantToQuit = false;
 
        if(command.isUnknown()) {
            System.out.println("I don't understand...");
            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;
    }
 
    // Implementasi of user commands:
 
    /**
     * Print out some help information.
     * Here we print some stupid, cryptic message and ad 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"))
            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.
     * 
     * @return bool
     */
    private boolean quit(Command command)
    {
        if(command.hasSecondWord()) {
            System.out.println("Quit what?");
            return false;
        }
        else {
            return true;  // signal that we want to quit
        }
    }
}

Source Code Class Command


/**
 * Write a description of class Command here.
 *
 * @author Aimar Wibowo
 * @version 18 November 2020
 */

public class Command
{
    private String commandWord;
    private String secondWord;
 

    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.
     * @return String commandWord
     */
    public String getCommandWord()
    {
        return commandWord;
    }
 
    /**
     * Return the second word of this command. Returns null if there was no
     * second word.
     * @return String secondWord
     */
    public String getSecondWord()
    {
        return secondWord;
    }
 
    /**
     * Return true if this command was not understood.
     * @return bool
     */
    public boolean isUnknown()
    {
        return (commandWord == null);
    }
 
    /**
     * Return true if the command has a second word.
     * @return bool
     */
    public boolean hasSecondWord()
    {
        return (secondWord != null);
    }
}

Source Code Class CommandWords


/**
 * Write a description of class CommandWords here.
 *
 * @author Aimar Wibowo
 * @version 18 November 2020
 */

public 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.
     * @return bool
     */
    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;
    }
}

Source Code Class Room


/**
 * Write a description of class Room here.
 *
 * @author Aimar Wibowo
 * @version 18 November 2020
 */

public 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".
     *
     * @param String description
     */
    public Room(String description)
    {
        this.description = description;
    }
 
    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;
    }
 

    public String getDescription()
    {
        return description;
    }
 
}

Source Code Class Parser


/**
 * Write a description of class Parser here.
 *
 * @author Aimar Wibowo
 * @version 18 November 2020
 */

import java.io.BufferedReader;
import java.io.InputStreamReader; 
import java.util.StringTokenizer;
import java.lang.String;

public 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 the first word
        else
            word1=null;
        if(tokenizer.hasMoreTokens()) 
            word2 = tokenizer.nextToken();      // get the second word
        else
            word2=null;

        if(commands.isCommand(word1))
            return new Command(word1, word2);
        else
            return new Command(null, word2);
    }
}


Screenshot Cara Bermain World of Zuul



Komentar

Postingan populer dari blog ini

Final Project / EAS Kelas PBO C

ETS RK B