le fou Forza Massallia | Bon aprés avoir lu vos remarques, et relu les régles du mastermind j'ai effectué quelques changements. Voici la nouvelle version :
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #define COUP_MAX 12 // Nombre de coup Maximal
- #define NB_CHIFFRE 5 // Nombre de chiffre dans le code
- #define BORNE_MAX 10 // Borne superieur du hasard
- // Different entrees pour le menu d'affichage
- #define RESULTAT 'r'
- #define GAGNE 'g'
- #define PERDU 'p'
- #define MENU 'm'
- #define IN 1
- // Fonctions externes
- static void init_res (char res[COUP_MAX][NB_CHIFFRE]);
- static void raz_chiffre (int chiffre[2][10]);
- static int hasard(void);
- static void saisie (int ROW, int essai[COUP_MAX][NB_CHIFFRE]);
- static void teste (int ROW, int *p_bon,char res[COUP_MAX][NB_CHIFFRE], int code[NB_CHIFFRE], int essai[COUP_MAX][NB_CHIFFRE], int chiffre[2][10]);
- static void affichage(char mode, int ROW, char res[COUP_MAX][NB_CHIFFRE], int code[NB_CHIFFRE], int essai[COUP_MAX][NB_CHIFFRE]);
- // Programme principal
- int main(void)
- {
- int essai[COUP_MAX][NB_CHIFFRE] = {{0}}; // Tableau conteant les combinaisons essayees
- char res[COUP_MAX][NB_CHIFFRE]; // Tableau contenant les resultats de chaques combinaisons
- int code[NB_CHIFFRE] = {0}; // Tableau contenant le code a decouvrir
- int chiffre[2][10] = {{0,1,2,3,4,5,6,7,8,9},{0}}; // Tableau de controle des valeurs jouees
- int bon;
- int ROW; // Indique la ligne en cours de traitement
- int coup; // Indique le nombre de coup joue
- int i;
- coup = 1;
- ROW = 0;
- // initialise le tableau RES & CODE
- init_res (res);
- // Generation du code aleatoire
- srand(time(NULL));
- for (i = 0; i < NB_CHIFFRE; i++) {
- code[i] = hasard();
- printf("%d ", code[i]);
- }
- // Affichage du menu
- affichage(MENU,0,res,code,essai);
- // Test de l'essai
- do {
- saisie(ROW,essai);
- bon = 0;
- teste(ROW,&bon,res,code,essai,chiffre); // On teste le code entré
- affichage(RESULTAT,ROW,res,code,essai); // On affiche le code essaye et son resultat
- raz_chiffre(chiffre); // On reinitialise le tableau de controle
- ROW++;
- coup++;
- }
- while (bon != NB_CHIFFRE && coup <= COUP_MAX);
- if (bon == NB_CHIFFRE)
- affichage(GAGNE,0,res,code,essai);
- else
- affichage(PERDU,0,res,code,essai);
- return 0;
- }
- // FONCTION INITIALISATION DU TABLEAU RESULTAT
- static void init_res (char res[COUP_MAX][NB_CHIFFRE]) {
- int j;
- for (j = 0; j < COUP_MAX; j++) {
- int i;
- for (i = 0; i < NB_CHIFFRE; i++)
- res[j][i] = '.';
- }
- }
- // FONCTION REMISE A ZERO DU CODE TEMP
- static void raz_chiffre (int chiffre[2][10]) {
- int i;
- for (i = 0; i < 10; i++)
- chiffre[1][i] = 0;
- }
- // FONCTION HASARD
- static int hasard(void) {
- return (int)(rand()/(double)RAND_MAX * (BORNE_MAX));
- }
- // FONCTION DE SAISIE DE LA COMBINAISON
- static void saisie (int ROW, int essai[COUP_MAX][NB_CHIFFRE]) {
- int n;
- do {
- char chaine[20];
- printf("\nEntrez votre combinaison : " );
- fgets(chaine, sizeof chaine, stdin);
- n = sscanf(chaine, "%d %d %d %d %d", &essai[ROW][0], &essai[ROW][1], &essai[ROW][2], &essai[ROW][3],&essai[ROW][4] );
- if (n != NB_CHIFFRE)
- puts("ERREUR" );
- }
- while (n != NB_CHIFFRE);
- }
- // FONCTION TEST
- static void teste (int ROW, int *p_bon, char res[COUP_MAX][NB_CHIFFRE], int code[NB_CHIFFRE], int essai[COUP_MAX][NB_CHIFFRE], int chiffre[2][10]) {
- int i,j,k;
- k = 0;
- /* boucle pour les valeurs presentes et bien placees*/
- for (i = 0; i < NB_CHIFFRE; i++)
- if (essai[ROW][i] == code[i]) {
- res[ROW][k++] = '#';
- chiffre[1][essai[ROW][i]] = IN;
- (*p_bon)++;
- }
- /* boucle pour les valeurs presentes mais mal placees */
- for (i = 0; i < NB_CHIFFRE; i++)
- for (j = 0; j < NB_CHIFFRE; j++)
- if (essai[ROW][i] == code[j] && j != i && chiffre[1][essai[ROW][i]] != IN) {
- res[ROW][k++] = '*';
- chiffre[1][essai[ROW][i]] = IN;
- }
- }
- // FONCTION AFFICHAGE
- static void affichage(char mode, int ROW, char res[COUP_MAX][NB_CHIFFRE], int code[NB_CHIFFRE], int essai[COUP_MAX][NB_CHIFFRE]) {
- int i, j;
- switch (mode) {
- case 'r' :
- for (j = 0; j <= ROW; j++) {
- for (i = 0; i < NB_CHIFFRE; i++)
- printf("%d ", essai[j][i]);
- printf("\t" );
- for (i = 0; i < NB_CHIFFRE; i++)
- printf("%c ", res[j][i]);
- printf("\n" );
- }
- break;
- case 'p' :
- printf("\nPERDU, le code correct etait :\t" );
- for (i = 0; i < NB_CHIFFRE; i++)
- printf("%d ", code[i]);
- printf("\n\n" );
- break;
- case 'g' :
- printf("\nGAGNE, le code etait bien :\t" );
- for (i = 0; i < NB_CHIFFRE; i++)
- printf("%d ", code[i]);
- printf("\n\n" );
- break;
- case 'm' :
- printf("\t*****************************\n" );
- printf("\t* *\n" );
- printf("\t* MASTERMIND *\n" );
- printf("\t* *\n" );
- printf("\t*****************************\n" );
- printf("\n\n" );
- printf(" - Utilisez les combinaisons dans le style : a b c d e puis 'entree'\n" );
- printf(" - Les nombres possibles sont compris entre 0 et 9" );
- printf("\n\n" );
- break;
- }
- }
|
Ps : les remarques sont toujours les bienvenues. Les critiques aussi. Message édité par le fou le 10-12-2007 à 18:38:02 ---------------
Celui qui sauve une vie, sauve l'humanité (Le Talmud) - Personne n'a plus grand amour que celui de donner sa vie pour ses amis (Jean XV, 13)
|