Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
3364 connectés 

  FORUM HardWare.fr
  Programmation
  C

  intégrer le bonhomme du pendu au jeu du pendu en C

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

intégrer le bonhomme du pendu au jeu du pendu en C

n°2272742
thea3492
Posté le 04-01-2016 à 20:58:29  profilanswer
 

Bonsoir,  
j'ai dans le cadre d'un projet d'informatique de réaliser le jeu du pendu. J'ai créer le jeu mais sans le pendu qui evolue a chaque erreur de lettre et je n'arrive pas a savoir comment faire j'ai essayer plusieurs choses comme crée une grille avec les parties du pendu dans chaque case mais je n'arrive pas a attribuer une erreur a une case ou bien une idee je juste faire apparaitre des tirets supplémentaire sur le coté du jeu pour faire un bonhomme mais pareil je sais pas vraiment ou l'intégrer :/
Je tiens a préciser que mon prof m'a beaucoup aidé déjà je n'aurai jamais trouvé tout ça toute seule !
Merci de votre aide !
 
Voila le programme:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
 
int gagne(int lettreTrouvee[]);
int rechercheLettre(char lettre, char motSecret[], int lettreTrouvee[]);
char lireCaractere();
int lg;
int pos;
FILE *f;
int i;
int main(int argc, char* argv[])
{
    char lettre = 0;
    char motSecret[80];
    srand (time(NULL));
    f=fopen("mots.txt","r" );
     pos=rand()%66+1;
    for (i=1;i<=pos;i++)
        fgets(motSecret,80,f);
    fclose(f);
    lg=strlen(motSecret);
    int lettreTrouvee[9] = {0};
    int coupsRestants = 10;
    int i = 0;
 
    printf("     Bienvenue dans le Pendu !     \n" );
    printf("***********************************" );
 
 
    while (coupsRestants > 0 && !gagne(lettreTrouvee))
    {
        printf("\n\nIl vous reste %d coups a jouer", coupsRestants);
        printf("\nQuel est le mot secret ? \n\n\t\t" );
 
        for (i = 0 ; i < lg ; i++)
        {
            if (lettreTrouvee[i])
                printf("%c", motSecret[i]);
            else
                printf("*" );
        }
 
        printf("\n\nProposez une lettre : " );
        lettre = lireCaractere();
 
 
        if (!rechercheLettre(lettre, motSecret, lettreTrouvee))
        {
            coupsRestants--;
        }
    }
 
 
    if (gagne(lettreTrouvee))
        printf("\n\nBRAVO ! Le mot secret etait bien : %s", motSecret);
    else
        printf("\n\nPerdu ! Le mot secret etait : %s", motSecret);
 
        return 0;
}
 
char lireCaractere()
{
    char caractere = 0;
 
    caractere = getchar();
    caractere = toupper(caractere);
 
 
    while (getchar() != '\n') ;
 
    return caractere;
}
 
int gagne(int lettreTrouvee[])
{
    int i = 0;
    int joueurGagne = 1;
 
    for (i = 0 ; i < lg ; i++)
    {
        if (lettreTrouvee[i] == 0)
            joueurGagne = 0;
    }
 
    return joueurGagne;
}
 
int rechercheLettre(char lettre, char motSecret[], int lettreTrouvee[])
{
    int i = 0;
    int bonneLettre = 0;
 
 
    for (i = 0 ; motSecret[i] != '\0' ; i++)
    {
        if (lettre == motSecret[i])
        {
            bonneLettre = 1;
            lettreTrouvee[i] = 1;
        }
    }
 
    return bonneLettre;
}
 

mood
Publicité
Posté le 04-01-2016 à 20:58:29  profilanswer
 

n°2272743
rat de com​bat
attention rongeur méchant!
Posté le 04-01-2016 à 21:34:30  profilanswer
 

Merci d'utiliser des balises pour le code et surtout des points et virgules dans le message. C'est illisible!

 

En console tu ne peux pas dessiner, faudra essayer de fabriquer un bonhomme avec des caractères.

 

Pour ce qui est du code les variables globales (déclarées avant main()) c'est moche et surtout inutile ici. [Edit: lg est utilisé dans gagne() mais ça peut se changer...] Il faut aussi vérifier que fopen a retourné un résultat valide (non NULL), dans l'état actuell si le fichier n'est pas disponible le programme plante. Si on teste le programme on voit qu'il reste un \n après le mot à deviner.


Message édité par rat de combat le 04-01-2016 à 21:39:17
n°2272744
thea3492
Posté le 04-01-2016 à 21:41:05  profilanswer
 

merci pour ces indications je sais que l'on peut pas dessiner j'ai fais un pendu en ASCII avec chaque étape dans des cases d'une tableau, mais je voudrais savoir comment et où je peux intégrer ça dans mon programme, en affichant case par case a chaque erreur de lettre.

n°2272745
rat de com​bat
attention rongeur méchant!
Posté le 04-01-2016 à 21:52:12  profilanswer
 

Tu peux poster le tableau (avec des balises fixed)? Avec le C standard il n'est pas possible d'écrire à un endroit précis de la console, il faut afficher le bonhomme ligne par ligne avec des espaces là où il faut.

n°2272747
thea3492
Posté le 04-01-2016 à 21:58:42  profilanswer
 

je pensais a quelque chose comme ça on avait appris a utiliser le gotoxy je sais pas vraiment si je l'utilise bien.
 
 
void dessin(int e)  
 {  
 switch(e)  
  {
 
case 1: gotoxy(3,7);  printf("                        |        \n" );  
      gotoxy(3,8);  printf("                        |\n" );  
      gotoxy(3,9);  printf("                        |\n" );  
      gotoxy(3,10); printf("                        |\n" );  
      gotoxy(3,11); printf("                        |\n" );  
      gotoxy(3,12); printf("                        |\n" );  
      gotoxy(3,13); printf("                        |\n" );  
      gotoxy(3,14); printf("                        |\n" );  
      gotoxy(3,15); printf("                        |\n" );  
      gotoxy(3,16); printf("                        |\n" ); break;
 
case 2: gotoxy(3,6);  printf("                         _______\n" );  
      gotoxy(3,7);  printf("                        |\n" );  
      gotoxy(3,8);  printf("                        |\n" );  
      gotoxy(3,9);  printf("                        |\n" );  
      gotoxy(3,10); printf("                        |\n" );  
      gotoxy(3,11); printf("                        |\n" );  
      gotoxy(3,12); printf("                        |\n" );  
      gotoxy(3,13); printf("                        |\n" );  
      gotoxy(3,14); printf("                        |\n" );  
      gotoxy(3,15); printf("                        |\n" );  
      gotoxy(3,16); printf("                        |\n" ); break;
 
case 3: gotoxy(3,6);  printf("                         _______\n" );  
      gotoxy(3,7);  printf("                        |       |\n" );  
      gotoxy(3,8);  printf("                        |\n" );  
      gotoxy(3,9);  printf("                        |\n" );  
      gotoxy(3,10); printf("                        |\n" );  
      gotoxy(3,11); printf("                        |\n" );  
      gotoxy(3,12); printf("                        |\n" );  
      gotoxy(3,13); printf("                        |\n" );  
      gotoxy(3,14); printf("                        |\n" );  
      gotoxy(3,15); printf("                        |\n" );  
      gotoxy(3,16); printf("                        |\n" ); break;  
 
  case 4:  gotoxy(3,6);  printf("                         _______\n" );  
      gotoxy(3,7);  printf("                        |       |\n" );  
      gotoxy(3,8);  printf("                        |       _\n" );  
      gotoxy(3,9);  printf("                        |      / \\\n" );  
      gotoxy(3,10); printf("                        |      \\_/\n" );  
      gotoxy(3,11); printf("                        |\n" );  
      gotoxy(3,12); printf("                        |\n" );  
      gotoxy(3,13); printf("                        |\n" );  
      gotoxy(3,14); printf("                        |\n" );  
      gotoxy(3,15); printf("                        |\n" );  
      gotoxy(3,16); printf("                        |\n" ); break;  
 
  case 5:  gotoxy(3,6);  printf("                         _______\n" );  
      gotoxy(3,7);  printf("                        |       |\n" );  
      gotoxy(3,8);  printf("                        |       _\n" );  
      gotoxy(3,9);  printf("                        |      / \\\n" );  
      gotoxy(3,10); printf("                        |      \\_/\n" );  
      gotoxy(3,11); printf("                        |       | \n" );  
      gotoxy(3,12); printf("                        |\n" );  
      gotoxy(3,13); printf("                        |\n" );  
      gotoxy(3,14); printf("                        |\n" );  
      gotoxy(3,15); printf("                        |\n" );  
      gotoxy(3,16); printf("                        |\n" ); break;  
 
  case 6:  gotoxy(3,6);  printf("                         _______\n" );  
      gotoxy(3,7);  printf("                        |       |\n" );  
      gotoxy(3,8);  printf("                        |       _\n" );  
      gotoxy(3,9);  printf("                        |      / \\\n" );  
      gotoxy(3,10); printf("                        |      \\_/\n" );  
      gotoxy(3,11); printf("                        |      _|_\n" );  
      gotoxy(3,12); printf("                        |      | |  \n" );  
      gotoxy(3,13); printf("                        |      |_|   \n" );  
      gotoxy(3,14); printf("                        |\n" );  
      gotoxy(3,15); printf("                        |\n" );  
      gotoxy(3,16); printf("                        |\n" ); break;  
 
  case 7:  gotoxy(3,6);  printf("                         _______\n" );  
      gotoxy(3,7);  printf("                        |       |\n" );  
      gotoxy(3,8);  printf("                        |       _\n" );  
      gotoxy(3,9);  printf("                        |      / \\\n" );  
      gotoxy(3,10); printf("                        |      \\_/\n" );  
      gotoxy(3,11); printf("                        |      _|_\n" );  
      gotoxy(3,12); printf("                        |     /| |  \n" );  
      gotoxy(3,13); printf("                        |    / |_|   \n" );  
      gotoxy(3,14); printf("                        |\n" );  
      gotoxy(3,15); printf("                        |\n" );  
      gotoxy(3,16); printf("                        |\n" ); break;  
 
  case 8:  gotoxy(3,6);  printf("                         _______\n" );  
      gotoxy(3,7);  printf("                        |       |\n" );  
      gotoxy(3,8);  printf("                        |       _\n" );  
      gotoxy(3,9);  printf("                        |      / \\\n" );  
      gotoxy(3,10); printf("                        |      \\_/\n" );  
      gotoxy(3,11); printf("                        |      _|_\n" );  
      gotoxy(3,12); printf("                        |     /| |\\\n" );  
      gotoxy(3,13); printf("                        |    / |_| \\\n" );  
      gotoxy(3,14); printf("                        |\n" );  
      gotoxy(3,15); printf("                        |\n" );  
      gotoxy(3,16); printf("                        |\n" ); break;  
 
  case 9:  gotoxy(3,6);  printf("                         _______\n" );  
      gotoxy(3,7);  printf("                        |       |\n" );  
      gotoxy(3,8);  printf("                        |       _\n" );  
      gotoxy(3,9);  printf("                        |      / \\\n" );  
      gotoxy(3,10); printf("                        |      \\_/\n" );  
      gotoxy(3,11); printf("                        |      _|_\n" );  
      gotoxy(3,12); printf("                        |     /| |\\\n" );  
      gotoxy(3,13); printf("                        |    / |_| \\\n" );  
      gotoxy(3,14); printf("                        |       ^\n" );  
      gotoxy(3,15); printf("                        |      /   \n" );  
      gotoxy(3,16); printf("                        |     /     \n" ); break;  
 
  case 10: gotoxy(3,6);  printf("                         _______\n" );  
      gotoxy(3,7);  printf("                        |       |\n" );  
      gotoxy(3,8);  printf("                        |       _\n" );  
      gotoxy(3,9);  printf("                        |      / \\\n" );  
      gotoxy(3,10); printf("                        |      \\_/\n" );  
      gotoxy(3,11); printf("                        |      _|_\n" );  
      gotoxy(3,12); printf("                        |     /| |\\\n" );  
      gotoxy(3,13); printf("                        |    / |_| \\\n" );  
      gotoxy(3,14); printf("                        |       ^\n" );  
      gotoxy(3,15); printf("                        |      / \\\n" );  
      gotoxy(3,16); printf("                        |     /   \\\n" );  
 }  
 }  
 
 
 
 

n°2272751
rat de com​bat
attention rongeur méchant!
Posté le 04-01-2016 à 22:13:26  profilanswer
 

Le code entre balises la prochaine fois...

 

Il manque les break dans le switch:

Code :
  1. switch(e)
  2. {
  3.     case 1: ...........
  4.             ...........
  5.             break;
  6.     case 2: ...........
  7.             ...........
  8.             break;
  9.     case 3: ...........
  10.             ...........
  11.             break;
  12.     etc...
  13. }
 

gotoxy() du moins sous MinGW ça n'existe pas (plus?), quel compilateur utilises-tu?

 

L'idée en soit est bonne, mais pourquoi tout ces espaces? On peut se passer du gotoxy() mais si c'est autorisé et supporté par le compilateur pourquoi pas... Au lieu de faire un switch() on peut faire plus court avec une boucle et un tableau à deux dimensions, mais je ne sais pas si tu as le niveau pour ça. Sur demande je posterai un exemple.


Message édité par rat de combat le 04-01-2016 à 22:14:24
n°2272753
thea3492
Posté le 04-01-2016 à 22:19:08  profilanswer
 

on utilise codeblocks et comment faire autrement sinon?
je veux bien un exemple que j'essaie quand même.

n°2272754
thea3492
Posté le 04-01-2016 à 22:21:03  profilanswer
 

Sinon ma collègue de projet avait tenté ça:
 
int x,y,choix;
void gotoxy(int x, int y)
{COORD coord;
 coord.X = x;
 coord.Y = y;
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void demander() // ??
{ gotoxy(1,22);printf("Entrer une valer entre 1 et 8 " );
 gotoxy(35,22);scanf("%d",&choix);
}
void ecrire(int choix) // ??
{ int i;
 if (choix==1) {gotoxy(1,20);printf ("-----------" );}
 if (choix==2) {for (i=1;i<9;i++) {gotoxy(6,20-i);printf ("|\n" );}}
 if (choix==3) {gotoxy(6,11);printf ("-----------" );}
 if (choix==4) {gotoxy(15,12);printf ("|" );}
 if (choix==5) {gotoxy(15,13);printf ("O" );}
 if (choix==6) {gotoxy(14,14);printf ("/|\\" );}
 if (choix==7) {gotoxy(14,15);printf ("/ \\" );}
 if (choix==8) {gotoxy(1,25);printf("fin du jeu" );}
}

n°2272756
rat de com​bat
attention rongeur méchant!
Posté le 04-01-2016 à 22:58:38  profilanswer
 

Pour la troisième fois, mets ton code entre balises [cpp ] [/cpp ]!
Codeblocks sous Windows c'est MinGW. La solution de ton collègue utilise la Windows-API, ça fonctionne (j'ai pas testé mais à première vue ça paraît correct) mais uniquement sous Windows, alors que le C standard peut aussi se compiler pour fonctionner sous Linux (et à peu près n'importe où ailleurs). Dans le cas présent ce n'est pas important je pense... Par contre la fonction ecrire() est fausse, il n'y a qu'un bout de bonhomme qui est affiché.
 
La solution alternative dont je parlais, c'est un peu plus court. Je compte sur toi pour ne pas copier bêtement sans avoir compris, sinon vaut mieux en rester au switch (avec des break).  
(Je me demande par contre si il n'y a pas une solution plus courte avec switch sans break, mais comme ça je ne vois pas.)
 

Code :
  1. #include <stdio.h>
  2. void afficher(int morceaux)
  3. {
  4.     char bonhomme[11][15]=
  5.     {
  6.         "  _______     ", 
  7.         " |       |    ", 
  8.         " |       _    ", 
  9.         " |      / \\  ", 
  10.         " |      \\_/  ", 
  11.         " |      _|_   ", 
  12.         " |     /| |\\ ", 
  13.         " |    / |_| \\", 
  14.         " |       ^    ", 
  15.         " |      / \\  ", 
  16.         " |     /   \\ "
  17.     };
  18.    
  19.     int i;
  20.    
  21.     if(morceaux>11)
  22.     {
  23.         return;
  24.     }
  25.    
  26.     for(i=0; i<morceaux; i++)
  27.     {
  28.         printf("%s\n", bonhomme[i]);
  29.     }
  30. }
  31. int main(void)
  32. {
  33.     int a;
  34.    
  35.     printf("nombre? " );
  36.     scanf("%d", &a);
  37.    
  38.     afficher(a);
  39.    
  40.     return 0;
  41. }

n°2272770
thea3492
Posté le 05-01-2016 à 14:02:44  profilanswer
 

Bonjour, j'ai enfin fini mon programme et reussi a comprendre et adapté votre idée merci beaucoup de votre aide !
Il y a encore quelques défauts assez mince que nous allons reprendre mais le principal est fait.
 
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #include <string.h>
  5. #include <time.h>
  6. int gagne(int lettreTrouvee[]);
  7. int rechercheLettre(char lettre, char motSecret[], int lettreTrouvee[]);
  8. char lireCaractere();
  9. int lg;
  10. int pos;
  11. FILE *f;
  12. int i;
  13. int main(int argc, char* argv[])
  14. {
  15.     char lettre = 0;
  16.     char motSecret[80];
  17.     srand (time(NULL));
  18.     f=fopen("mots.txt","r" );
  19.      pos=rand()%66+1;
  20.     for (i=1;i<=pos;i++)
  21.         fgets(motSecret,80,f);
  22.     fclose(f);
  23.     lg=strlen(motSecret);
  24.     int lettreTrouvee[9] = {0};
  25.     int coupsRestants = 10;
  26.     int i = 0;
  27.     printf("     Bienvenue dans le Pendu !     \n" );
  28.     printf("***********************************" );
  29.     while (coupsRestants > 0 && !gagne(lettreTrouvee))
  30.     {
  31.         printf("\n\nIl vous reste %d coups a jouer", coupsRestants);
  32.         printf("\nQuel est le mot secret ? \n\n\t\t" );
  33.         for (i = 0 ; i < lg ; i++)
  34.         {
  35.             if (lettreTrouvee[i])
  36.                 printf("%c", motSecret[i]);
  37.             else
  38.                 printf("*" );
  39.         }
  40.         printf("\n\nProposez une lettre : " );
  41.         lettre = lireCaractere();
  42.         if (!rechercheLettre(lettre, motSecret, lettreTrouvee))
  43.         {
  44.             coupsRestants--;
  45.         }
  46.         afficher(10-coupsRestants);
  47.     }
  48.     if (gagne(lettreTrouvee))
  49.         printf("\n\nBRAVO ! Le mot secret etait bien : %s", motSecret);
  50.     else
  51.         printf("\n\nPerdu ! Le mot secret etait : %s", motSecret);
  52.         return 0;
  53. }
  54. char lireCaractere()
  55. {
  56.     char caractere = 0;
  57.     caractere = getchar();
  58.     caractere = toupper(caractere);
  59.     while (getchar() != '\n') ;
  60.     return caractere;
  61. }
  62. int gagne(int lettreTrouvee[])
  63. {
  64.     int i = 0;
  65.     int joueurGagne = 1;
  66.     for (i = 0 ; i < lg ; i++)
  67.     {
  68.         if (lettreTrouvee[i] == 0)
  69.             joueurGagne = 0;
  70.     }
  71.     return joueurGagne;
  72. }
  73. int rechercheLettre(char lettre, char motSecret[], int lettreTrouvee[])
  74. {
  75.     int i = 0;
  76.     int bonneLettre = 0;
  77.     for (i = 0 ; motSecret[i] != '\0' ; i++)
  78.     {
  79.         if (lettre == motSecret[i])
  80.         {
  81.             bonneLettre = 1;
  82.             lettreTrouvee[i] = 1;
  83.         }
  84.     }
  85.     return bonneLettre;
  86. }
  87. void afficher( int morceaux)
  88. {
  89.     char bonhomme[11][15]=
  90.     {
  91.         "  _______     ",
  92.         " |       |    ",
  93.         " |       _    ",
  94.         " |      / \\  ",
  95.         " |      \\_/  ",
  96.         " |      _|_   ",
  97.         " |     /| |\\ ",
  98.         " |    / |_| \\",
  99.         " |       ^    ",
  100.         " |      / \\  ",
  101.         " |     /   \\ "
  102.     };
  103.     int i;
  104.     if(morceaux>10)
  105.     {
  106.         return;
  107.     }
  108.     for(i=0; i<morceaux; i++)
  109.     {
  110.         printf("%s\n", bonhomme[i]);
  111.     }
  112. }


mood
Publicité
Posté le 05-01-2016 à 14:02:44  profilanswer
 

n°2272776
gilou
Modérateur
Modzilla
Posté le 05-01-2016 à 14:27:51  profilanswer
 

Une autre solution pour dessiner ton pendu: faire un tableau de chaque étape (ici, un exemple ou on dessine 3 étapes)

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. void afficher(int etat);
  5. int main(int argc, char* argv[]) {
  6.     printf(" *** START ***\n" );
  7.     afficher(0);
  8.     printf("\n *** ***** ***\n" );
  9.     afficher(1);
  10.     printf("\n *** ***** ***\n" );
  11.     afficher(2);
  12.     printf("\n ***  END  ***\n" );
  13. }
  14. void afficher(int etat) {
  15.     char bonhomme[3][11][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.     int  i;
  57.     for (i = 0; i < 11; ++i) {
  58.         printf("%s\n", bonhomme[etat][i]);
  59.     }
  60. }

Tu vois l'idée.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2272779
thea3492
Posté le 05-01-2016 à 14:46:50  profilanswer
 

C'est pas mal aussi ! Merci :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  intégrer le bonhomme du pendu au jeu du pendu en C

 

Sujets relatifs
Ecrire totalité des resultats d'un programme dans un fichier en C[C] Problème d'affichage dans le résultat de ma fonction C
[C] parcours en largeur \ profondeurDecryptage C++
[C++11] fonction renvoyant une reference sur un tableau de 10 stringProgrammation C - conditionnelle
C tri par fusion[C#] Découpage de chaine
aligner verticalement colonne en CBesoin d'aide en C
Plus de sujets relatifs à : intégrer le bonhomme du pendu au jeu du pendu en C


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR