/*----------------------------------------------------------*/ /* */ /* AUTHOR : Eric VIOLARD */ /* E-MAIL : violard@icps.u-strasbg.fr */ /* ORGANISM : Université Louis Pasteur (Strasbourg) */ /* CREATION : 28/12/02 */ /* */ /* ---------------------------------------------------------*/ /* Un petit programme pour jouer à MOTUS */ #include #include #include /* --- Définition du type des booléens --- */ typedef int bool; #define true 1 #define false 0 #define NB_MOTS_DICO 2844 /* nombre de mots du dictionnaire */ chr2str(char c,char s[2]) /* convertit un caractère en une chaîne */ /* la chaine s est modifiée par effet de bord */ { s[0]=c; s[1]='\0'; } bool present(char c, char s[]) /* teste la présence du caractère c dans la chaine s */ /* retourne le plus petit indice i tel que s[i]==c ou -1 si c n'est pas un caractère de s */ { bool trouve=false; /* à vrai si c a été trouvé dans s (initialement faux) */ int i=0; /* pour parcourir s */ while(!trouve && s[i]!='\0') /* parcours de s tant que c n'a pas été trouvé et qu'il reste un caractère */ { if(s[i]==c) /* on a trouvé */ trouve=true; i++; /* on passe au caractère suivant */ } return trouve; } void suppression_occ(char c, char s[]) /* ote la première occurrence du caractère c dans la chaîne s (par effet de bord) */ { int i=0; /* pour parcourir s */ while(s[i]!='\0' && s[i]!=c) /* parcours de s tant que c n'a pas été trouvé et qu'il reste un caractère */ i++; if(s[i]!='\0') do { i++; s[i-1]=s[i]; } while(s[i]!='\0'); } main() { char mot_a_trouver[6]; /* le mot à trouver */ char reste_a_trouver[6]; /* les lettres qui restent à trouver */ char bien_place[6]="-----"; /* les lettres bien placées (initialement aucune) */ char mal_place[6]=""; /* les lettres mal placées (initialement aucune) */ char prop[6]; /* proposition du joueur */ char tmp[2]; /* temporaire */ int i; /* pour parcourir les chaines */ bool correct; /* à vrai si la dernière proposition est bien un mot du dictionnaire */ bool trouve=false; /* à vrai si le mot à trouver a été trouvé */ int nb_tentative=0; /* nombre de tentative du joueur (initialement 0) */ /* -- choix aléatoire d'un mot -- */ srand(time(NULL)); strcpy(mot_a_trouver,dico[rand()%NB_MOTS_DICO]); strcpy(reste_a_trouver,mot_a_trouver); /* --- petite présentation au début du jeu --- */ printf("\n***********************\n"); printf("* M O T U S *\n"); printf("***********************\n\n"); /* --- déroulement du jeu --- */ while( !trouve && nb_tentative<6 ) { /* -- affichage des indications -- */ printf("%s [%5s] ",bien_place,mal_place); scanf(" %s",&prop); nb_tentative++; /* -- vérification de la proposition du joueur -- */ correct=false; for(i=0;i