1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
| #include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
void AfficherJeu(int *essai);
void VerifierCombi(char * proposition1, char * test1,char * solution);
void ProposerCombi(char * proposition);
void GenererCombiAleatoire(char * solution);
void AfficherMenu();
void jeu();
void regles();
void initialisation();
void AfficherResultat(char *proposition1,char *resultat,int *essai);
int main()
{
char choix[2];
srand(time(NULL));
AfficherMenu();
//On demande à l'utilisateur ce qu'il veux faire
do {
fflush(stdin);//Permet de ne pas avoir 2 fois le contenu du printf quand l'utilisateur entre une lettre ou un chiffre non-contenu dans le while ou quand il redemande le menu.
printf("Que voulez-vous faire ? \n");
scanf("%s",choix);
choix[0]=toupper(choix[0]);
if(choix[0]!='J'&&choix[0]!='R'&&choix[0]!='Q'||strlen(choix)!=1)
printf("\nVeuillez entrer la lettre 'J' pour jouer, 'R' pour voir les r%cgles ou 'Q' pour quitter.\a\n\n",138);
}
while(choix[0]!='J'&&choix[0]!='R'&&choix[0]!='Q'||strlen(choix)!=1);
switch(choix[0]){
case 'J' : jeu();
break;
case 'R' : regles();
break;
case 'Q' : printf("\nVeuillez appuyer sur une touche pour quitter.\n");
exit;
}
}
/*Fonction qui affiche le résultat*/
void AfficherResultat(char *proposition1,char *solution,int *essai)
{
if(strcmp(proposition1,solution)==0)
printf("Bravo vous avez r%cussi %c trouv%c la solution qui %ctait %s en %d coup(s)!\n",130,133,130,130,solution,*essai-1);
else printf("Dommage! Vous n'avez pas trouv%c la solution qui %ctait %s.",130,130,solution);
}
void AfficherMenu()
{
printf("\n---------------------------------\nProgramme r%calis%c par l'%ctudiant : Legrain Thomas\nSection : 1ere IRT Groupe : 4\nAnn%ce acad%cmique : 2009/2010\nNom de l'enseignant : De Bodt\nProjet : Jeu de Mastermind\n---------------------------------",130,130,130,130,130);
printf("\n\n=============MENU=============\n\n(J)ouer\n(R)%cgles du jeu\n(Q)uitter\n\n===============================\n\n\n",138);
}
//Procédure pour afficher les règles.
void regles()
{
printf("\nVous avez choisi d'afficher les r%cgles du jeu.",138);
printf("\n\n============REGLES============\n");
printf("\nLe programme choisit une combinaison de 4 pions de couleurs au hasard");
printf("\nparmi 6 couleurs disponibles.Cette combinaison de pions peut contenir");
printf("\nplusieurs fois la m%cme couleur.Vous devez essayer de la deviner en",136);
printf("\nproposant au maximum dix combinaisons.Pour chaque tentative le programme");
printf("\nindique les couleurs bien plac%ces (via la lettre 'N')et les couleurs mal",130);
printf("\nplac%ces (via la lettre 'B').Si le nombre maximal d'essais est atteint,",130);
printf("\nle programme indique au joueur qu'il a perdu et donne la combinaison.");
main();
}
void jeu()
{
char solution[5],proposition[5],proposition1[5],test1[5];
int essai=1;
GenererCombiAleatoire(solution);
printf("%s",solution);
while(essai<=10&&strcmp(proposition1,solution)!=0)
{initialisation();
printf("\n\nProposition %d\n",essai);
VerifierCombi(proposition1,test1,solution);
AfficherJeu(&essai);
essai++;}
AfficherResultat(proposition1,solution,&essai);
}
/*--------------------------------------------
Fonction qui donne les couleurs disponibles à chaque proposition pour plus de visibilité*/
void initialisation()
{
printf("=======================================================================");
printf("\nCouleurs disponibles : (R)ouge,(V)ert,(B)leu,(J)aune,(O)range,(M)arron.\n");
printf("=======================================================================");
}
/*--------------------------------------------
Fin fonction*/
/*--------------------------------------------
Création de la fonction qui génère la combinaison aléatoire et qui la renvoye dans jeu*/
void GenererCombiAleatoire(char * solution)
{
char Lettres[7]="RVBJOM";
int a;
for(a=0;a<=3;a++)
solution[a]=Lettres[rand()%6];
solution[4] = '\0';
}
/*---------------------------------------------
Fin de la fonction qui génère la combinaison aléatoire*/
/*---------------------------------------------
Début de la fonction qui demande à l'utilisateur de rentrer une proposition*/
void ProposerCombi(char * proposition)
{
int a;
do{scanf("%s",proposition);
for(a=0;a<=3;a++)
proposition[a]=toupper(proposition[a]);
if(strlen(proposition)!=4||proposition[0]!='R'&&proposition[0]!='V'&&proposition[0]!='B'&&proposition[0]!='J'&&proposition[0]!='O'&&proposition[0]!='M'||proposition[1]!='R'&&proposition[1]!='V'&&proposition[1]!='B'&&proposition[1]!='J'&&proposition[1]!='O'&&proposition[1]!='M'||proposition[2]!='R'&&proposition[2]!='V'&&proposition[2]!='B'&&proposition[2]!='J'&&proposition[2]!='O'&&proposition[2]!='M'||proposition[3]!='R'&&proposition[3]!='V'&&proposition[3]!='B'&&proposition[3]!='J'&&proposition[3]!='O'&&proposition[3]!='M')
printf("Combinaison impossible. Recommencez!\n");}
while(strlen(proposition)!=4||proposition[0]!='R'&&proposition[0]!='V'&&proposition[0]!='B'&&proposition[0]!='J'&&proposition[0]!='O'&&proposition[0]!='M'||proposition[1]!='R'&&proposition[1]!='V'&&proposition[1]!='B'&&proposition[1]!='J'&&proposition[1]!='O'&&proposition[1]!='M'||proposition[2]!='R'&&proposition[2]!='V'&&proposition[2]!='B'&&proposition[2]!='J'&&proposition[2]!='O'&&proposition[2]!='M'||proposition[3]!='R'&&proposition[3]!='V'&&proposition[3]!='B'&&proposition[3]!='J'&&proposition[3]!='O'&&proposition[3]!='M');
proposition[4] = '\0';
}
/*---------------------------------------------
Fin de la fonction*/
/*---------------------------------------------
Cette fonction compare la chaine entrée par l'utilisateur à celle générée par l'ordinateur*/
void VerifierCombi(char * proposition1,char *test1, char * solution)
{
char proposition[5],test[5];
int z;
ProposerCombi(proposition);
strcpy(proposition1,proposition);
for(z=0;z<=3;z++)
{
if(proposition[z]==solution[z])//Quand la lettre est au bon endroit dans la combinaison
test[z]='N';
else if (proposition[z]!=solution[0]&&proposition[z]!=solution[1]&&proposition[z]!=solution[2]&&proposition[z]!=solution[3])//Quand la lettre n'est pas présente dans la combinaison
test[z]='.';
else test[z]='B';//Quand la lettre est présente mais pas à la bonne place
}
test[4] = '\0' ;
strcpy(test1,test);
}
/*---------------------------------------------
Fin de la fonction*/
/*---------------------------------------------
Cette fonction Affiche le jeu*/
void AfficherJeu(int *essai)
{
char proposition1[5],test1[5];
int z=10,a;
printf("____________________________________________");
for(z=10;z>=*essai+1;z--)
printf("\n[[%2d]-[ (*) (*) (*) (*) ] [ [.] [.] [.] [.] ]",z);
printf("\n");
printf("[[%2d]-",*essai);
printf("[ ");
for(a=0;a<=3;a++)
printf("(%c) ",proposition1[a]);
printf("]");
printf(" [ ");
for(a=0;a<=3;a++)
printf("[%c] ",test1[a]);
printf("] \n");
printf("____________________________________________\n\n");
}
/*------------------------------------------------
Fin de la fonction*/ |
Partager