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