rapport A3P

Transcription

rapport A3P
Sainati Lucas
Informatique
16 mars 2016
Rapport A3P
-Le Detective-
-Le Detective-
1
I.B : Thème 4
I.C : Résumé du scénario 4
I.C : Plan 4
I.C : Scénario détaillé 5
I.D : Détail des lieux, items, personnages
5
I.G) Situations gagnantes et perdantes
5
I.H) Eventuellement énigmes, mini-jeux, combats, etc.
5
II. A savoir expliquer
6
Scanner :
6
HashMap : 6
Set : 6
keySet() : 6
La boucle for each :
6
ActionListener :
6
addActionListener() :
6
actionPerformed() :
7
ActionEvent :
7
getActionCommand() :
7
getSource() :
7
Stack :
7
push() :
7
pop():
7
RAPPORT - A3P
"1
empty() :
7
peek() :
7
Le Switch :
8
III. Mode d'emploi (si nécessaire, instructions d'installation ou pour
démarrer le jeu)
9
IV. Déclaration anti-plagiat
V. Exercices
9
10
Exercice 7.5
10
Exercice 7.6
10
Exercice 7.7
11
Exercice 7.8
12
Exercice 7.8.1
12
Exercice 7.9
12
Exercice 7.10
12
Exercice 7.11
12
Exercice 7.14/7.15
13
Exercice 7.16
13
Exercice 7.18
13
Exercice 7.18.1
13
Exercice 7.18.3
13
Exercice 7.18.6
13
Exercice 7.18.8
13
Exercice 7.20
14
Exercice 7.21
15
Exercice 7.22
15
Exercice 7.23
15
Exercice 7.26
16
Exercice 7.30/7.31
16
Exercice 7.31
16
Exercice 7.33
16
Exercice 7.34
17
RAPPORT - A3P
"2
Exercice 7.34.1
17
Exercice 7.35
17
Exercice 7.35.1
17
Exercice 7.41.1
17
Exercice 7.42
17
Exercice 7.42.2
17
Exercice 7.43
17
Exercice 7.44
18
Exercice 7.45.1
19
Exercice 7.45.2
19
Exercice 7.46
19
Exercice 7.46.1 Exercice non réalisé
19
Exercice 7.46
19
Exercice 7.47
20
Exercice 7.47.1
21
Exercice 7.47.2
22
Exercice 7.48
22
Exercice 7.49 Exercice non réalisé
22
Exercice 7.49.2
22
1)La porte fermée à clef
22
1)Le « mini jeu »
22
RAPPORT - A3P
"3
I.B : Thème
Phrase thème : « A Londres, un détective doit arrêter un attentat ».
I.C : Résumé du scénario
A travers ce jeu nous allons incarner un détective qui par quelques recherches va
devoir arrêter un attentat.
I.C : Plan
RAPPORT - A3P
"4
I.C : Scénario détaillé
Face à des énigmes vous allez trouver le lieu d’attentat et arrivé face à celui-ci
vous allez devoir l’empêcher.
Pour cela le joueur devra obtenir une clef en gagnant un mini jeu (calcul
simple).
Ce qui lui permettra d’entrer dans la salle où se trouve la bombe.
I.D : Détail des lieux, items, personnages
Personnage : Un Détective;
lieux : Rue, Commissariat, Laboratoire Scientifique, Bureau, Cave (Sous le bureau),
Reception.
items : - Un Journal
- Des Archives
- Une clef
- Un composant chimique
I.G) Situations gagnantes et perdantes
Situation gagnante : vous allez devoir chercher une clef dans la cave afin d’accéder à
la réception pour arrêter la bombe.
I.H) Eventuellement énigmes, mini-jeux, combats,
etc.
Mini jeux pour obtenir la clef : pas encore défini
Mini jeu de fin : résoudre un calcul simple
RAPPORT - A3P
"5
II. A savoir expliquer
Scanner :
Classe qui permet de retenir une commande tapée par un utilisateur.
Pour pouvoir l’utiliser il faut l’importer de la JDK.
HashMap :
Une HashMap est un tableau associatif mettent en relation une clef (key) et une
valeur (value).
Set :
Interface modélisant un ensemble ne pouvant pas contenir de doublons.
keySet() :
Fonction retournant un Set contenant les valeur des clefs.
La boucle for each :
Boucle permettant de parcourir une collection (ensemble d’objets) .
cela correspond en langage naturel à: « pour chaque objet de type .. de la collection
…, faire : »
Les pointillés correspondent au nom des types/collection.
ActionListener :
interface permettant de réagir aux actions d’un utilisateur (clic de la sourie ou
appuie sur la touche entrée).
Le programme va ainsi « écouter » les action de l’usager pour y répondre
correctement et cela passe tout d’abord par ajouter des actionListener par la
méthode ci dessous.
addActionListener() :
Ajoute des actionlisteners à des objets. La méthode prend en indice ‘this’ si la classe
reçoit et génère l’événement de l’utilisateur.
RAPPORT - A3P
"6
actionPerformed() :
Méthode précisant comment réagir aux différentes action de l’utilisateur.
ActionEvent :
Objet initialisé en paramètre d’actionPerformed() afin de différentier le traitement
d’action selon des cas (différents boutons par exemple).
getActionCommand() :
Méthode renvoyant une chaine de caractère correspondant au composant auquel il
à été appliqué.
getSource() :
méthode équivalente à la précédente sauf qu’à la place de r’envoyer une chaine de
caractère elle r’envoie un objet.
Stack :
Collection d’objet correspondant à un « tas» d’objet .
push() :
Méthode applicable sur une Stack qui met un objet en haut du tas.
pop():
Méthode applicable sur une Stack qui permet de récupérer l’objet en haut du tas et
de le supprimer.
empty() :
Méthode applicable sur une Stack qui vérifie si la Stack est vide ou non.
peek() :
Méthode applicable sur une Stack qui permet de récupérer l’objet en haut du tas
sans le supprimer.
RAPPORT - A3P
"7
Le Switch :
Case : les cas que l’on veut traiter
Default : valeur par défaut du switch.
Break : pour finir l’instruction (case ou default)
RAPPORT - A3P
"8
III. Mode d'emploi (si nécessaire, instructions
d'installation ou pour démarrer le jeu)
Simlement lancer le fichier jar.
IV. Déclaration anti-plagiat
Site web inspiré de Templated.
Utilisation de tutoriels pour la compréhension de certain points (Openclassroom,
tutorialspoint).
Projets fournis par Denis Bureau et projets zuul.
RAPPORT - A3P
"9
V. Exercices
Exercice 7.5
print location info : procedure qui écrit les différentes sorties du jeu.
Exercice 7.6
Acesseur des différentes sorties de la Room
RAPPORT - A3P
"10
Exercice 7.7
Méthode permettant de mettre les noms des sorties dans une String « vTotal »
RAPPORT - A3P
"11
Exercice 7.8
Intégration de l’HashMap permettant de faire coïncider une clé (ici la String
pDirection) avec une valeur (ici une Room pNeighbor)
Exercice 7.8.1
Dans la classe game du projet
Exercice 7.9
La méthode keySet() nous retourne l’ensemble des clefs de la hashmap.
Exercice 7.10
1 : Initialisation de la string returnString
String returnString = « Sorties : »;
2 : Initialisation de keys tel que keys contiendra la liste des clefs de la hashmap
Set<String> keys = exits.keySet();
3 : Initialisation de la variable exit pour que celle ci prenne la valeur de la
prochaine clef de la hashmap
for(String exit : keys)
4 : Concatenation
{ returnString += " " + exit; }
5 : On retourne la string returnString
return returnString;
Exercice 7.11
RAPPORT - A3P
"12
Exercice 7.14/7.15
on a évidemment intégrer ces méthodes dans processCommand() et dans
CommandWords
Exercice 7.16
Ajout des méthodes showAll et showCommand comme décrit dans le livre.
Exercice 7.18
implantation des changement suggérées du livre.
Exercice 7.18.1
Comparaison faite, la programme est fonctionnel.
Exercice 7.18.3
Les images du jeu sont tout simplement un plan partiel du jeu : on y voit les
différentes sorties du jeu et les items présents dans la salle où l’on se trouve.
Exercice 7.18.6
implantation et compréhension des méthodes et classes présentes dans le projet
full-with-images faite
Exercice 7.18.8
Dans La classe UserInterface
1: Initialisation du bouton
private JButton aBoutonHelp;
Dans la procédure createGui()
RAPPORT - A3P
"13
2 : Initialisation du bouton « aBoutonHelp »
aBoutonHelp = new JButton("Aide");
3 : On l’ajoute au panel et on dit où il doit être situé
vPanel.add(aBoutonHelp, BorderLayout.WEST);
4 : On ajoute un event listener sur le bouton
aBoutonHelp.addActionListener(this);
Dans la procédure actionPerformed()
5 : On récupère l'adresse d'un objet source
Object vSource = e.getSource();
6 : Si l'objet source est le boutonHelp alors on force le programme à écrire help
if(vSource == aBoutonHelp) aEngine.interpretCommand("aide");
Exercice 7.20
creation de la classe Item et intégration des items dans la classe Room
RAPPORT - A3P
"14
Exercice 7.21
Création de la méthode getItemString retournant une description dans la classe
Room
Exercice 7.22
Intégration de l’Hashmap items faisant correspondre une String à un Item.
Exercice 7.23
Création de la procédure back comprenant un paramètre command.
Intégration de la commande « retour » dans CommandWords.
RAPPORT - A3P
"15
Exercice 7.26
j’ai remplacé la room aOldRoom par un Stack appelé du même nom.
le Stack permet ainsi de pouvoir retourner dans le salles visitées précédemment
jusqu’à la première salle (dans ce jeu la Rue).
Exercice 7.30/7.31
Ayant prévu de permettre jai fait les exercices 7.30 et l’exercice 7.31 en même
temps, j’ai simplement ajouté les procédures drop et take dans game engine.
Exercice 7.31
J’ai déplacé toutes les méthodes ayant lien avec l’inventaire du joueur et les items
en général.
cela m’a conduit à faire des modifications au take et au drop en y incorporant les
méthodes « getInventaire() » et « getItemList() » comme ci dessous.
Exercice 7.33
Pour répondre à cet exercice j’ai simplement ajouté cette ligne à la méthode
printWelcome() et goRoom() dans la classe GameEngine tout en ayant
préalablement crée la méthode getInventaireDesc() dans la classe Player.
« aGui.println(aPlayer.getInventaireDesc()); »
RAPPORT - A3P
"16
Exercice 7.34
Mon « Magic cookie » est simplement l’item « sac » qui permet au joueur de porter
10kg d’items de plus qu’avant de le saisir.
Exercice 7.34.1
Mise à jour faite
Exercice 7.35
Projet étudié et modifications apportées.
Exercice 7.35.1
implémentation du switch faite.
Exercice 7.41.1
Projet étudié et modifications apportées.
Exercice 7.42
Pour cet exercice j’ai simplement compté le nombre de déplacement du joueur et
s’il en fait plus de 10, il perd.
Exercice 7.42.2
Ayant pris un peu de retard je ferai cet exercice si j’ai suffisamment de temps avant
de rendre le projet.
Exercice 7.43
La trapDoor se situe entre la salle d’arrivée(la rue) et la salle finale (la salle de
réception).
pour empêcher l’accès de la réception à la rue il suffit d’enlever la porte dans la
méthode createRoom() de la classe GameEngine et de faire des modifications dans
la méthode back.
RAPPORT - A3P
"17
Exercice 7.44
Création de la classe Beamer tel que :
RAPPORT - A3P
"18
Et création des méthodes « charger » et « téléporter ».
Exercice 7.45.1
Modifications faites et rectification d’erreurs.
Exercice 7.45.2
Javadoc générée.
Exercice optionnel : 7.18.5
Exercice 7.46
Pour faire cet exercice j’ai tout d’abord crée la classe TransporterRoom et
RoomRandomizer comme proposé dans le chapitre mis à disposition.
Comme suggéré dans le livre j’ai crée dans Transporter Room deux méthodes, un
Override de GetExit et une méthode qui trouve la RandomRoom à l’aide de la classe
RoomRandomizer.
Exercice 7.46.1 Exercice non réalisé
Exercice 7.46
Commentaire javaDoc écrits pour toutes le classes et le classes présentes dans le
jeu
RAPPORT - A3P
"19
Exercice 7.47
Classe command modifiée, j’ai ajouté la procedure execute dans celle ci pour
pouvoir l’appeler dans toutes les classes « Xcommand » héritant de celle ci, avec X la
commande tapée par l’utilisateur du jeu (par exemple retour).
« public abstract void execute(Player pPlayer); »
pour que cet exercice fonctionne il m’a fallu modifier ma classe Parser et
CommandWord.
Voici ce que donne le package ‘command’ après l’exercice 7.47.1.
RAPPORT - A3P
"20
Exercice 7.47.1
Voici Comment mes packages sont organisés:
Game
Item
ItemList
Beamer
pkg_Item
RoomRandomizer
Room
TransporterRoom
pkg_Room
UserInterface
GameEngine
Player
pkg_Game
Parser
CommandWord
Command
CommandWords
XCommand
pkg_Command
RAPPORT - A3P
"21
Exercice 7.47.2
Génération des javadocs faite.
Exercice 7.48
Creation de la Classe abstraite Character et de la Classe Démineur héritant de
Chararcter.
Le Character a un nom et une room en paramètre et une méthode « bonjour »
abstraite ce qui permet à la Classe démineur d’appeler celle-ci en remplissant son
corps.
Exercice 7.49 Exercice non réalisé
Exercice 7.49.2
Completer son jeu :
1)La porte fermée à clef
J’ai mis des portes ’’fermées’’ ou ‘’ouvertes’’ dans le jeu en créant une HashMap
<String, String> « aPortes » dans la classe Room avec un getter retournant la clef de
las HashMap.
J’ai incorporé l’HashMap dans la méthode setExits afin de permettre de dire si vers
une direction précise la porte est fermée ou non.
j’ai donc précisé dans GameEngine à l’aide d’une string la porte que je voulais
fermée : celle entre la rue et la reception.
1)Le « mini jeu »
lorsqu’on entre dans la reception il y a une bombe, il faut couper le fil rouge pour la
désactiver et si vous coupez le fil rouge vous perdez.
Pour réaliser cela j’ai crée une classe Bomb héritant d’item comprenant deux
boolean initialisés tous deux à false.
Dans le package Command j’ai ajouté une classe « CouperCommand » qui met à
true le boolean correspondant au fil bleu si on tape « couper bleu » par exemple.
RAPPORT - A3P
"22

Documents pareils