IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 1 & ActionScript 2 Discussion :

[FLASH MX2004] Tirage (Math.random) et égalité stricte


Sujet :

ActionScript 1 & ActionScript 2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 40
    Par défaut [FLASH MX2004] Tirage (Math.random) et égalité stricte
    Bonjour !

    Après avoir tiré 3 nombres au hasard, encadrés entre 1 et 3 et placés dans les variables Nb1,Nb2,Nb3, je compare ceux-ci. Tant que je n'ai pas 3 nombres différents, je souhaite refaire un tirage. Mon problème est que je n'arrive pas à avoir cette condition. Voici le script que j'ai écris (et que je sais être faux ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (_root.Nb1==_root.Nb2&& _root.Nb1==_root.Nb3 && _root.Nb2==_root.Nb3)
       {
       _root.txtVerif="Nombres identiques, on continue le tirage"; 
       }
      else
       {
       _root.txtVerif="Nombres différents, on arrête le tirage";   
       }
    En effet, si on a Nb1=0 et Nb2=1 et Nb3=1, la dernière expression renverra true et je voudrais qu'elle renvoie false, comme les 2 premières !

    Est-ce que quelqu'un a la solution ?

    Merci d'avance !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 57
    Par défaut
    salut,

    Il suffit juste que tu utilises "ou" plutôt que "et" soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (_root.Nb1==_root.Nb2 || _root.Nb1==_root.Nb3 ||_root.Nb2==_root.Nb3)
    là ça devrait marcher.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 40
    Par défaut
    Merci Stip pour ta réponse. En effet, ça marche. C'était une grossière erreur d'algo ! Voici donc mon code, auquel j'ai ajouté un compteur pour tester le nombre de tirage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
        //Initialisation
        _root.recupNb1=Math.round(Math.random()*(1-3))+3;
        _root.recupNb2=Math.round(Math.random()*(1-3))+3;
        _root.recupNb3=Math.round(Math.random()*(1-3))+3;
        _root.compteur=0;
     
        while (_root.recupNb1==_root.recupNb2 || _root.recupNb1==_root.recupNb3 || _root.recupNb2==_root.recupNb3)
        {
        _root.recupNb1=Math.round(Math.random()*(1-3))+3;
        _root.recupNb2=Math.round(Math.random()*(1-3))+3;
        _root.recupNb3=Math.round(Math.random()*(1-3))+3;
        _root.compteur++;
        }
     
         trace (_root.recupNb1);
         trace (_root.recupNb2);
         trace (_root.recupNb3);
         trace ("compteur :"+_root.compteur);
    Par rapport au nombre de tirage : si on souhaite utiliser plus de nombre (disons jusqu'à 10 différents). Est-ce que cela ralentirait l'éxécution du script ?

    Merci !

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 196
    Par défaut
    ça vas surtout faire long à taper (9*8*7*6*5*4*3*2*1=362880 tests pour 10 nombres (formule à confirmer! je la donne de tête!)) surtout si par la suite tu veux en rajouter!
    Il est préférable de faire un test avec une boucle for (mais il faut que tu place les valeurs dans un tableau pour ça)!

    pour la vitesse du script il faut tester! perso je peux pas te dire!

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 57
    Par défaut
    C'est le genre de truc qui peut prendre un max de ressources de manière exponentielle.
    Mais si tu y tient en changeant de nombre ta condition devient longue à gérer et tu devras la modifier à chaque changement. mais il y a une astuce avec une comparaison de tableaux
    du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    var tableau:Array = new Array();
    var nombreVoulu:Number= 10;
    for (i=0; i<nombreVoulu+1; i++) {
        _root["recupNb"+i+1] = Math.round(Math.random()*(1-nombreVoulu))+nombreVoulu;
        tableau[i] = _root["recupNb"+i+1];
    }
    var pourComparaison:Array = tableau;
    var identique:Boolean= false;
    for (i=0; i<tableau.length; i++) {
        for (j=0; j<tableau.length; j++) {
            if (tableau[i] == pourComparaison[j]) {
                _root["recupNb"+i+1] = Math.round(Math.random()*(1-nombreVoulu))+nombreVoulu;
                tableau[i] = _root["recupNb"+i+1];
                pourComparaison[i] = tableau[i];
                identique=true;
            }
        }
        if (identique) {
            i=0;
        }
    }
    je n'ai pas eu le temps de le tester donc fait gaffe mais ça devrait marcher

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 196
    Par défaut
    Citation Envoyé par stip
    C'est le genre de truc qui peut prendre un max de ressources de manière exponentielle.
    Mais si tu y tient en changeant de nombre ta condition devient longue à gérer et tu devras la modifier à chaque changement. mais il y a une astuce avec une comparaison de tableaux
    du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    var tableau:Array = new Array();
    var nombreVoulu:Number= 10;
    for (i=0; i<nombreVoulu+1; i++) {
        _root["recupNb"+i+1] = Math.round(Math.random()*(1-nombreVoulu))+nombreVoulu;
        tableau[i] = _root["recupNb"+i+1];
    }
    var pourComparaison:Array = tableau;
    var identique:Boolean= false;
    for (i=0; i<tableau.length; i++) {
        for (j=0; j<tableau.length; j++) {
            if (tableau[i] == pourComparaison[j]) {
                _root["recupNb"+i+1] = Math.round(Math.random()*(1-nombreVoulu))+nombreVoulu;
                tableau[i] = _root["recupNb"+i+1];
                pourComparaison[i] = tableau[i];
                identique=true;
            }
        }
        if (identique) {
            i=0;
        }
    }
    je n'ai pas eu le temps de le tester donc fait gaffe mais ça devrait marcher
    J'ai pas vue d'erreur! mais par-contre tu fait les tests en double!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ......
    for (i=0; i<tableau.length; i++) {
        for (j=i; j<tableau.length; j++) {
    .....
    ça te divisera le temps de test par 2!!

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 57
    Par défaut
    J'ai pas vue d'erreur! mais par-contre tu fait les tests en double!
    Bien vu! ça évite de comparer le même index

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 40
    Par défaut
    Merci de vos réponses.

    Je vais tester ça dès que j'aurai un peu plus de temps !

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 40
    Par défaut
    Bonjour !

    J'ai essayé d'utiliser la méthode proposée mais les tests n'étaient pas concluants . En fait le problème semble venir de là :
    var pourComparaison:Array = tableau;
    En effet, en parcourant les valeurs de pourComparaison, rien n'est renvoyé (undefined). J'ai donc transféré les valeurs de tableau dans pourComparaison avec une boucle. Ensuite, après la comparaison entre les 2 tableaux, les valeurs de sortie restaient identiques (tableau[i...n]==pourComparaison[i...n], alors que mon but est de tirer des nombres aléatoires TOUS différents.

    J'ai essayé de modifier le code de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    pourComparaison=new Array;
    for (i=0;i<tableau.length;i++)
     {
     pourComparaison[i]=tableau[i];
     }
     
    var identique:Boolean=false;
    chiffresRecup=new Array;
     
    for (i=0;i<tableau.length;i++)
     {
     for (j=0;j<tableau.length;j++)
      {
      if (tableau[i]==pourComparaison[j])
       {
       _root["recupNb"+i+1]=Math.round(Math.random()*(0-nombreVoulu))+nombreVoulu;
       tableau[i]=_root["recupNb"+i+1];   
       identique=true;
       }
       if (tableau[i]!=pourComparaison[j])
        {
        chiffresRecup[i]=tableau[i];
        }
       }
     }
    Le résultat obtenu est que les valeurs de tableau sont différentes après le test mais pas TOUTES différentes . Est-ce que vous voyez une solution ?

    Merci d'avance !

Discussions similaires

  1. [FLASH MX2004] Clip qui ne s'arrête pas
    Par romain starck dans le forum ActionScript 1 & ActionScript 2
    Réponses: 8
    Dernier message: 10/05/2006, 19h43
  2. Réponses: 5
    Dernier message: 14/01/2006, 20h30
  3. Communication C++ <--> Flash MX ou Flash MX2004
    Par loupiloup dans le forum C++Builder
    Réponses: 3
    Dernier message: 19/01/2004, 20h58
  4. [FLASH MX2004] Hierarchisation des actions
    Par bolo dans le forum Flash
    Réponses: 9
    Dernier message: 06/11/2003, 16h02
  5. [FLASH MX2004] Personnaliser les scrollbars
    Par stephane eyskens dans le forum Flash
    Réponses: 10
    Dernier message: 09/10/2003, 12h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo