TUGAS PBO-C Pertemuan-6: World of Zuul

  TUGAS PBO-C Pertemuan-6 : World of Zuul

   
         Pada pertemuan keenam kelas PBO-C, saya diberi tugas untuk membuat Program World of Zuul dengan menggunakan Blue-J. World of Zuul itu tersendiri yaitu mengimplementasikan prinsip-prinsip  dalam membuat program yaitu loose coupling dan high cohesion.


Pada program World of Zuul ini terdapat 5 Class yang terdiri dari :

      

1. Source code Command Class : 

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);
    }
}


2. Source code WordsCommand Class : 

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;
    }
}


3. Source code Game Class : 

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
        }
    }
}


4. Source code Room Class : 

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;
    }
 
}


5. Source code Parser Class :

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);
    }
}



Hasil Programmnya :




Sekian tugas pbo pertemuan ke-6 saya, mohon maaf jika ada kesalahan kata, sekian terima kasih.
















Komentar

Postingan populer dari blog ini

EAS RK A - 2022

EAS PBKK - A : 1-4

TUGAS PBKK - A Pertemuan - 7 Membuat Aplikasi BMI Calculator dengan XAMARIN