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 :

Aucun affichage du résultat de ma fonction


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Aucun affichage du résultat de ma fonction
    Bonjour,

    Je cherche à faire un petit jeu de hasard... sans recopier bêtement une solution toute faite sur internet pour comprendre le fonctionnement de la programmation jS.

    voici mon html (tout simple ) :

    Code HTML : 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
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    	<meta name="TITLE" content="Mon jeu de Hasard ):"/>
    	<title>Devine un nombre .... compris entre 1 et 100 ;)</title>
    	<link href="styles.css" rel="stylesheet" type="text/css"/>
    	<script type="text/javascript" src="gen_number.js"></script>
    </head>
    <body>
    	<div id="wrapper">
    		<header>
    			<h1>Le JavaScript en s'amusant ... Jeu de hasard et de découverte</h1>
     
    		</header>
    		<main>
    			<form>
    				<input type="button" onclick="partie()" value="Jouer"/>
     
    			</form>
    		</main>
    	</div>
    </body>
    </html>

    et mon Javascript

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    function partie() {
    var X = Math.floor(Math.random()*101);
    var nb; 
    var cpt = 0;
    var affichage = "Donnez-moi un chiffre entre 1 et 100 ..." ;
     
     
    do{
    	nb = prompt(affichage);
    	if ( nb==null )
    		return 0;
    	cpt ++;
     
    	if ( nb<X )
    		affichage = "Le nombre indiqué est trop petit !";
    	else	
    		affichage = "Le nombre indiqué est trop grand !";
    	}
    	while ( nb!=X )
    		return cpt;
    }
    function compteur(){
      var cpt = 0;
      var compteur = 0;
      var cpt_max = 10;
      var continuer;
      do{
        compteur = partie();
        if (compteur)
          {
            cpt ++;
            if ( compteur < cpt_max )
              continuer = confirm("Bravo tu as gagné !");
          }
        else continuer = false;
     
      }
      while ( continuer )
    }
    Tout semble bien fonctionner mais quand on trouve le résultat, cela ne dit pas que l'on a gagné... Qu'aurais-je oublié?

    Merci

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ce test est faux (erreur de logique), je te laisse trouver pourquoi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ( nb<X )
        affichage = "Le nombre indiqué est trop petit !";
    else	
        affichage = "Le nombre indiqué est trop grand !";
    La variable cpt dans la fonction compteur ne sert à rien.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    je te donnes ce qu'il faut pour le corriger

    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Pourtant à l'essai ce test fonctionne
    Citation Envoyé par CosmoKnacki Voir le message
    Ce test est faux (erreur de logique), je te laisse trouver pourquoi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ( nb<X )
        affichage = "Le nombre indiqué est trop petit !";
    else	
        affichage = "Le nombre indiqué est trop grand !";
    La variable cpt dans la fonction compteur ne sert à rien.
    Si le test est faux, pourquoi fonctionne t il?
    mais je peux remettre toutes les conditions si il le faut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ( nb<X )
    		affichage = "Le nombre indiqué est trop petit !";
    	else	
    		if ( nb>X )
    			affichage = "Le nombre indiqué est trop grand !";
    	}
    	while ( nb!=X )
    		return cpt;

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- if, else, while,... : mets SYSTÉMATIQUEMENT les accolades { ... }, même s'il n'y a qu'une seule instruction après.

    2- INDENTE proprement ton code.

    3- à aucun moment tu ne traites le cas : nb==X.


    [EDIT] Je savais bien que j'avais déjà vu ça : Jeux du plus ou moins
    Dernière modification par Invité ; 19/09/2018 à 15h25.

  6. #6
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Je saisi, il faut un code propre, pardon, je pensais que
    Je suis tout a fait d'accord avec toi @jreaux62, mais comme il n'y avait qu'une seule instruction, j'avais pris la liberté de les enlever. Je les remets mais le résultat final qui est de dire que l'on a trouvé le bon chiffre ne fonctionne pas.

    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
    30
    31
    function partie()
      {
        var nb; 
        var cpt;
        var affichage = "Donnez-moi un chiffre entre 0 et 100 ..." ;
     
     
            do{
    	          nb = prompt(affichage);
    	          if ( nb==null ){
    		            return 0;
    	              cpt ++;}
     
                if ( nb === X ){
                   affichage = "Bravo tu as trouvé en " + cpt + " coup(s).";
                    cpt ++;}
                   else
                      if ( nb<X ){
    		                affichage = "Le nombre indiqué est trop petit !";
                        cpt ++;}
    	                else	
    		                if ( nb>X ){
    			              affichage = "Le nombre indiqué est trop grand !";
                        cpt ++;}
                         else
                           if (cpt=5){
                          affichage=" Tu as perdu";}
    	         }
    	      while ( cpt<=5 )
     
      }

  7. #7
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Citation Envoyé par CCACC02 Voir le message
    Si le test est faux, pourquoi fonctionne t il?
    Il ne fonctionne pas, il a juste l'air de fonctionner: Le fait que nb ne soit pas inférieur à X n'implique pas que nb soit supérieur à X, car il peut être aussi égal.
    mais je peux remettre toutes les conditions si il le faut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ( nb<X )
    		affichage = "Le nombre indiqué est trop petit !";
    	else	
    		if ( nb>X )
    			affichage = "Le nombre indiqué est trop grand !";
    	}
    	while ( nb!=X )
    		return cpt;
    C'est mieux, mais comme dit plus haut, le cas de l'égalité n'est pas traité et ça serait plus clair avec des accolades (ou à la limiter en plaçant juste le else et le if sur la même ligne comme pour un elseif ou elif dans d'autres langages et en indentant rigoureusement).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  8. #8
    Membre régulier
    Femme Profil pro
    Developpeur logiciel
    Inscrit en
    Juin 2015
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 62
    Points : 74
    Points
    74
    Par défaut
    Conseil 1 : écrire des variables au nom explicite.
    var X ce n'est pas explicite. Quelqu'un qui relit ton code doit tout de suite comprendre de quoi il s'agit.
    Idem pour le nom des fonctions.

    Conseil 2 : par convention on code en anglais .

    Conseil 3 : N'hésite pas à découper ton code en fonction claire. Une fonction == une tâche.

    Conseil 4 : Si tu peux éviter de mettre des valeurs en dur qui vont en plus être réutilisés ou succeptible d'être modifiés par la suite (imagine que tu veuilles faire des niveaux dans ton jeu et qu'après le joueur puisse trouver des nombres entre 1 et 1000), n'hésite pas à utiliser des variables globales. (pour Min/Max number par exemple).

    Je te donne ici un code fonctionnel pour ton problème.
    Pour le compteur, je te laisse réfléchir à une solution correcte et bien implémentée pour le cas ou dans ton jeu si le count > 5 tu perds.
    Suis l'architecture du code ci-dessous. Fais des fonctions, et surtout refactorise toujours.

    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
     
    var count = 0;
    var MAX_NUMBER = 100;
    var MIN_NUMBER = 1;
     
    //  initialise la partie 
    function StartGame() {
      var numberToFind = Math.floor(Math.random() * (MAX_NUMBER + 1));
      userNumber = prompt("Donnez-moi un chiffre entre " + MIN_NUMBER + " et " + MAX_NUMBER);
      CompareValues(userNumber);
    }
     
    // compare la valeur saisie par l'utilisateur et celui à trouver
    function CompareValues(userNumber) {
      do {
        if (userNumber < numberToFind) {
          count++;
          prompt("Le nombre indiqué est trop petit !");
        }
        if (userNumber > numberToFind) {
          count++;
          prompt("Le nombre indiqué est trop grand !");
        }
      } while (numberToFind != userNumber);
     
      prompt("Bravo tu as gagné en " + count + " essais");
    }
    ps : dans ta page HTML n'oublie pas de changer ton onclick :

  9. #9
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 185
    Points
    17 185
    Par défaut
    Un bon schéma, par contre

    Citation Envoyé par noboxstyle Voir le message
    .....
    Conseil 2 : par convention on code en anglais
    .....
    Tout dépend de ton entreprise, ou de ta langue natal et de à qui est destiné TON programme source, moi j'ai toujours commenté en français par défaut, et si le source était destiné à l'étranger, là, je commentai en français et en anglais.
    Pour moi il n'y a pas de convention, ou du moins on peut/doit défendre sa langue.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  10. #10
    Membre régulier
    Femme Profil pro
    Developpeur logiciel
    Inscrit en
    Juin 2015
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 62
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par ProgElecT Voir le message
    Un bon schéma, par contre

    Tout dépend de ton entreprise, ou de ta langue natal et de à qui est destiné TON programme source, moi j'ai toujours commenté en français par défaut, et si le source était destiné à l'étranger, là, je commentai en français et en anglais.
    Pour moi il n'y a pas de convention, ou du moins on peut/doit défendre sa langue.

    Débat sans fin de ce côté là. Mais quand tu débutes, je pense que c'est mieux de t'habituer en anglais.
    Les startup / boites hors administration françaises font l’apogée du code en anglais. Et au delà de ça, cela lui permettra de mieux trouver des réponses à ses questions s'il a le bon vocabulaire technique + la plupart des bons tutos sont en anglais.

  11. #11
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    1- if, else, while,... : mets SYSTÉMATIQUEMENT les accolades { ... }, même s'il n'y a qu'une seule instruction après.
    Citation Envoyé par CCACC02 Voir le message
    Je suis tout a fait d'accord avec toi @jreaux62, mais comme il n'y avait qu'une seule instruction, j'avais pris la liberté de les enlever.
    Retirer les accolades fait partie de ces choses qu’on a envie de faire quand on débute, tout comme écrire du code astucieux mais difficile à relire (par exemple, pour la satisfaction d’une fonction qui tient en une seule ligne). Avec l’expérience on apprend que la lisibilité du code est importante, et que ce n’est pas idiot d’écrire du code qui a l’air idiot. La clarté avant tout.

    Cela étant dit, j’ajoute mes deux centimes avec quelques habitudes à prendre quand on débute :
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  12. #12
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Merci à tous
    Merci pour ces conseils ... prb résolu

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

Discussions similaires

  1. Aucun affichage du résultat
    Par L'aigle de Carthage dans le forum NodeJS
    Réponses: 4
    Dernier message: 09/01/2016, 18h30
  2. [MySQL] Problème fonction d'affichage tableaux résultats
    Par stefsas dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/03/2010, 14h44
  3. [MySQL] Affichage des résultats de la requête avec la fonction mysql_fetch_row
    Par shada dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/03/2009, 14h42
  4. [Tableaux] affichage résultat d'une fonction
    Par benooiit dans le forum Langage
    Réponses: 4
    Dernier message: 04/01/2007, 17h37
  5. Probleme d'affichage du résultat de ma fonction php
    Par bouba83 dans le forum Langage
    Réponses: 12
    Dernier message: 28/11/2006, 14h31

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