Forums Développement Multimédia

Aller au contenu

Besoin d'aide : Conditions if avec variable String

if variable String CODE Actionscript

3 réponses à ce sujet

#1 Gouj

    Ceinture Jaune

  • Members
  • PipPip
  • 26 messages

Posté 22 March 2013 - 12:07 PM

Bonjour, je suis débutant et je viens demander votre aide afin de résoudre mon petit "problème".

Je suis actuellement en train de créer un quizz avec flash en AS3 voici le contexte :

J'ai une question avec 10 combobox afin d'y choisir les réponses. Pour chaque question plusieurs réponses sont possible et l'ordre n'est pas important.

Pour réaliser cela j'ai donc donné des valeurs aux item des combobox ( mes bonnes réponses ont donc en "data" des lettres (ex : la 1ere bonne réponse = A , la seconde = B)

J'ai ensuite créer 3 variables afin d'établir des "codes réponse" qui me permettent de faire mes conditions en fonction de ma "correction" (avec les bonnes "combinaisons de codes réponses" :
  • ma 1ere variable (codeP1) reprend les datas de 6 combobox
  • ma 2nd varaible (codeB1) reprend les datas de 4 combobox
  • ma dernière variable (codePB1) fait l'addition des 2 varaibles pour simplifier les conditions dans certain cas
var codeP1 : String = comboboxc1.selectedItem.data + comboboxc2.selectedItem.data +
          comboboxc3.selectedItem.data  + comboboxc4.selectedItem.data  +
          comboboxc5.selectedItem.data + comboboxc6.selectedItem.data ;
var codeB1 : String = combobox1.selectedItem.data+ combobox2.selectedItem.data+
        combobox3.selectedItem.data + combobox4.selectedItem.data;
var codePB1 : String = codeB1+ codeP1;

J'ai ensuite un bouton "valider" avec une fonction au clic de la souris. Dans cette fonction j'ai mis les conditions afin d'afficher le résultat si la réponse fait partie des possibilités de réponses correcte

if (codeB1 != "XXXX" && codeP1 == "PG" || "GP" ){
       
        //donne le résultat
        result_txt.text = "Bravo !";
        explication_txt.text = String("Vous venez de trouver La gamme idéale .");
        gamme_B_txt.text = Correction1_B;
        gamme_P_txt.text = Correction1_P;
        //ajoute 5 points
        Score_compteur++;
}

Pour info la data "X" c'est la valeur du premier élément des combobox ( qui est le "choisir parmi ...") En gros codeB1 différent de "XXXX" signifie que pour avoir bon il faut au moins choisir une reponse par combobox pour les 4 combobox concernées.

Par la suite j'ai des conditions "else if" de correction personnalisée en fonction des types d'erreur :

 else if ( comboboxc1.selectedItem.label == "EAU" || comboboxc2.selectedItem.label == "EAU" ||
   comboboxc3.selectedItem.label == "EAU" || comboboxc4.selectedItem.label == "EAU" ||
   comboboxc5.selectedItem.label == "EAU" || comboboxc6.selectedItem.label == "EAU") {
        //donne le résultat
        result_txt.text = "Echec !";
        explication_txt.text = String("La priorité n'est pas le financement d'eau ! ");
        gamme_B_txt.text = Correction1_B;
        gamme_P_txt.text = Correction1_P;
  }

et une condition "else" pour tout type d'autre erreur :

else {
        //donne le résultat
        result_txt.text = "Echec !";
        explication_txt.text = String("Il y a une erreur dans la gamme choisie ! la gamme recommandée est :");
        gamme_B_txt.text = Correction1_B;
        gamme_P_txt.text = Correction1_P;
  }
 

Voila pour la situation maintenant le Problème :

Ma condition principale (la première qui définie si l'utilisateur à la bonne réponse) ne marche pas et je ne comprends pas pourquoi ... Quand je test mon quizz m^me si je sélectionne rien sur les combobox ou il est impératif de choisir une réponse pour réussir il me dit "bravo"... En gros même si il y a une erreur il sort un "bravo"...

J'ai donc tracé mes variables et je trouve bien le pour codeP1 et codeB1 une valeur qui correspond a la selection dans les combobox (le soucis de viens pas de la)

Je suppose que le problème viens de ma condition car j'ai l'impression qu'aucun test logique n'est fait !

Voili Voilou,

J'espère que vous pourrez m'aider (pauvre débutant que je suis) à "débugger" ce quizz ...

Merci d'avance ;)

Bonne journée

#2 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 22 March 2013 - 12:25 PM

Bonjour Gouj.

Déjà, bravo pour la présentation de ton problème.

(ces jours-ci, ça fait du bien de voir des gens s'investir dans leur question)

Pour la gestion de ton quizz, si tu as du temps et l'envie, on doit pouvoir faire beaucoup plus simple… mais il faudrait un peu reprendre depuis le début… Si tu comptes faire souvent des quiz, si tu veux t'investir en temps et si tu n'es pas pressé par une date de livraison de ton projet, tu devrais envisager sérieusement la question. Tu trouveras ici toute l'aide nécessaire a organiser ton travail et à t'améliorer.

Bon, ça n'empêhce pas que tu poses une question précise.

Pourquoi ton test

if (codeB1 != "XXXX" && codeP1 == "PG" || "GP" ){
 
semble ne pas fonctionner…

C'est un peu compliqué la logique booléenne au début…
Pour te simplifier le débuggage, je te conseille d'ouvrir un nouveau ficheir flash, de coller ton code logique… et de le tracer.
Evidemment, tu dois simuler l'environnement nécessaire. ça pourrait donner ça :
// Je simule ma situation
var codeB1:String = "XXXX";
var codeP1:String = "PG";
// Je trace mon test
trace (codeB1 != "XXXX" && codeP1 == "PG" || "GP" );

Je te laisses essayer ? Et j'attends ta question… :-)

#3 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 22 March 2013 - 12:54 PM

En l'absence de question, je réponds quand même pour ne pas te faire perdre trop de temps…

Et oui…
En fait, ton test logique trace un string : "GP"

Ça peut te paraître étrange mais c'est logique.
En fait, dans une instruction aussi compliqué, flash doit évaluer ton test par petits morceaux. Il ne peut pas les prendre au hasard.
Il y a donc un ordre de priorité des opérateurs.

Le moins prioritaire de tous ceux que tu as utilisés est le OU ( || )
Flash évalue donc en priorité tout ce qui est à droite du OU, tout ce qui est à gauche du OU
Il se retrouve avec :
(FAUX OU "GP")
Le OU favorise le "GP" au FAUX

Dans le test d'un if, il faut encore que flash transforme le "GP" en booleen (vrai/faux). Pour lui, tout ce qui n'est pas null ou zéro est vrai…
Le test est passé avec succès.

////////

Quand tu fais des tests logiques compliqués comme Ça, utilise les parenthèses pour forcer l'ordre d'évaluation.

Quelque chose comme :
if ( (codeB1 != "XXXX") && ( codeP1 == "PG" || "GP") )


Bon, ce nouveau test va aussi planter parce codeP1 == "PG" || "GP" ne fait pas ce à quoi tu t'attends.
Il faut que tu tests copeP1 2 fois:
(codeP1 == "PG" || codeP1 == "GP")

Formule totale :

if ( (codeB1 != "XXXX") && ( ( codeP1 == "PG" ) || ( codeP1 == "GP" ) ) )

#4 Gouj

    Ceinture Jaune

  • Members
  • PipPip
  • 26 messages

Posté 22 March 2013 - 13:40 PM

Merci Beaucoup pour ton explication aussi claire que de l'eau de roche ;) et dsl pour le temps réponse (c'était l'heure de la pose Miam Miam :D )!

En effet j'ai recommencer ma conditions avec les () pour bien définir mes priorités et ça marche du feu de dieu ! ( pour ce quizz je ne vais pas tout recommencer mais juste faire les modifs nécessaires pour que cela marche !)

Par contre si tu as le liens d'explication sur la méthode la plus adéquate pour ce genre "d'appli" cela m'interesse beaucoup pour parfaire mes connaissances !

Encore merci Mr dldler !



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)