aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--report/progression.tex31
-rw-r--r--src/esieequest/Command.java37
-rw-r--r--src/esieequest/Game.java201
-rwxr-xr-xsrc/esieequest/Main.java5
-rw-r--r--src/esieequest/Room.java78
-rw-r--r--src/esieequest/package-info.java5
6 files changed, 263 insertions, 94 deletions
diff --git a/report/progression.tex b/report/progression.tex
index cef3a50..15709c5 100644
--- a/report/progression.tex
+++ b/report/progression.tex
@@ -10,20 +10,49 @@
10 10
11\subsection{printLocationInfo} 11\subsection{printLocationInfo}
12 12
13This code duplication has been previously avoided with the printRoomInfo()
14method.
15It has been renamed to printLocationInfo(), as part of the commit e52a34789, to
16match the exercise.
17
13\subsection{getExit} 18\subsection{getExit}
14 19
20The exit attributes have been made private and a getter was added in commit
2153c427ff3. A switch statement has been used instead of multiple if statements.
22
15\subsection{getExitString} 23\subsection{getExitString}
16 24
25This method has been added as part of commit ca65af2e2.
26
17\subsection{HashMap, setExit} 27\subsection{HashMap, setExit}
18 28
29Room exits are now stored in an HashMap since commit c9d890b9b. The setExits()
30method has been replaced by setExit() which takes advantages of the HashMap.
31
19\subsection{Vertical direction} 32\subsection{Vertical direction}
20 33
21\subsection{keySet} 34In commit 4145a5e8c, the getExitString() method has been modified to be able to
35print the availability of the new exits, used in the stairwell at wing 3. Due
36to the architecture of these rooms, the side exits that were previously settled
37to link them have been kept.
38
39\subsection{keySet ?}
40
41The keySet() method of the class HashMap returns a Set of the keys contained in
42the map.
22 43
23\subsection{getExitString ?} 44\subsection{getExitString ?}
24 45
46The getExitString() method returns a String listing the room's exits.
47To achieve that, it iterates through the exits Map's keys, that is a Set of
48Strings, appending each one to the String that it returns.
49
25\subsection{getLongDescription} 50\subsection{getLongDescription}
26 51
52The Room class now uses the previously explained getExitString() method and
53includes the getLongDescription() method that returns the full description of
54the room since commit e510b08d0.
55
27\subsection{Object diagram} 56\subsection{Object diagram}
28 57
29\subsubsection{Changes on execution} 58\subsubsection{Changes on execution}
diff --git a/src/esieequest/Command.java b/src/esieequest/Command.java
index de6b853..fd05930 100644
--- a/src/esieequest/Command.java
+++ b/src/esieequest/Command.java
@@ -3,6 +3,17 @@ package esieequest;
3/** 3/**
4 * A text command that triggers an action in the game. 4 * A text command that triggers an action in the game.
5 * 5 *
6 * This class holds information about a command that was issued by the user. A
7 * command currently consists of two strings: a command word and a second word
8 * (for example, if the command was "take map", then the two strings obviously
9 * are "take" and "map").
10 *
11 * The way this is used is: Commands are already checked for being valid command
12 * words. If the user entered an invalid command (a word that is not known) then
13 * the command word is <null>.
14 *
15 * If the command had only one word, then the second word is <null>.
16 *
6 * @author Pacien TRAN-GIRARD 17 * @author Pacien TRAN-GIRARD
7 * @author Benoit LUBRANO DI SBARAGLIONE 18 * @author Benoit LUBRANO DI SBARAGLIONE
8 * 19 *
@@ -12,23 +23,49 @@ public class Command {
12 private String aCommandWord; 23 private String aCommandWord;
13 private String aSecondWord; 24 private String aSecondWord;
14 25
26 /**
27 * Create a command object. First and second word must be supplied, but
28 * either one (or both) can be null.
29 *
30 * @param firstWord
31 * The first word of the command. Null if the command was not
32 * recognised.
33 * @param secondWord
34 * The second word of the command.
35 */
15 public Command(final String pCommandWord, final String pSecondWord) { 36 public Command(final String pCommandWord, final String pSecondWord) {
16 this.aCommandWord = pCommandWord; 37 this.aCommandWord = pCommandWord;
17 this.aSecondWord = pSecondWord; 38 this.aSecondWord = pSecondWord;
18 } 39 }
19 40
41 /**
42 * Return the command word (the first word) of this command. If the command
43 * was not understood, the result is null.
44 *
45 * @return The command word.
46 */
20 public String getCommandWord() { 47 public String getCommandWord() {
21 return this.aCommandWord; 48 return this.aCommandWord;
22 } 49 }
23 50
51 /**
52 * @return The second word of this command. Returns null if there was no
53 * second word.
54 */
24 public String getSecondWord() { 55 public String getSecondWord() {
25 return this.aSecondWord; 56 return this.aSecondWord;
26 } 57 }
27 58
59 /**
60 * @return true if this command was not understood.
61 */
28 public boolean isUnknown() { 62 public boolean isUnknown() {
29 return this.aCommandWord == null; 63 return this.aCommandWord == null;
30 } 64 }
31 65
66 /**
67 * @return true if the command has a second word.
68 */
32 public boolean hasSecondWord() { 69 public boolean hasSecondWord() {
33 return this.aSecondWord != null; 70 return this.aSecondWord != null;
34 } 71 }
diff --git a/src/esieequest/Game.java b/src/esieequest/Game.java
index 89b7318..638c9b8 100644
--- a/src/esieequest/Game.java
+++ b/src/esieequest/Game.java
@@ -3,6 +3,10 @@ package esieequest;
3/** 3/**
4 * The game engine. 4 * The game engine.
5 * 5 *
6 * This class creates and initializes all the others: it creates all rooms,
7 * creates the parser and starts the game. It also evaluates and executes the
8 * commands that the parser returns.
9 *
6 * @author Pacien TRAN-GIRARD 10 * @author Pacien TRAN-GIRARD
7 * @author Benoit LUBRANO DI SBARAGLIONE 11 * @author Benoit LUBRANO DI SBARAGLIONE
8 * 12 *
@@ -12,13 +16,19 @@ public class Game {
12 private Room aCurrentRoom; 16 private Room aCurrentRoom;
13 private Parser aParser; 17 private Parser aParser;
14 18
19 /**
20 * Create the game and initialize its internal map.
21 */
15 public Game() { 22 public Game() {
16 this.createRooms(); 23 this.createRooms();
17 this.printWelcome(); 24 this.printWelcome();
18 this.printRoomInfo(); 25 this.printLocationInfo();
19 this.play(); 26 this.play();
20 } 27 }
21 28
29 /**
30 * Main play routine. Loops until end of play.
31 */
22 private void play() { 32 private void play() {
23 aParser = new Parser(); 33 aParser = new Parser();
24 boolean vFinished = false; 34 boolean vFinished = false;
@@ -30,6 +40,9 @@ public class Game {
30 System.out.println("Thank you for playing. Good bye."); 40 System.out.println("Thank you for playing. Good bye.");
31 } 41 }
32 42
43 /**
44 * Create all the rooms and link their exits together.
45 */
33 private void createRooms() { 46 private void createRooms() {
34 // create rooms 47 // create rooms
35 Room vAmphitheaterSeat = new Room("in the amphitheater"); 48 Room vAmphitheaterSeat = new Room("in the amphitheater");
@@ -78,78 +91,101 @@ public class Game {
78 Room vOffscriptMovingcharacterMo = new Room("in M-O's room"); 91 Room vOffscriptMovingcharacterMo = new Room("in M-O's room");
79 92
80 // connect rooms (N, W, S, E) 93 // connect rooms (N, W, S, E)
81 vAmphitheaterSeat.setExits(vAmphitheaterStage, null, null, null); 94 vAmphitheaterSeat.setExit("north", vAmphitheaterStage);
82 vAmphitheaterStage.setExits(null, vCafeteria, null, null); 95 vAmphitheaterStage.setExit("west", vCafeteria);
83 96
84 vCafeteriaStreet.setExits(null, null, vCafeteria, vEsieespaceStreet); 97 vCafeteriaStreet.setExit("south", vCafeteria);
85 vCafeteria.setExits(vCafeteriaStreet, null, null, vAmphitheaterStage); 98 vCafeteriaStreet.setExit("east", vEsieespaceStreet);
86 99 vCafeteria.setExit("north", vCafeteriaStreet);
87 vEsieespaceStreet.setExits(null, vCafeteria, vEsieespaceFront, vEntranceStreet); 100 vCafeteria.setExit("east", vAmphitheaterStage);
88 vEsieespaceFront.setExits(vEsieespaceStreet, null, null, vEsieespaceEntrance); 101
89 vEsieespaceEntrance.setExits(vEsieespace, vEsieespaceFront, null, null); 102 vEsieespaceStreet.setExit("west", vCafeteria);
90 vEsieespace.setExits(null, null, vEsieespaceEntrance, null); 103 vEsieespaceStreet.setExit("south", vEsieespaceFront);
91 104 vEsieespaceStreet.setExit("east", vEntranceStreet);
92 vClubnixStreet.setExits(null, vWingStreet, vClubnixFront, null); 105 vEsieespaceFront.setExit("north", vEsieespaceStreet);
93 vClubnixFront.setExits(vClubnixStreet, null, null, vClubnixEntrance); 106 vEsieespaceFront.setExit("east", vEsieespaceEntrance);
94 vClubnixEntrance.setExits(vClubnix, vClubnixFront, null, null); 107 vEsieespaceEntrance.setExit("north", vEsieespace);
95 vClubnix.setExits(null, null, vClubnixEntrance, null); 108 vEsieespaceEntrance.setExit("west", vEsieespaceFront);
96 109 vEsieespace.setExit("south", vEsieespaceEntrance);
97 vEntranceStreet.setExits(null, vEsieespaceStreet, vEntranceStairs, vWingStreet); 110
98 vEntranceStairs.setExits(vEntranceStreet, null, vEntranceRoundabout, null); 111 vClubnixStreet.setExit("west", vWingStreet);
99 vEntranceRoundabout.setExits(vEntranceStairs, null, null, null); 112 vClubnixStreet.setExit("south", vClubnixFront);
100 113 vClubnixFront.setExit("north", vClubnixStreet);
101 vWingStreet.setExits(vWingCorridorOne, vEntranceStreet, null, vClubnixStreet);