source C du jeu de plus ou moins

Le programme doit choisir un nombre aléatoire, puis proposer à l'utilisateur de le découvrir, en :

// Jeu du plus ou moins, avec de nombreuses options.
// Utilisation de fonctions.

#include <stdio.h>  //pour printf, scanf...
#include <stdlib.h> //pour rand et srand
#include <time.h>   //pour time
#define LIMITE 500

//fonction qui retourne un nombre entre 1 et max compris
int nb_aleatoire(int max)  
 {
  int nb;
  srand(time(NULL));  //initialisation du générateur de nombres aléatoires
  nb=(rand()%max)+1;
  return nb;
 }

//fonction qui affiche un message d'encouragement (choisi aléatoirement entre 3)
void encouragement(void) 
 {
  int c=rand()%3;  //choix aléatoire d'un des trois messages
  if(c==2) printf("courage, tu vas y arriver\n");
  else if(c==1) printf("avec un moral comme le tien, tu ne peux que gagner !\n");
  else printf("j'ai confiance en ta perspicacité\n");
 }

//fonction qui à qui l'on donne le nombre d'essais et qui en déduit un commentaire
void conclusion(int nb_essais) 
 {
  printf("gagné en %d essais! \n",nb_essais);
  if(nb_essais<2)printf("surveille ton ami(e) de près ! \n");
  else if(nb_essais<5)printf("bravo, c'est impressionnant !\n");
  else if(nb_essais<12)printf("ce n'est pas mal\n");
  else printf("pas génial comme score !\n");
 }

int un_jeu(void)  //avant c'était main. Retourne le score de ce jeu
 {
  int solution,proposition,nb=0,mini=0,maxi=LIMITE+1;
  solution=nb_aleatoire(LIMITE);
  do
   {
    if((nb>5) && (nb_aleatoire(4)==1)) encouragement();  //après 5 essais,1 fois sur 4 env.
    printf("entrez votre proposition (-1 pour un conseil) : ");
    scanf("%d",&proposition);
    if(proposition==-666)   //ce cas n'ajoute pas 1 à nb
      printf("tu as trouvé le code tricheur : la solution est %d \n",solution);
    else   //tous ces cas ajoutent 1 à nb
     {
      if(proposition==-1)
       {
        printf("à ta place, je proposerai %d\n",(mini+maxi)/2);
        printf("attention, ce conseil est compté comme un essai supplémentaire!\n");
       }
      else if(proposition<=0 || proposition>LIMITE) 
          printf("franchement hors limites\n");
      else if(proposition<=mini)
          printf("je t'ai déja dit que c'est plus grand que %d !\n",mini);
      else if(proposition<solution)
         {
          mini=proposition;
          printf("c'est trop petit\n");
         }
      else if(proposition>=maxi)
          printf("je t'ai déja dit que c'est plus petit que %d !\n",maxi);
      else if(proposition>solution)
         {
          maxi=proposition;
          printf("c'est trop grand\n");
         }
      nb++;
     }
   }
  while(proposition!=solution);
  conclusion(nb);
  return nb; //pour que main puisse traiter le "high score"
 }

int main(void)
 {
  int score;
  printf("Bonjour. Tu dois découvrir un nombre entre 1 et %d (compris)\n",LIMITE);
  score=un_jeu();
  printf("Au revoir, merci d'avoir joué avec moi.\n");
  return 0;
 }

Vous pouvez en voir la version JavaScript ici.


Patrick Trau, IPST, Université Louis Pasteur Strasbourg, mai 2002