Tugas Pertemuan 8 Pemrograman Berbasis Objek (PBO) A 2024

Nama : Amadeo Yesa

NRP : 5025231160

Kelas : A

Tahun : 2024


Pada pertemuan 8, diberikan studi kasus sebuah Game, World of Zuul. Game ini merupakan game petualangan dimana terdapat 4 arah pada tiap ruangannya, north, east, south, dan west. Pemain dapat berpindah ruangan dengan command-command yang ada.

Dalam implementasi Game World of Zuul terdapat 5 class yang digunakan sebagai berikut:

  • Game: Class utama game ini yang mengatur keseluruhan game terhadap input dari pemain.
  • Room: Class yang menggambarkan sebuah ruangan dalam game ini.
  • Command: Class yang menggambarkan command dari pemain yang diteruskan ke Parser untuk diolah dan kemudian diterima oleh Class Game.
  • Parser: Class yang berfungsi membaca input dari pemain dan diolah menjadi object Command.
  • CommandWords: Class yang mendefinisikan command-command game yang valid.


Class Game

public class Game {
    private Parser parser;
    private Room currentRoom;

    public Game(){
        createRooms();
        parser = new Parser();
    }

    private void createRooms(){
        Room outside, theatre, pub, lab, office;

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

        outside.setExits(null, theatre, lab, pub);
        theatre.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;
    }

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

    private void printWelcome(){
        System.err.println();
        System.out.println("Welcome to Adventure!");
        System.out.println("Adventure 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.println("north ");
        }
        if(currentRoom.eastExit != null){
            System.out.println("east ");
        }
        if(currentRoom.southExit != null){
            System.out.println("south ");
        }
        if(currentRoom.westExit != null){
            System.out.println("west ");
        }
        System.out.println();
    }

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

        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.println("Exits: ");
            if(currentRoom.northExit != null){
                System.out.println("north ");
            }
            if(currentRoom.eastExit != null){
                System.out.println("east ");
            }
            if(currentRoom.southExit != null){
                System.out.println("south ");
            }
            if(currentRoom.westExit != null){
                System.out.println("west ");
            }
            System.out.println();
        }
    }

    private boolean quit(Command command){
        if(command.hasSecondWord()){
            System.out.println("Quit what?");
            return false;
        }else{
            return true;
        }
    }
}

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

    public String getDescription(){
        return description;
    }
}

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

    public Command(String firstWord, String secondWord){
        commandWord = firstWord;
        this.secondWord = secondWord;
    }

    public String getCommandWord(){
        return commandWord;
    }

    public String getSecondWord(){
        return secondWord;
    }

    public boolean isUnknown(){
        return (commandWord == null);
    }

    public boolean hasSecondWord(){
        return (secondWord != null);
    }
}

Class Parser
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Parser {
    private CommandWords commands;

    public Parser(){
        commands = new CommandWords();
    }

    public Command getCommand(){
        String inputLine = "";
        String word1;
        String word2;

        System.out.print("> ");

        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();
        }else{
            word1 = null;
        }

        if(tokenizer.hasMoreTokens()){
            word2 = tokenizer.nextToken();
        }else{
            word2 = null;
        }

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

Class CommandWords
public class CommandWords {
    private static final String validCommands[] = {
        "go", "quit", "help", "look"
    };

    public CommandWords(){

    }

    public boolean isCommand(String aString){
        for(int i=0;i<validCommands.length;i++){
            if(validCommands[i].equals(aString)){
                return true;
            }
        }

        return false;
    }
}

Main
public class Main {
    public static void main(String[] args) {
        Game game = new Game();
        game.play();
    }
}
Main yang menjalankan keseluruhan program Game World of Zuul.


Class Diagram














Hasil





























Source Code:

Comments

Popular posts from this blog

Evaluasi Tengah Semester Pemrograman Berbasis Objek (PBO) A 2024

Tugas Pertemuan 7 Pemrograman Berbasis Objek (PBO) A 2024

Evaluasi Akhir Semester Pemrograman Berbasis Objek (PBO) A 2024