Le Pendu / Jeu console / Programmation / Langage C 


FORUM

forum / C et C++ / Le Pendu / Jeu console / Programmation / Langage C

Vous n êtes pas connecté

Page :

Le Pendu / Jeu console / Programmation / Langage C

Auteurs Messages
Anonyme Posté à 16h59 le 28 Jul 16

Membre inscrit le 09/06/2013
Messages : 0
Localisation :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>

#define SOLO 1
#define MULTI 2



typedef enum Bool Bool;
enum Bool
{
    TRUE, FALSE
};

typedef struct NiveauJeu NiveauJeu;
struct NiveauJeu
{
    char nomNiveau[100];
    int min;
    int nombreMot;
    int coupMax;
};

NiveauJeu niveaux[] =           
{                            
    {"Facile", 0, 20, 15},
    {"Moyen", 0, 20, 10},
    {"Difficile", 0, 20, 7}
};

int demanderModeJeu()
{
    int modeJeu;
    printf("
");
    printf("MODE DE JEU
");
    printf("Bien vouloir choisir un mode de jeu !
");
    printf("1. Mode Solo
2. Mode Multi
");
    do
    {
        printf("Votre choix ? ");
        scanf("%d", &modeJeu);
    }while(modeJeu < 1 || modeJeu > 2);
   
    return modeJeu;
}


NiveauJeu demanderNiveauJeu()
{
    int choixNiveau;
    printf("
");
    printf("NIVEAU DE JEU
");
    printf("Bien vouloir choisir un niveau de jeu !
");
    printf("1. Facile
2. Moyen
3. Difficile
");
    do
    {
      printf("Votre choix ? ");
      scanf("%d", &choixNiveau);
    }while(choixNiveau < 1 || choixNiveau > 3);
   
    return niveaux[choixNiveau - 1];
  
}

int demanderNombre(int nbCoupsRestants)
{
  int nombreSaisi;
  printf("
");
  printf("Attention, il vous reste seuleument %d coups
", nbCoupsRestants);
  printf("Quel est le nombre ? ");
  scanf("%d",&nombreSaisi);
 
  return nombreSaisi;
}


int demanderMotSecret()
{
  int tailleMot = 0, i = 0;
  char *motSecret = NULL;
 
  printf("Nombre de termes ? ");
  scanf("%d", &tailleMot);
 
 motSecret = malloc(tailleMot * sizeof(char));
 if(motSecret == NULL)
 {
     exit(0);
 }
 
     printf("mot secret ? ");
     for(i = 0; i < tailleMot; i++)
     {
        scanf("%s", &motSecret[i]);
     }
 
    return *motSecret;
 }


int nombreAleatoire(int nombreMot)
{
   
    srand(time(NULL));
    return (rand() % nombreMot); //le nombre de mot contenu dans le dictionnaire.
}

void debutPartie()
{
   printf("
");
   printf("**************************************
");
   printf("************LE JEU DU PENDU***********
");
   printf("********Code par Jean Dechanel********
");
   printf("**************************************

");
}

void viderBuffer()
{
    int c = 0;
    while(c != '
' && c != EOF)
    {
        c = getchar();
    }
}

int lire(char* chaine, int longueurChaine)
{
     char* positionEntree = NULL;
   
    if(fgets(chaine, longueurChaine, stdin) != NULL)
    {
        positionEntree = strchr(chaine, '
');
       
        if(positionEntree != NULL)
        {
           *positionEntree = '';
        }return 1;
    }else
    {
       viderBuffer();
       return 0;
    }
   
}

long lireLong()
{
    char nombreTexte[100] = {0};
    if(lire(nombreTexte, 100))
    {
        return strtol(nombreTexte, NULL, 10);
    }else
    {
        viderBuffer();
        return 0;
    }
}


int tireMotAleatoire(char motSecret[])
{
     int caractereLu = 0, nombreMot = 0, numMotSecret = 0;
    
     FILE* dico = NULL;
    int caracterelu = 0;
    dico = fopen("/home/ubuntu/workspace/dico.txt", "r");
   
    if(dico == NULL)
    exit(0);
   
    else
    {
      do
      {
        caracterelu = fgetc(dico);
        if(caracterelu == '
')
        nombreMot++;
       
      }while(caracterelu != EOF);
    
      numMotSecret = nombreAleatoire(nombreMot);
     
      rewind(dico);
     
      while(numMotSecret > 0)
      {
          caractereLu = fgetc(dico);
          if(caractereLu == '
')
          numMotSecret--;
      }
     
      fgets(motSecret, 100, dico);
      motSecret[strlen(motSecret) - 1] = '';
  
       fclose(dico);
    }
  
    return EXIT_FAILURE;
}


int afficherMotMasque(char motSecret[], int lettresTrouvees[], int taille)
{
  int i;
  for (i = 0 ; i < taille ; i++)
  {
    if (lettresTrouvees[i])
    printf("%c", motSecret[i]);
    else
    printf("*");
  }
 
  return motSecret[i];
 
}



int compterMot(int nombreMot)
{
    FILE* dico = NULL;
    int caracterelu = 0;
    dico = fopen("/home/ubuntu/workspace/dico.txt", "r");
   
    if(dico == NULL)
    exit(0);
   
    else
    {
      do
      {
        caracterelu = fgetc(dico);
        if(caracterelu == '
')
        nombreMot++;
       
      }while(caracterelu != EOF);
     
    }
   
    return nombreMot;
}


Bool rejouerPartie(long choice)
{
    printf("Voulez-vous rejouer une autre Partie ?
");
    printf("1. Oui
2. Non
");
    do
    {
        printf("Votre choix ? ");
        choice = lireLong();
    }while(choice < 1 || choice > 2);
   
    return choice == 1;
}

int gagnerJeu(int lettresTrouvees[], int tailleMot)
{
  int remplir = 1;
  int i = 0;
  for(i = 0; i < tailleMot; i++)
  {
    if(lettresTrouvees[i] == 0)
    remplir = 0;
   
  }
   
 
  return remplir == 1;
}


int lireCaractere()
{
  char caractere = 0;
  caractere = getchar();
  caractere = toupper(caractere);
  while(getchar() != '
');
 
  return caractere;
}


int rechercherLettre(char lettreSaisie, char motSecret[], int lettresTrouvees[])
{
    int i = 0;
    int bonneLettre = 0;
   for(i = 0; motSecret[i] != ''; i++)
   {
       if(lettreSaisie == motSecret[i])
       {
           bonneLettre = 1;
           lettresTrouvees[i] = 1;
       }
   }
  
   return bonneLettre == 1;
}


void afficherLettre(int lettresTrouvees[], char motSecret[], int tailleMot)
{
    int i = 0;
    for(i = 0; i < tailleMot; i++)
    {
      if(lettresTrouvees[i])
      printf("%c", motSecret[i]);
      else
      printf("*");
    }
   
   
}




int main(int argc, char* argv[])
{
    char motSecret[100] = "";
    int i = 0, choice = 0, caractereLu = 0, numMotSecret = 0, tailleMot = 0, modeJeu = 0;
    int nbCoupsRestants = 0;
    char lettreSaisie = 0;
    int* lettresTrouvees = NULL;
  
    printf("
"); 
    debutPartie();
   
 do
 {
   
    modeJeu = demanderModeJeu();
    printf("Bienvenu au mode %s !
", modeJeu == SOLO   ? "Solo" : "Multi");
  
    NiveauJeu niveauJeu = demanderNiveauJeu();
    printf("Bienvenu au niveau %s !
", niveauJeu.nomNiveau);
   
    nbCoupsRestants = niveauJeu.coupMax;
   
    *motSecret = modeJeu == SOLO ? tireMotAleatoire(motSecret) : demanderMotSecret();
  
    if(! tireMotAleatoire(motSecret))
    exit(0);
  
    tailleMot = strlen(motSecret);
    lettresTrouvees = malloc(tailleMot * sizeof(int));
  
 if(lettresTrouvees == NULL)
 {
    printf("Impossibe d'ouvrir le fichier dico.txt !
");
    exit(0);
 }
 
    for(i = 0; i < tailleMot; i++)
    lettresTrouvees[i] = 0;
 
  do
  {
    printf("

Il vous reste %d coups a jouer ! ", nbCoupsRestants);
 
    printf("
Quel est le mot secret ? ");
   
    afficherLettre(lettresTrouvees, motSecret, tailleMot);
   
    printf("
Proposez une lettre ");
    lettreSaisie = lireCaractere();
   
    if(!rechercherLettre(lettreSaisie, motSecret, lettresTrouvees))
    {
      nbCoupsRestants--;
      printf("Cette lettre ne figure pas dans le mot secret
");
    }
   
  }while(nbCoupsRestants > 0 && !gagnerJeu(lettresTrouvees, tailleMot));
 
  if(gagnerJeu(lettresTrouvees, tailleMot))
    {
       printf("

");
       printf("GAGNE, le mot secret etait bien %s !!!

", motSecret);
       printf("Partie terminee !

");
    }else
    {
       printf("

");
       printf("PERDU, le mot secret etait %s !!!

", motSecret);
       printf("Partie terminee !

");
    }
   
 }while(rejouerPartie(choice));
    printf("


");
    printf("Partie terminee !!!
");
 
       return 0;
   
}

Samomoi

Page :