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