Bon, je suis en train d’analyser ton script. Feedback en temps réel:
-Première erreur: Le fb après +Vars:DeM:HabM (au début de siverbe assaultchance.
Cette erreur est structurelle. Tu fermes direct le bloc du verbe assaut, donc du coup à partir de là ça va planter ! En effet, ce qui suit sera toujours exécuté car c’est en dehors du bloc du verbe !
Et pis c’est tout pour les erreurs structurelles ! Pas mal !
Pour le reste, c’est des petits trucs à optimiser. Par exemple, tu as besoin de deux blocs en gros: Si chanceux ou si pas chanceux, OK ? Donc tu n’as pas besoin des multiples tests sur la chance.
J’ai donc essayé de tout regroupé sous ces deux blocs. A moins que tu ai utilisé la variable chancecombat ailleurs dans le script, je l’ai faite sauter.
De même, dans tous les cas tu perds un point de chance si tu tentes ta chance, il est donc inutile de la dupliquer dans chaque bloc. (Tout ça me rappelle des souvenirs !!! Je tentais assez peu ma chance en combat…)
Donc je te joins le script modifié. A toi de voir si ça te va…
J’ai aussi rajouté deux « TODO » pour gérer la mort du monstre (tu ne l’as pas fait !). Mais une seule condition suffit en fin de verbe. (Idem pour la mort du joueur). Mais je te laisse gérer ! Perso je mettrai ces deux conditions (si Vie joueur=0 / Si Vie monstre=0) une seule fois en fin de verbe. Tu gagnerai des lignes et donc de la clarté.
Maintenant le cours sur comment fonctionne Bloc/SiMachin/FinBloc et sinon.
Livrant fonctionne en interne avec des instructions. Lors de la compilation, Livrant gère deux éléments: Les instructions et les groupes où blocs.
-Une instruction est une seule ligne (exemple: TexteLn, retour, etc…)
-Un bloc est un groupe d’instruction. Mais un bloc en interne est aussi considéré comme une instruction. Donc par exemple, tu peux avoir en mémoire la structure suivante:
Instruction1
Instruction2
Bloc1
Instruction3
Et le bloc1 est constitué d’autres instructions. Comme un bloc est aussi une instruction, un bloc peut contenir d’autres blocs… Tu suis ?
Bon, maintenant, il faut savoir quelles sont les instructions qui démarent un bloc.
-Tu as tous les siMachin
-Les BlocCommande/BlocAff & compagnie
-L’instruction Bloc seule
Donc le fait d’écrire une de ces instruction démarre forcément un bloc en mémoire. Donc toutes les instructions qui suivent seront dans le bloc… Et ce jusqu’au prochain FinBloc qui ferme le bloc et remonte d’un niveau dans le hiérarchie en mémoire.
L’instruction sinon fonctionne comme ceci:
Si l’instruction précédente c’est déroulé correctement: On saute l’instruction suivante, sinon on l’éxécute
Mais il faut savoir qu’une instruction seule est toujours considérée comme s’étant bien déroulée (logique !). Donc par exemple:
...
texteLn:Bonjour
sinon
texteLn:ce texte ne sera jamais affichée
...
c’est correct pour le compilateur: L’instruction texteLn:Bonjour se déroule normalement, donc le sinon shuntera l’instruction suivante.
Par contre, un sinon après un bloc trouve toute son utilité: Si le bloc précédent le sinon c’est pas éxécuté pour une des raison suivante: Condition d’entrée non respecté ou la limite de nbFois atteinte. Dans ce cas, le bloc est considéré comme non exécuté, et renvoi un flag qui ordonnera à l’instruction suivante d’éxécuter l’instruction qui suit le sinon. Donc si tu veux après un sinon qu’un groupe d’instruction soit considéré par le sinon, il faut le mettre dans un bloc.
Exemple non correct:
....
SiMachin
Ins1
Ins2
sinon
Ins3
Ins4
fb
Ceci est faux car le sinon est une instruction se trouvant encore dans le bloc du SiMachin. Donc elle va simplement regarder si l’ins2 s’est bien déroulé (ce qui est le cas, puisqu’une instruction s’éxécute toujours), et donc sautera Ins3 ! Et du coup Ins4 sera exécuté ! Voici l’écriture correcte:
SiMachin
Ins1
Ins2
fb
sinon
bloc
ins3
ins4
fb
Là c’est OK. Remarque que SiMachin ouvre un bloc, c’est pour ça qu’il faut le fermer après le Ins3. De même, Bloc ouvre aussi un bloc (il y a en fait une condition caché du type Si True…Qui est toujours vraie !)
Voilà, j’éspère que tu vas t’en sortir. Franchement je pense que Livrant est assez simple dans son concept, pour peu qu’on assimile bien comment ça fonctionne. Enfin, je dis ça mais il y a bien deux ou trois petits détails que j’ai du oublier, même comme j’ai la flegme de ressortir les sources !
Allez, ci joint le fichier modifié avec de sinon à volonté, histoire d’aider. Je te laisse compléter tout ça, et n’hésites pas à me pose des questions. Et pis ça me motive pour un Livrant 3 éventuel…
Bon courage
GFA-MAD