Nombre secret

Résolu/Fermé
cocodu67... Messages postés 3153 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 4 avril 2024 - 2 mars 2013 à 23:40
cocodu67... Messages postés 3153 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 4 avril 2024 - 3 mars 2013 à 19:01
Bonsoir,

Je dois faire un programme assez simple, on appuis sur un bouton en haut à gauche et ça génère un nombre aléatoire entre 0 et 100 puis dans la zone de saisie au centre on rentre un nombre et on clique sur l'autre bouton pour faire la vérification et ça affiche si c'est plus grand ou plus petit ou égal au nombre généré.

Voici le fichier HTML : https://www.cjoint.com/c/CCcxIIKdW38

Voici le fichier JavaScript : https://www.cjoint.com/c/CCcxIP7bR2M

Pour ceux qui ont peur de télécharger, voici le code HTML :

<html>
<head><title>Le nombre secret</title></head>
<body>
<h1>Le nombre secret</h1>
<script language="javascript" src="nombre_secret_fonctions.js"></script>
<input type="button" value="Choisir un nouveau nombre au hasard" OnClick="has()">

<form name="formu">
<div align="center">
<b>Quel est ce nombre ? :</b>
<input name="nombre" type="text" size="4">
<input type="button" value="Vérifier" onclick="secret();">
</div>
</form>

</body>
</html>


Et voici le code JavaScript :

function has()
{
n=Math.floor(Math.random()*100);
}

function secret()
{
if((eval(document.formu.nombre.value)<n)||(eval(document.formu.nombre.value)>n)
{
if(eval(document.formu.nombre.value)<n)
alert("Mauvais choix, le nombre est plus grand");
else
alert("Mauvais choix, le nombre est plus petit");
}
else
alert("BRAVO c'est le bon nombre !");
}


Le problème c'est que si je clique sur le bouton pour générer le nombre j'ai l'impression qu'il ne se passe rien, ce qui se confirme si je saisis un nombre et que je clique pour la vérification.

Est-ce que quelqu'un voit l'erreur ?

Merci beaucoup :)

1 réponse

Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 150
3 mars 2013 à 11:34
Salut

Ceci devrait être plus correct :)

function has()
{
var n = Math.floor ( Math.random() * 101 );
}

function secret()
{

if(eval(document.formu.nombre.value)<n){
alert("Mauvais choix, le nombre est plus grand");}

else if (eval(document.formu.nombre.value)>n){
alert("Mauvais choix, le nombre est plus petit");}

else{
alert("BRAVO c'est le bon nombre !");}

}

Cordialement
Exileur
1
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 150
3 mars 2013 à 11:37
1) La variable "n" n'était pas déclaré.
2) La fonction random génère un nombre ENTRE 0 et 101
3) Simplification du code pour la vérification du nombre
0
cocodu67... Messages postés 3153 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 4 avril 2024 145
3 mars 2013 à 11:44
Salut

Merci beaucoup de ton aide mais cela ne fonctionne toujours pas.

J'ai mis une alerte javascript dans la fonction has afin de vérifier si elle s'exécute et l'alerte s'affiche bien lorsque je clique pour générer le nombre.
Lorsque je met une alerte directement sous l'accolade qui se trouve sous function secret() cela fonctionne également lorsque je clique sur le bouton Vérifier.

A mon avis, c'est la vérification qui ne se fait pas.

As-tu une idée ?
0
cocodu67... Messages postés 3153 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 4 avril 2024 145
3 mars 2013 à 11:50
Finalement, j'ai trouvé mon erreur.

Si, dans une fonction on écrit
var n = Math.floor ( Math.random() * 101 ); 

La variable n n'existe que dans cette fonction et donc si on utilise la même variable dan une autre fonction, cela ne peut pas fonctionner.

Il suffit avoir de supprimer le var pour obtenir
n = Math.floor ( Math.random() * 101 ); 

et ça fonctionne :)

Merci beaucoup d'avoir pris le temps de me corriger, avec ta syntaxe, ma fonction secret est nettement plus compréhensible.

En générale j'arrive à faire les exo mais c'est la syntaxe qui est très mauvaise chez moi du coup souvent j'ai du mal à m'y retrouver si je regarde le code quelques semaines après.

Je pense qu'on aura souvent l'occasion de se reparler, j'adore utiliser CCM car on a toujours des réponses très rapidement.

Bonne journée
0
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 150
3 mars 2013 à 12:02
Effectivement, la variable dois être globale et ne dois donc pas pas être déclaré avec "var" puisque qu'elle est utilisé dans une autre fonction. >_<
0
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 150
Modifié par Exileur le 3/03/2013 à 18:36
J'ai fait quelques modifications sur ton script :

1) Les utilisateurs peuvent choisir un niveau
2) Les utilisateurs ne peuvent plus appuyer sur "entré" dans le formulaire
3) Les utilisateurs ne peuvent pas valider leur choix si ils rentres des caractères dans le formulaire.
4) Une fois la partie terminé, on leur propose de refaire une partie
5) J'ai aussi fait une correction sur la fonction random ou l'on dois bien indiquer 100 et pas 101.

idées d'améliorations :
Afficher "C'est plus", "c'est moins" via un div cacher ou qq chose du genre plutot que de passer par une alerte, quitte a garder l'alerte quand l'utilisateur a gagner.
Afficher les précédents "coup" tester pour que l'utilisateur ne rentre pas plusieurs fois le même nombre.
Compter les coups, ou les limiter.
proposer un niveau "challenge" qui enregistre le pseudo du joueur avec le nombre minimum de coup.

Le code html :

<html>
<head><title>Le nombre secret</title></head>
<body>
<h1>Le nombre secret</h1>
<script language="javascript" src="nombre_secret_fonctions.js"></script>

<FORM NAME="niveau">
<INPUT TYPE="radio" NAME="niveau" VALUE="10" checked>Niveau 1 : 0-10<BR>
<INPUT TYPE="radio" NAME="niveau" VALUE="100" >Niveau 2 : 0-100</br>
<INPUT TYPE="radio" NAME="niveau" VALUE="200" >Niveau 3 : 0-200<BR>
<INPUT TYPE="button"NAME="but" VALUE="Générer un nombre" onClick="has();">
</FORM>

<form name="formu">
<div align="center">
<b>Quel est ce nombre ? :</b>
<input name="nombre" type="text" size="3" pattern="[0-9]" onkeypress="refuserToucheEntree(event);"/>
<input type="button" value="Vérifier" onclick="secret();">
</div>
</form>

</body>
</html>

Le code JS :

function has()
{
var i;
var tab = document.getElementsByName('niveau');
for (i=0;i<tab.length;i++)
{
if(tab[i].checked)
{
niveau = tab[i].value;
break;
}
}
n = Math.floor ( Math.random() * niveau );
}

function refuserToucheEntree(event)
{
if(!event && window.event) {
event = window.event;
}

if(event.keyCode == 13) {
event.returnValue = false;
event.cancelBubble = true;
}

if(event.which == 13) {
event.preventDefault();
event.stopPropagation();
}
}

function secret()
{

if(eval(document.formu.nombre.value)<n){
alert("Mauvais choix, le nombre est plus grand");}

else if (eval(document.formu.nombre.value)>n){
alert("Mauvais choix, le nombre est plus petit");}

else{
if (confirm("Bravo, vous avez trouve le nombre mystere ! Nouvelle partie ?")) {
document.getElementsByName("nombre")[0].value = "";
has();
}
}

}
0