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

JavaScript Discussion :

Simulation d'un lancer de dés


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 70
    Par défaut Simulation d'un lancer de dés
    Bonjour,
    Pour une application je souhaite simuler un lancer de dés, c'est à dire voir plusieurs combinaisons de dés s'afficher avant de se stopper.

    Pour cela j'ai utilisé setTimeout et après beaucoup de recherches et des heures plus tard j'arrive à un bidoullage qui marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    lancerDes(n) {
    // génère 8 lancers de dés
    if(n!=8)
    {
    // génère un random entre 1 et 6
    var de1=Math.floor(Math.random()*6)+1;
    //Affichage du score du dé dans la cellule menu
    document.getElementById('menu').innerHTML =de1;
    //On relance la fonction au bout de 200 ms
    setTimeout(function(){lancerDes(n+1)}, 200);
    }
    }
     
    lancerDes(1);
    Mon problème étant que, après, je ne peux rien faire!
    Si je tente d'appeler une autre fonction à la suite ou bien d'exécuter la suite du code, avec ou sans timeOut, ça fail puisque le code n'est pas "stoppé". Et si je ne peux plus rien appeler après je ne peux plus rien faire.
    J'ai bien pensé à faire continuer les actions en cliquant sur un bouton, mais ça ne m'arrange vraiment pas du tout.

    Donc si vous avez des solutions pour gérer ceci, ou si vous vous y prendriez d'une autre manière, je suis preneur.

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Salut,

    Ton code marche parfaitement...

    J'ai testé avec du code Javascript supplémentaire.
    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
    26
    27
    28
    29
    <DOCTYPE html>
    <html>
    <head></head>
    <body>
     
    <p id="menu"></p>
    <p id="status"></p>
     
    <script type="text/javascript"><!--
    function lancerDes(n) {
    // génère 8 lancers de dés
    if(n!=8){
    	// génère un random entre 1 et 6
    	var de1=Math.floor(Math.random()*6)+1;
    	//Affichage du score du dé dans la cellule menu
    	document.getElementById('menu').innerHTML =de1;
    	//On relance la fonction au bout de 200 ms
    	setTimeout(function(){lancerDes(n+1)}, 200);
    }else
    	document.getElementById('status').innerHTML='Les jeux sont faits';
    }
     
    document.getElementById('status').innerHTML='Alea Jacta Est';
    lancerDes(1);
    -->
    </script>
     
    </body>
    </html>
    Une erreur javascript ailleurs dans le code peut-être ?

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 70
    Par défaut
    Ah mais oui cela marche, c'est juste que je ne peux rien faire par la suite.

    par exemple si je fais :

    lancerDes(1);
    alert('bigorneau');

    Vu que les setTimeout de la fonction ne sont pas stopants, le alert se déclanche tout de suite après l'appel de la fonction.

    Donc si je veux appeler par la suite une fonction, elle sera appelée bien trop tôt.

    Désolé si je me suis mal exprimé.

  4. #4
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    Bonjour, tu peux donner un callback à ta fonction lancer de dé:
    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
    function lancerDes(n, callback) {
    // génère 8 lancers de dés
    if(n!=8)
    {
    // génère un random entre 1 et 6
    var de1=Math.floor(Math.random()*6)+1;
    //Affichage du score du dé dans la cellule menu
    document.getElementById('menu').innerHTML =de1;
    //On relance la fonction au bout de 200 ms
    setTimeout(function(){lancerDes(n+1, callback)}, 200);
    } else {
    callback();
    }
    }
     
    lancerDes(1, function(){alert("8 lancés de dé ont été faits")});

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 70
    Par défaut
    C'est ok. Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/10/2011, 20h25
  2. Comment lancer un calcul lors de la simulation
    Par sarah2009 dans le forum Simulink
    Réponses: 16
    Dernier message: 26/02/2009, 00h03
  3. lancer une simulation avec RMAN
    Par vbcasimir dans le forum Recovery Manager
    Réponses: 3
    Dernier message: 23/01/2007, 15h01
  4. Simulation du lancer de dé
    Par fermat dans le forum Delphi
    Réponses: 3
    Dernier message: 30/09/2006, 17h13
  5. Lancer des tests / simulation
    Par say dans le forum C++Builder
    Réponses: 29
    Dernier message: 30/06/2005, 09h41

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