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
Post a Comment