- jetsetwilly a écrit:
- au lieu de if else et if else si je met 3 fois if j'ai vu qu'on est completement dans les choux,
peut m'expliquer l'importance des if else et esle if
On utilise souvent, par fainéantise, une suite de
if là où il serait plus juste d'utiliser des
else if.
Mais imagine par exemple que tu veuilles afficher un message différent au joueur si son score est supérieur à 100, s'il est supérieur à 50, à 25 ou inférieur à 25. Tu pourrais vouloir faire comme ça dans un premier temps :
- Code:
-
if (game.score < 25)
Display("Tu manques cruellement d'expérience, petit scarabée !");
if (game.score > 25)
Display("Pas mal pour un bleu, mais ça reste un peu court jeune homme !");
if (game.score > 50)
Display("Waoh, c'est que tu commences à prendre du galon !");
if (game.score > 100)
Display("Te voici devenu un véritable maître !");
Seulement ce code a un sérieux problème. Si le joueur a moins de 25 points, pas de soucis, le premier
if est exécuté et les autres ne le sont pas. S'il a entre 25 et 50 points, pas de problème non plus, seul le second
if sera exécuté. Mais imagine maintenant que le joueur a dépassé les 50 points. Le premier
if n'est pas exécuté car le joueur n'a pas moins de 25 points, en revanche le second
if est exécuté : le joueur a plus de 50 points, il a donc aussi plus de 25 points. Bien sûr le troisième
if aussi est exécuté car le joueur a aussi plus de 50 points. Il y aura donc deux messages qui vont s'afficher ! Et si le joueur a même dépassé les 100 points, ce seront trois messages qui s'afficheront ! C'est dans ce genre de situations que les
else if sont intéressants. Le code suivant aura l'effet désiré :
- Code:
-
if (game.score > 100)
Display("Te voici devenu un véritable maître !");
else if (game.score > 50)
Display("Waoh, c'est que tu commences à prendre du galon !");
else if (game.score > 25)
Display("Pas mal pour un bleu, mais ça reste un peu court jeune homme !");
else
Display("Tu manques cruellement d'expérience, petit scarabée !");
Que signifie ce code ?
Eh bien il affiche le premier message si le joueur a plus de 100 points.
Sinon (c'est-à-dire s'il a moins de 100 points), alors il affiche le second message
à condition qu'il ait plus de 50 points ; mais si cette seconde condition n'est pas remplie non plus, alors
si le joueur a plus de 25 points, on affiche le troisième message. Enfin, si aucune de ces conditions n'est remplie (c'est-à-dire si le joueur n'a ni plus de 100, ni plus de 50, ni plus de 25 points, c'est-à-dire si le joueur a moins de 25 points) alors c'est le dernier message qui est affiché.
Pratique ces
else if et
else, non ?
- jetsetwilly a écrit:
- peut tu me donner un exemple comment coder les autres variables? avec des int et des bool je suppose
pour la question des variables globales: dans un jeux point and click les varriables sont toutes globales non?
a part quelques exeption, comme des minijeux qui se reinitialise quand on sors de la map
des portes des animations.... enfin je vois pas quoi d'autre
Qu'est-ce que tu appelles les "autres" variables ? Même si en passant par l'onglet
Global variables, tu ne vois pas les mots-clés
int ou
bool, en réalité ils sont utilisés par le moteur, de façon "cachée".
Dans le langage d'AGS, à chaque fois que tu déclares (que tu "crées") une variable, tu dois spécifier son type (
int,
bool, etc.), quel que soit le niveau de localité de cette variable.
Ce qui va définir le niveau de localité de cette variable, c'est l'endroit où tu écris cette ligne de déclaration. Par exemple si tu fais ça :
- Code:
-
int maVariable = 5;
function Ajoutee() {
maVariable++;
return maVariable;
}
function hHotspot1_Look() {
if (Ajoutee() == 6) Display("En voici 6 !");
}
Lorsque le joueur regardera le hotspot 1 pour la première fois, le message s'affichera car
maVariable vaudra 5+1 = 6. Mais s'il regarde à nouveau (en restant dans la pièce), le message ne s'affichera plus car cette fois la variable vaudra 6+1 = 7.
En revanche si tu fais ça :
- Code:
-
function Ajoutee() {
int maVariable = 5;
maVariable++;
return maVariable;
}
function hHotspot1_Look() {
if (Ajoutee() == 6) Display("En voici 6 !");
}
Alors le message s'affichera chaque fois que le joueur regardera le hotspot 1.
Pourquoi ? Parce qu'ici, la variable
maVariable est locale à la fonction
Ajoutee, c'est-à-dire que cette variable est créée lorsque tu utilises la fonction
Ajoutee, mais qu'elle est effacée tout de suite après. Ce qui veut dire que lorsque le joueur regarde le hotspot 1 pour la première fois,
maVariable est créée avec la valeur 5, on lui ajoute 1 et elle vaut alors 6 et donc la condition du
if est validée. Mais
maVariable est tout de suite effacée car ça y est, tu as fini d'utiliser la fonction
Ajoutee.
Lorsque le joueur va à nouveau regarder le hotspot, tout va recommencer "à zéro" : la fonction est à nouveau utilisée, donc la variable est à nouveau créée avec la valeur 5, etc.
Au contraire, dans le premier exemple, la variable est déclarée
hors de la fonction, au-dessus, et donc elle n'est pas locale à la fonction (elle est locale à la pièce du fichier script en revanche). Cela signifie que la variable est créée lorsque tu entres dans la pièce et qu'elle ne sera effacée que lorsque tu quitteras la pièce. Du coup, tant que le joueur reste dans la pièce, chaque fois qu'il regarde le hotspot 1, la fonction
Ajouee est utilisée et elle augmente la valeur de
maVariable, qui n'est jamais effacée. Et donc seulement la première fois qu'on augmente cette variable vaut-elle 6. Après elle vaudra 7, 8, 9, ...
Mais si tu quittes la pièce et que tu entres à nouveau, en toute logique, alors la variable sera effacée et recréée avec la valeur 5 et un premier nouveau clic affichera le message.
Tu me suis à peu près ?
Je répète que toutes ces questions de localité valent quel que soit le type de la variable (
int,
bool,
float,
String, ...).
Le type de variable n'a d'intérêt qu'en fonction de ce que tu veux faire (utiliser des nombres entiers, utiliser un état on/off, utiliser des nombres à virgule, utiliser du texte, ...).
Voilà, c'était assez long encore une fois mais j'espère avoir été clair.