<HTML>
<HEAD>
<TITLE>test javascript : jeu du + ou -</TITLE>
<META NAME="keywords" content="Javascript,C,form,HTML,internet">
<META name="description" content=
"Comment lancer un programme (proche du C) dans une fenêtre HTML :
Exemple complet : jeu de plus ou moins.">
<SCRIPT language="JavaScript">
var LIMITE=500; //ceci est une variable globale, pour remplacer le #define
//fonction qui retourne un nombre entre 1 et max compris
function nb_aleatoire(max)
{
var nb=Math.floor((Math.random()*max)+1);
return nb;
}
//fonction qui affiche un message d'encouragement (choisi aléatoirement parmi 3)
function encouragement(lieu_du_message)
{
var c=nb_aleatoire(3); //choix aléatoire d'un des trois messages
if(c=="2") lieu_du_message.value="courage, tu vas y arriver";
else if(c=="1") lieu_du_message.value="avec un moral comme le tien, tu ne peux que gagner !";
else lieu_du_message.value="j'ai confiance en ta perspicacité";
}
//fonction qui à qui l'on donne le nombre d'essais et qui en déduit un commentaire
function conclusion(lieu_du_message,nb_essais)
{
alert("gagné en " + nb_essais + " essais! ");
if(nb_essais<2) lieu_du_message.value="surveille ton ami(e) de près !";
else if(nb_essais<5)lieu_du_message.value="bravo, c'est impressionnant !";
else if(nb_essais<12)lieu_du_message.value="ce n'est pas mal";
else lieu_du_message.value="pas génial comme score !";
}
function un_jeu(fen_msg,fen_prop,fen_nb,fen_enc)
{
var proposition=0;var nb=0;var mini=0;var maxi=LIMITE+1;
var solution=nb_aleatoire(LIMITE);
do
{
if((nb>5) && (nb_aleatoire(4)==1)) encouragement(fen_enc); //après 5 essais,1 fois sur 4 env.
proposition=parseInt(prompt("entrez votre proposition (-1 pour un conseil)",proposition));
fen_prop.value=proposition;
if(proposition == -666) //ce cas n'ajoute pas 1 à nb
alert("tu as trouvé le code tricheur : la solution est " + solution);
else if(isNaN(proposition)) { alert("abandon"); return -1; }
else //tous ces cas ajoutent 1 à nb
{
if(proposition == -1)
{
alert("à ta place, je proposerai " + Math.floor((mini+maxi)/2));
fen_msg.value="attention, ce conseil est compté comme un essai supplémentaire!";
}
else if(proposition<=0 || proposition>LIMITE)
{
fen_msg.value="franchement hors limites";
fen_enc.value="un peu de concentration SVP !";
}
else if(proposition<=mini)
{
fen_msg.value="je t'ai déja dit que c'est plus grand que " + mini;
fen_enc.value="un peu de concentration SVP !";
}
else if(proposition<solution)
{
mini=proposition;
fen_msg.value="c'est trop petit";
}
else if(proposition>=maxi)
{
fen_msg.value="je t'ai déja dit que c'est plus petit que " + maxi;
fen_enc.value="un peu de concentration SVP !";
}
else if(proposition>solution)
{
maxi=proposition;
fen_msg.value="c'est trop grand";
}
nb++;
fen_nb.value=nb;
}
}
while(!isNaN(proposition) && proposition!=solution);
if(nb>0)conclusion(fen_enc,nb);
fen_msg.value="gagné en " + nb + " essais";
return nb; //pour que main puisse traiter le "high score"
}
</script>
</HEAD>
<BODY bgcolor="#FFFFBB" background="/img/fond-var.gif">
<H1 align="center">test programmation javascript</H1>
<H2 align="center">jeu de plus ou moins</H2>
<P>Bonjour. Vous devez découvrir un nombre entre 1 et
<script language="JavaScript">document.write(LIMITE);</script>
(compris)</P>
<FORM name="in_out">
<!-- la mise en page pourrait être améliorée mais ce n'est pas l'ojectif ici -->
<P>votre proposition : <INPUT type="text" size="7" name="prop"></P>
<P>nombre d'essais : <INPUT type="text" size="7" name="nb" value="0"></P>
<P>mon conseil : <INPUT type="text" size="60" name="commentaire" value="cliquez sur 'jouer'"></P>
<P>commentaire : <INPUT type="text" size="60" name="encouragement" value=""></P>
<P><input type="button" value="jouer"
onClick="un_jeu(in_out.commentaire,in_out.prop,in_out.nb,in_out.encouragement);">
<input type="reset" value="réinitialiser"></P>
</FORM>
<HR>
<P><A HREF="http://pat.trau.fr/">Patrick Trau</A>,
<A HREF="http://www-ipst.u-strasbg.fr/">IPST</A>,
<A HREF="http://www-ulp.u-strasbg.fr/">Université Louis Pasteur</A>
Strasbourg, mai 2002</P>
</BODY>
</HTML>
Patrick Trau, IPST, Université Louis Pasteur Strasbourg, mai 2002