Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » Utiliser la commande Menu plus proprement
Kikoodx Hors ligne Labélisateur Points: 2727 Défis: 11 Message

Utiliser la commande Menu plus proprement

Posté le 29/11/2018 20:15

Vous souhaitez utiliser la commande Menu mais redoutez les Go Error ? Voici une structure pouvant vous aider !

3 //On initialise Ans au nombre de choix disponibles hors Quitter.
Menu "Titre du menu", "Choix 1", 1, "Choix 2", 2, "Choix 3", 3, "Quitter", Q //Menu type.
Lbl 1 //Le choix 1 du premier menu
Ans-1 //On décrémente Ans de 1
Lbl 2 //Second choix du menu 1
Ans-1 //On décrémente Ans de 1
Lbl 3 //Troisième choix du premier menu
//Après chaque label hormis le dernier l'on décrémente Ans, ce qui fait qu'il vaut à la fin la position du choix ! Joie !
Locate 1,1,Ans //Montre le contenu de Ans
Lbl Q //Le Lbl qui tue
Stop

Voilà ! Ans vaudra le numéro du menu choisi après exécution, ce qui permet de sous-traiter après dans des conditions et éviter les Go Error.
Pour utiliser plusieurs menus de ce type, pensez à nommez tous les Lbl différemment.

Si des points ne sont pas clairs je suis à l'écoute.
Également si ce guide est malvenu.


Math680 Hors ligne Membre Points: 455 Défis: 5 Message

Citer : Posté le 29/11/2018 20:20 | #


Pratique !!!
“Il y a bien moins de difficultés à résoudre un problème qu’à le poser.”

Vous êtes fan de « The legend of Zelda ocarina of Time »,si c’est le cas allez voir ZeldaGAME
mon projet de jeu basic casio
Lephenixnoir Hors ligne Administrateur Points: 20809 Défis: 143 Message

Citer : Posté le 29/11/2018 23:54 | #


Déplacé dans la bonne section.

Pas une mauvaise idée ! Mais où initialises-tu Ans ?
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Citer : Posté le 30/11/2018 00:11 | #


Donc si je choisis le troisième choix, Ans sera décrémeté de 0. Si je choisis le deuxième choix, Ans sera décrémenté de 1. pour le premier choix, il sera décrémenté de 2.

Ce qui fait que si on initialise Ans à une valeur égale au nombre de sous-menus, alors les indices correspondent. Pas mal, bien joué !
Eon the Dragon : version 1.2
Let's have a look!
Marre de ces RPGs qui t'imposent des classes, des compétences et des sorts ? Crée tes propres capacités sur Eon the Dragon ! Des monstres, des dragons et des combats aussi épiques que difficiles t'attendent !
Un RPG unique et immense t'attend ! Joue dès maintenant à Aventura, le Royaume Poudingue !
Vous aussi, soyez swag et rejoignez Planète Casio !
Kikoodx Hors ligne Labélisateur Points: 2727 Défis: 11 Message

Citer : Posté le 30/11/2018 07:49 | #


Lephenixnoir a écrit :
Déplacé dans la bonne section.

Pas une mauvaise idée ! Mais où initialises-tu Ans ?

Merci, je croyais l'avoir bien placé
J'avais mis un 3 avant le premier commentaire, c'est corrigé.

Drak a écrit :
Donc si je choisis le troisième choix, Ans sera décrémeté de 0. Si je choisis le deuxième choix, Ans sera décrémenté de 1. pour le premier choix, il sera décrémenté de 2.

Ce qui fait que si on initialise Ans à une valeur égale au nombre de sous-menus, alors les indices correspondent. Pas mal, bien joué !

C'est exactement ça, merci
Protip
Ne me remerciez pas


Absent jusqu'à début Novembre.
Ne0tux Hors ligne Membre d'honneur Points: 3492 Défis: 265 Message

Citer : Posté le 30/11/2018 10:43 | #


Pourquoi ne pas utiliser une "vraie" variable pour effectuer la même logique ? C'est risqué d'utiliser Ans surtout si d'autres opérations sont effectuées dans les Lbl.

De plus, utiliser Ans empêche dans la suite du code de passer d'un sous menu à un autre...
Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Lephenixnoir Hors ligne Administrateur Points: 20809 Défis: 143 Message

Citer : Posté le 30/11/2018 11:30 | #


Kikoodx a écrit :
Merci, je croyais l'avoir bien placé

Vie Communutaire c'est tout ce qui est lié à l'association, les changements de postes, etc. C'est assez rare que les topics aillent ici.

Ne0tux a écrit :
Pourquoi ne pas utiliser une "vraie" variable pour effectuer la même logique ? C'est risqué d'utiliser Ans surtout si d'autres opérations sont effectuées dans les Lbl.

Je crois qu'ici le but c'est justement de ne mettre que les Ans-1 dans les label et d'écrire toute la logique de branchement à la fin.
Kikoodx Hors ligne Labélisateur Points: 2727 Défis: 11 Message

Citer : Posté le 30/11/2018 13:17 | #


Ne0tux a écrit :
Pourquoi ne pas utiliser une "vraie" variable pour effectuer la même logique ? C'est risqué d'utiliser Ans surtout si d'autres opérations sont effectuées dans les Lbl.

Non justement, le principe est de placer les opérations tierces en dehors des labels pour éviter les codes illisibles.
Ne0tux a écrit :
De plus, utiliser Ans empêche dans la suite du code de passer d'un sous menu à un autre...

C'est-à-dire ? Je ne vois pas en quoi cela bloque désolé.
Protip
Ne me remerciez pas


Absent jusqu'à début Novembre.
Ne0tux Hors ligne Membre d'honneur Points: 3492 Défis: 265 Message

Citer : Posté le 30/11/2018 14:44 | #


Kikoodx a écrit :
Non justement, le principe est de placer les opérations tierces en dehors des labels pour éviter les codes illisibles.


Oui oui j'ai bien compris ! Mais ma remarque concerne surtout l'utilisation de Ans. Si le soucis principal de cet astuce est la lisibilité, alors il ne faut clairement pas l'utiliser...

Déjà que je trouve ça dommage de ne pas utiliser les Lbl qui sont ici pour une fois pleinement justifiés parce qu'ils structurent bien le code (un sous menu par Lbl, avec la possibilité de passer d'un sous menu à l'autre sans passer par le menu principal grâce à Goto)...

D'ailleurs je suis curieux de voir en quoi c'est plus (+) lisible d'imbriquer des conditionnelles ensuite en fonction de la valeur de Ans pour gérer les opérations tierces, plutôt que de les laisser sagement chacune dans leur Lbl... Pour moi c'est juste déplacer le problème. A moins que tu n'envisages une meilleur façon de gérer ta partie logique en fonction de Ans, auquel cas il faut compléter l'astuce.

Kikoodx a écrit :
C'est-à-dire ? Je ne vois pas en quoi cela bloque désolé.


Lephenixnoir a écrit :
Je crois qu'ici le but c'est justement de ne mettre que les Ans-1 dans les label et d'écrire toute la logique de branchement à la fin.


Pour faire simple : Ans c'est du one shot. Une fois que l'on sera rentré dans la partie logique après ce menu (qui n'a pas été rédigée ici mais qui sera de type conditionnelle), la valeur contenue dans Ans sera absolument inconnue car on aura fait d'autres opérations. Par conséquent, on ne peut pas donner une nouvelle valeur à Ans pour changer de sous menu sans passer par le menu principal. Et ça ça craint. Exemple : on se trouve dans le sous menu du jeu et on veut passer dans le sous menu des options ou dans le sous menu pour quitter. Dommage s'il faut se retaper le menu principal...

Alors qu'on peut garder cette même astuce et juste utiliser une vraie variable. Dans ce cas on sait exactement dans quel sous menu on est et on peut changer de sous menu sans passer par le menu principal, comme une vraie machine à état ! Et c'est clairement mieux niveau lisibilité et débogage.

Ce n'est pas la première "astuce" que l'on voit avec Ans ces derniers jours, mais je déconseille fermement. Il existe de trop nombreuses causes qui mènent à une modification de Ans. Surtout que là c'est pour gratter une pauvre variable qui sera utile de toute façon...

4->A //On initialise A au nombre de choix disponibles
Do
If A = 4
Then
Menu "Titre ", "Choix 1", 1, "Choix 2", 2, "Choix 3", 3, "Quitter", Q //Menu type.
Lbl 1 //Le choix 1 du premier menu
A-1->A
Lbl 2 //Second choix du menu 1
A-1->A
Lbl 3 //Troisième choix du premier menu
A-1->A
Lbl Q //Quitter
A-1->A
Else If A = 3
Then // Faire les trucs du 1e sous-menu
// retourner au menu principal : 4->A
// revenir à l'état initial de ce sous-menu : 3->A
// passer au sous menu 2 sans passer par le menu principal : 2->A
// passer au sous menu 2 sans passer par le menu principal : 1->A
// quitter depuis ce sous menu sans passer par le menu principal : 0->A
Else If A = 2
Then // Faire les trucs du 2e sous-menu
[...]
Else If A = 1
Then // Faire les trucs du 3e sous-menu
[...]
Ifend
Ifend
Ifend
Ifend
LpWhile A

Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 52 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd