Tugas 6 PBO - Game World of Zuul

 

Muhammad Izzuddin Al Islami

05111740000035 


Deskripsi

Sebuah game sederhana dari buku Object First With Java Chapter 7. Game World of Zuul merupakan game adventure dimana pemain dapat mengunjungi sebuah universitas dan berpindah dari satu ruangan atau tempat ke tempat lainnya.

Class Diagram

 

Dekronstruksi Module/Class yang dibutuhkan

Aplikasi Game of Zuul memerlukan beberapa modul sebagai berikut:

  1. Game (Class utama yang berisi implementasi game dengan tampilan awal dan method kelas lain)
  2. Parser (Class yang mengolah dan memarsing input pengguna)
  3. Room (Class ruangan yang ada dalam permainan, berisi deskripsi dan jalan keluar)
  4. Command (Class berisi perintah yang didapat setelah parsing input)
  5. CommandWords (Class ini berisi himpunan kata perintah yang valid)

 

Implementasi (Source Code)

  1. Game.java
  2.  public class Game {  
       private Parser parser;  
       private Room currentRoom;  
       /**  
        * Constructor  
        */  
       public Game(){  
         createRooms();  
         parser = new Parser();  
       }  
       /**  
        * Inisialisasi map  
        */  
       private void createRooms(){  
         Room outside, theater, pub, lab, office;  
         //membuat room  
         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");  
         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;  
       }  
       /**  
        * Play the game  
        */  
       public void play(){  
         printWelcome();  
         boolean finished = false;  
         while(!finished){  
           Command command = parser.getCommand();  
           finished = processCommand(command);  
         }  
         System.out.println("Thank you for playing. Good bye^^");  
       }  
       /**  
        * Welcome screen  
        */  
       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.println("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();  
       }  
       /**  
        * Process command dari user  
        */  
       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;  
       }  
       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");  
       }  
       private void goRoom(Command command){  
         if(!command.hasSecondWord()){  
           System.out.println("Go where?");  
           return;  
         }  
         String direction = command.getSecondWord();  
         //Pindah ruangan.  
         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();  
         }  
       }  
       private boolean quit(Command command){  
         if(command.hasSecondWord()) {  
           System.out.println("Quit what?");  
           return false;  
         }  
         else{   
           return true;  
         }  
       }  
     }  
    
  3. Parser.java
  4.  import java.util.Scanner;  
     /**  
      * Class Parser, memarsing input user dan mereturn command  
      */  
     public class Parser{  
       private CommandWords commands;  
       private Scanner reader;  
       /**  
        * Constructor.  
        */  
       public Parser(){  
         commands = new CommandWords();  
         reader = new Scanner(System.in);  
       }  
       /**  
        * @return Perintah selanjutnya dari user.  
        */  
       public Command getCommand(){  
         String inputLine;  
         String word1 = null;  
         String word2 = null;  
         System.out.print("> ");  
         inputLine = reader.nextLine();  
         Scanner tokenizer = new Scanner(inputLine);  
         if(tokenizer.hasNext()){  
           word1 = tokenizer.next();  
           if(tokenizer.hasNext()){  
             word2 = tokenizer.next();  
           }  
         }  
         if(commands.isCommand(word1)){  
           return new Command(word1, word2);  
         }  
         else{  
           return new Command(null, word2);  
         }  
       }  
     }  
    
  5. Room.java
  6.  public class Room {  
       public String description;  
       public Room northExit;  
       public Room southExit;  
       public Room eastExit;  
       public Room westExit;  
       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;  
         }  
       }  
       /**  
        * @return Deskripsi dari room  
        */  
        public String getDescription(){  
          return description;  
        }  
     }  
    
  7. Command.java
  8.  public class Command {  
       private String commandWord;  
       private String secondWord;  
       /**  
        * Constructor  
        */  
       public Command(String firstWord, String secondWord){  
         commandWord = firstWord;  
         this.secondWord = secondWord;  
       }  
       /**  
        * Return kata perintah  
        */  
       public String getCommandWord(){  
         return commandWord;  
       }  
       /**  
        * @return Second word dari perintah. Return null jika tidak ada second word.  
        */  
       public String getSecondWord(){  
         return secondWord;  
       }  
       /**  
        * @return true jika perintah tidak dipahami.  
        */  
       public boolean isUnknown(){  
         return (commandWord==null);  
       }  
       /**  
        * @return true jika perintah memiliki kata kedua.  
        */  
       public boolean hasSecondWord(){  
         return (secondWord!=null);  
       }  
     }  
    
  9. CommandWords.java 
 /**  
  * Class CommandWords berisi list command yang valid  
  */  
 public class CommandWords{  
   private static final String[] validCommands = {"go", "quit", "help"};  
   public CommandWords()  
   {  
   }  
   public boolean isCommand(String aString){  
     for(int i=0; i < validCommands.length; i++){  
       if(validCommands[i].equals(aString)){  
         return true;  
       }   
     }  
     return false;  
   }  
 }  

 

Demo Aplikasi


 

Comments

Popular posts from this blog

ETS PBO

Tugas 2 PBO - Aplikasi Traffic Light