source du jeu de plus ou moins


<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);">
     &nbsp;&nbsp;&nbsp;
     <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