I. Suite de la classe Game
Welcome to the World of Zuul! World of Zuul is a new, incredibly boring adventure game. Type 'help' if you need help. You are outside the main entrance of the university Exits: east south west |
You are lost. You are alone. You wander around at the university. Your command words are: go quit help |
II. Créer les deux dernières classes
Voici le contenu de cette classe avec des commentaires à chaque ligne pour expliquer son
fonctionnement.
Vous devez la lire attentivement et en détail.
Si après avoir lu en plus les paragraphes expliquant les
tableaux et la boucle for vous ne comprenez pas 100% de ce qui est ci-dessous, demandez à l'intervenant.
private static final String[] sValidCommands = { "go", "quit", "help" };
// static : pour que ce tableau n'existe qu'en un seul exemplaire dans cette classe (même si on l'instancie plusieurs fois)
// final : pour qu'on ne puisse pas
modifier ce tableau
// [] : pour indiquer qu'on ne veut pas une seule String mais plusieurs
// { , , } : pour indiquer quelles sont les 3 String à stocker dans ce tableau
public boolean isCommand( final String pString )
// pour vérifier si pString est une commande valide
{
for ( int i=0; i<sValidCommands.length; i++ ) {
// sValidCommands.length : vaut le nombre de cases du tableau, ici 3
// i++ est strictement équivalent à i = i+1 (exécuté à la fin de chaque tour de boucle)
// donc, POUR i prenant les valeurs 0, 1, 2, FAIRE :
if ( sValidCommands[i].equals( pString ) )
// [i] pour indiquer qu'on veut accéder à la case n°i du tableau
return true;
// termine la méthode et retourne vrai puisqu'on a trouvé le mot parmi les commandes valides
}
// fin de la boucle POUR
return false;
// retourne faux puisqu'on n'a pas trouvé le mot parmi les commandes valides
} // isCommand(.)
Ce qu'il faut retenir sur les tableaux
Ce qu'il faut retenir sur la boucle for
C'est une boucle souvent utilisée avec les tableaux. Même si elle est rigoureusement équivalente à une boucle while
(comme on pourra le constater ci-dessous), il est très pratique
d'avoir toutes les informations rassemblées en une ligne au lieu d'être
potentiellement dispersées dans une méthode.
On l'utilise à chaque fois que l'on souhaite exprimer une répétition un
nombre connu de fois.
L'ensemble des instructions :
initialisation
;
while ( condition_de_continuation
) {
instructions_à_répéter
;
incrémentation
;
} // while
peut/doit avantageusement être remplacé par :
for (
initialisation ;
condition_de_continuation ;
incrémentation ) {
instructions_à_répéter
;
} // for
Ce qu'on appelle initialisation comprend en général la déclaration, par exemple : int i=0;
Ce qu'on appelle incrémentation est en général de la forme i = i+1, mais rien n'empêche
d'écrire i = i-2 et d'adapter l'initialisation et la condition en
conséquence !
Attention ! La condition_de_continuation (comme son nom l'indique) n'est pas une condition d'arrêt !
Il est important de noter que l'incrémentation a lieu en fin de boucle, après les instructions_à_répéter.
A noter également : c'est le seul cas en java où un point-virgule (à l'intérieur des parenthèses) ne marque pas la fin de l'instruction for !
III. Pour obtenir un jeu qui fonctionne
Ce qu'il faut retenir sur la boucle while
La syntaxe est identique à celle d'un if (faire bien attention de ne pas les confondre !) :
avant...
while ( condition
) {
instructions
} // while
après...
La boucle ci-dessus répète les instructions tant que la condition reste vraie.
Quatre remarques :
IV. Compétences à vérifier
Après les TP 3.1 & 3.2, √érifiez que vous avez acquis les compétences ci-dessous, ainsi que celles du TP1 et celles du TP2. Sinon, posez des questions à l'intervenantV. Avancement du projet
VI. Indices pour ce TP
1) Indices pour écrire la méthode quit :
- La situation normale est l'absence de second mot. Dans ce cas, se contenter de retourner vrai (pour quitter le jeu).
- Dans le cas contraire, afficher un message et retourner faux (pour ne pas quitter le jeu).
2) Indices pour écrire la méthode processCommand :
- Comprendre la nature de ce qui lui est passé en paramètre.
- Traiter le cas où la
commande est inconnue : une fonction écrite dans un exercice précédent
nous permet de le savoir, il faut afficher un message et terminer la
fonction (en indiquant qu'on ne veut pas quitter le jeu => retourner faux).
- Mémoriser le mot de commande à tester.
- Tester chaque mot de commande pour exécuter la bonne commande en appelant la méthode correspondante, et retourner faux (sauf la commande quit qui doit retourner le résultat booléen de la fonction quit).
- À la fin de ces tests,
si vous n'avez détecté aucun mot de commande valide, c'est que vous avez fait une erreur :
soit isUnknown()
ne fonctionne pas bien, soit ces tests ne sont pas bons.
Choisissez bien l'enchaînement des if ou des if/else, et rappelez-vous que les chaînes de caractères sont des objets !