-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRapport.tex
332 lines (215 loc) · 13.1 KB
/
Rapport.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
\documentclass[twoside,french]{report}
\usepackage[francais]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[letterpaper]{geometry}
\usepackage{amsmath}
\usepackage{graphicx}
% For source code coloring and formatting
\usepackage{listings}
\lstset{mathescape,basicstyle=\ttfamily}% Allow escaping to LaTeX inside $..$
\usepackage[pdftex,
pdfauthor={Guillaume Legrain & Florian Martin},
pdftitle={Projet Java A3P},
colorlinks
]{hyperref}
\setlength{\topmargin}{-0.5in}
\setlength{\textheight}{9in}
\setlength{\oddsidemargin}{.125in}
\setlength{\textwidth}{6.25in}
%\setcounter{chapter}{1}
\begin{document}
\begin{titlepage}
\title{Projet Java A3P}
\date{\today}
\author{Guillaume Legrain \\
Florian Martin \\
Groupe 3J E3S}
\maketitle
%\includegraphics[scale=0.8]{graphics/Plan-Projet-1.png}
%\begin{abstract}
% Pac-Man dans un nouveau monde, sous un nouvel angle.\vspace{-2ex}
%\end{abstract}
\end{titlepage}
\tableofcontents
\chapter{Présentation du projet}
Vous êtes Pac-Man, perdu dans un étrange labyrinthe peuplé de fantômes. Vous voulez vous échapper.
Mais il faut trouver la clef de la sortie ainsi que des fruits pour affronter les fantômes qui en
bloquent l’accès.
\includegraphics[scale=0.8]{graphics/Plan-Projet-1.png}
\section{Buts}
\begin{itemize}
\item But principal: trouver la clef pour pouvoir ouvrir la porte et sortir du labyrinthe.
\item Les fantômes sont dangereux ! Il faut donc trouver et manger assez de fruits pour
pouvoir les affronter.
\item Pour aller plus vite, Pac-Man peut utiliser des téléporteurs. Mais attention, ils ne
sont pas toujours très fiable et peuvent parfois conduire à des pièces sans issues.
\end{itemize}
\section{Idées ...}
Note: Tous ces points ne seront pas forcément implémentés vu que nous ne pouvons pas encore
vraiment savoir ce qui est envisageable à notre niveau.
\begin{itemize}
\item Chaque case du labyrinthe sera en fait une "pièce" avec des sorties
(Nord, Sud, Est, West)
\item Le joueur pourra choisir parmi plusieurs labyrinthes ( peut être même en
créer lui-même, dans un fichier que le jeu va "parser" avant de démarrer). %Une première approche
%sera d'essayer de charger le niveau enregistré au format JSON ou XML et de le parser. %avec
%\hyperreff{https://github.com/douglascrockford/JSON-java}{JSON-java} ou \href{https://code.google.com/p/google-gson/}{google-gson}
%par exemple.
\item EN PLUS de la console (avec le "prompt"), le joueur pourra se déplacer avec les
touches du clavier (Up, down, left, right).
\item Le Pac-Man se déplace aussi, en temps réel sur l'écran.
\item Dessiner le plan du labyrinthe en Java (ou autre si mieux ...) suivant sa description
plutôt que d'afficher une ou des images statiques.
\item Créer une carte évolutive qui se met a jour lors du passage dans une piece.
\item Imposer un certain nombre de fruit pour vaincre un type de fantôme.
\item Insérer une musique dans le jeu.
\item Insérer des sons lors de la récupération d'objet (clé, fruit) ou l'appartion d'un fantôme
\end{itemize}
\section{Organisation d'un plan}
\includegraphics[scale=0.4]{graphics/Plan-Projet-1_numbered.png} \\
Chaque "Room" est représentée par rij indiquant sa position sur le plan.
Chaque "Room" possède des attributs indiquant la position de la case suivante ou un mur (avec un \lstinline|null| )
\chapter{Avancement des exercices}
\subsection*{Exercice 7.0 : }
Création de la page web
\subsection*{Exercice 7.1 : }
Découverte de zuul-bad
\subsubsection*{La classe Room}
Création de la première salle avec pour attributs la description de la salle et quatre sorties (Nord, Sud, Est, West)
\subsubsection*{La classe Command}
Création de la commande « go ». On doit déterminer dans un premier si un ou deux mots ont été tapés. Ensuite on doit vérifier si les commandes tapés sont valides d’où l’introduction d’une fonction booléenne « isUnknown »
\subsubsection*{La classe Game}
\begin{itemize}
\item Création d’une méthode « createRooms » ayant pour but d’initialiser le jeux (les salles, les sorties, le lieu courant)
\item La procédure « goRoom » doit s’assurer de la présence d’un second mot (direction) et doit vérifier l’égalité de ce second mot avec une direction avec la fonction « equals ». Si les conditions sont réunis « goRoom » change la current room
\item On ajoute de nouvelles méthodes : 2 procédures renvoyant un message de bienvenue et un message d’aide. La première doit pouvoir faire appel à la current room et à ses différentes sorties. La seconde doit pouvoir renvoyer le nom de chaque commande disponible. On crée donc des procédure auxquelles on fera appel pour renvoyer ces informations et cela indépendamment du message écrit.
\item On crée une procédure « processCommand » renvoyant un booléen, capable d’appeler la bonne méthode en fonction de la commande passée en paramètre
\end{itemize}
\subsubsection*{Les classes CommandWords et Parser}
La classe CommandWords contient les mots de commande acceptés par le jeu\\
La classe Parser lie les commandes tapée au clavier, vérifie si la commande est valide et construit l’objet « Command » correspondant auquel on fera appel\\
V Jeu fonctionnel\\
On ajoute dans la classe Game un attribut aParser et une procédure « play» qui doit lire répétitivement les commandes tapé au clavier et les exécuter jusqu’à ce que l’on tape « quit ». On introduit une boucle while qui s’exécutera jusqu’à ce qu’une variable booléenne soit égal à vrai. Ce changement d’état aura lieu lorsque l’on tapera la commande « quit ».\\
\subsection*{Exercice 7.1.1 : Thème}
\subsection*{Exercice 7.2.1 : La classe Scanner}
On crée un objet Scanner possédant le clavier en tant que paramètre. Les lignes de caractères tapés au clavier seront retranscrites dans une String.\\
\subsection*{Exercice 7.4 : Room}
On intègre dans le jeu les différentes salles qui compose notre scénario\\
\subsection*{Exercice 7.5 : printLocationInfo}
On ajoute une méthode affichant les informations de la current Room (nom pour l’instant)\\
\subsection*{Exercice 7.6 : getExit}
On ajoute une méthode renvoyant les sorties de la current Room
\subsection*{Exercice 7.7 : getExitString}
On modifie la méthode « printLocationInfo » pour qu’elle affiche aussi les sorties de la current Room. On fait appel pour cela à la méthode « getExit »
\subsection*{Exercice 7.8 : HashMap, setExit}
On modifie la classe Room pour qu’elle possède un attribut aExit sous la forme d’une HashMap regroupant ainsi toutes les sorties.
\subsection*{Exercice 7.9 : keySet}
\subsection*{Exercice 7.10 : getExitString CCM ?}
The getExitString method builds a String containing all the keys of the exits HashMap (i.e possible Exits) and returns this String.
\subsection*{Exercice 7.11 : getLongDescription}
+ Created getLongDescription() method calling the getExitString() method and appending additional textual information to it.
Returns a String with more information.
\subsection*{Exercice 7.14 : look}
On ajoute une commande « look » faisant appel à la procédure « getLongDesciption » pour que le joueur puisse obtenir les informations de la current Room
\subsection*{Exercice 7.15 : eat}
On ajoute une commande « eat » qui pour l’instant ne renvoie qu’une String mais aura une interaction futur lorsque on ajoutera les Items
\subsection*{Exercice 7.16 : showAll, showCommand}
On ajoute une nouvelle méthode faisant appel à une boucle « for each » qui parcourt les commandes que l’on ajoute dans le jeu
\subsection*{Exercice 7.18 : getCommandList}
On ajoute une nouvelle méthode renvoyant les noms des commandes que l’on ajoute dans le jeu
\subsection*{Exercice 7.18.1 : comparaison à zuul-better}
Room class:
+ HashMap aExits
+ SetExits()
+ getExit(String direction)
Game class:
Changed the goRoom() method to get the nextRoom and checking it exists instead of comparing each directions.
\subsection*{Exercice 7.18.2 : StringBuilder}
Le StringBuilder permet d’ajouter à une première String de nouveau charactères (ex : on ajoute la liste des commandes disponibles à la String « les actions que vous pouvez executer sont : » ) et ainsi de pouvoir une seul et unique String
\subsection*{Exercice 7.18.3 : recherche d’image}
Creation des images (image identique pour chaque room mais avec déplacement du personnage).
(Vue aérienne)
\subsection*{Exercice 7.18.4 : titre du jeu}
TelePac pour faire référence aux téléporteurs et à Pac-Man tout en conservant un nom court et accrocheur
\subsection*{Exercice 7.18.5 : HashMap Rooms}
On créé une Hashmap contenant toutes les Room ce qui facilite l’organisation vu que le jeu contient 49 rooms
\subsection*{Exercice 7.18.6 : zuul-with-image}
On ajoute des images au jeu
\subsection*{Exercice 7.18.8 :}
On ajoute des méthodes nécessitant un keyListenner afin de créer des boutons appelant les méthodes « quit », « look », …
\subsection*{Exercice 7.20 : Item}
On ajoute un objet Item a une Room avec pour attribut son nom et un poids
\subsection*{Exercice 7.21 : Item description}
Item Class:
+ getItemDescription() used by the GameEngine Class to follow responsibility driven desing.
Any changes made to the description and the message insn't affected by the way it is presented.
\subsection*{Exercice 7.22 : Items}
On cherche à ajouter un nombre illimité d’objet dans une même Room. Pour
cela on change l’attribut de la Room « Item » pour un attribut « Items » sous la
forme d’une collection. On implémente donc deux méthodes « addItem » et
« removeItem » afin d’ajouter et de supprimer les objets d’une même Room
\subsection*{Exercice 7.23 : Back}
\subsection*{Exercice 7.24 : Back test}
\subsection*{Exercice 7.25 : Back back}
\subsection*{Exercice 7.26 : Stack}
\subsection*{Exercice 7.27 : Tests}
\subsection*{Exercice 7.28 : Automatisation des tests}
\subsection*{Exercice 7.29 : Player}
\subsection*{Exercice 7.30 : Take, Drop}
\subsection*{Exercice 7.31 : Porteur plusieurs items}
\subsection*{Exercice 7.32 : Poids max}
On ajoute un attribut à la classe « Player » : PoidsPorté et un autre à la classe
« Items » : poids. On ajoute aussi dans les méthodes « addItem » et
« removeItem » de la classe « Item » et de la classe « Player » une ligne de
commande venant ajouter ou soustraire l’attribut poids de l’objet à l’attribut
PoidsPorté de la classe Items. On implémente enfin une vérification juste avant
l’appel de la méthode « addItem » par la méthode « drop » s’assurant que le
PoidsPorté est inférieur d’un PoidsMax.
\subsection*{Exercice 7.33 : Inventaire}
On ajoute un stringbuilder ajoutant et retirant au fur et à mesure les noms des
objets ajoutés et retiré par la méthode « addItem » à l’attribut Items du Player.
\subsection*{Exercice 7.34 : Magic cookie}
+ eat cookie redirects to take cookie
Bad implementation: the pickUpItem() method checks to see if the picked up Item is a magic cookie, and multiplies by 10 the timeLimit (i.e: 10 more moves)
\subsection*{Exercice 7.35 : Zuul-with-enums-v1}
+ CommandWord class
command words are nows constants (e.g: BACK, TEST), regardless of the language.
\subsection*{Exercise 7.40:}
We have to add LOOK("look") to CommandWord and implement a action in Game.processCommand
\subsection*{Exercise 7.41:}
If we change the word associated with the help command in CommandWord, this change automatically reflected in the welcome text when you start the game.
\subsection*{Exercise 7.42:}
TODO: implement mvc
+ Added KeyListener to change room.
You can now go to another room using the keyboard's arrow keys.
\subsection*{Exercise 7.43: (Trap door)}
trap door player in room r06
TODO: empty previous room stack if trapdoor (the back command shouln't work)
TODO: show message
\subsection*{Exercise 7.44: (beamer)}
seems ok
\subsection*{Exercise 7.45: (locked door) (opt.)}
TODO: the player needs to find a key to open a locked door
NOTE:use heritage
\subsection*{Exercise 7.45.1: (update test files)}
TODO
\subsection*{Exercise 7.45.2: (update javadoc)}
TODO
\subsection*{Exercise 7.46: (TransporterRoom)}
+ Created a new TransporterRoom subclass from Room overriding getExit
Change r60, .. instantiation to TransporterRoom instead of Room
+ Added a getRooms method to the GameModel to get a Room HasMap
Converter the HashMap into a ArryList to select a value from a Random integer instead of a string description.
\subsection*{Exercise 7.46.1: (alea)}
TODO
\subsection*{Exercise 7.46.2:}
Beamer was already a item subclass
+ Created TrapRoom subclass (TODO: clear history when entering the room)
\subsection*{Exercise 7.53: (main)}
+ Added public static void main(String[] args) to instantiate a new game
\subsection*{Exercise 7.54: (without BlueJ)}
Launch the game using \"java Game\" in the game's directory
\subsection*{Exercise 7.58: (.jar)}
jar cmf META-INF/MANIFEST.MF ~/Desktop/TelePac2.jar ./*
\end{document}