Motus en C

cs_amine124 Messages postés 48 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 5 août 2016 - 19 nov. 2011 à 14:15
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 - 21 nov. 2011 à 11:00
Bonjour,

Je veux créer un petit jeu "motus" qui lit un mot et la comparer par le mot d'or (à trouver); si le joueur trouve qqes lettres, on les affiche dans leurs indices et les restes seront des " -" (tirets); on lui donne que 10 essaies....
Mon pb est lorsque le joueur tape un/des caractère corrects, le programme réserve ces caractères au prochain essai; d'une autre part, à chaque affichage, le mot affiché est tjrs suivi par une petite émoticône que je sais pas son source.
Voilà mon code, veuillez me dire où est le pb, et merci d'avance:

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#define Max 10

int main()
{
char mot[Max]; // mot saisie par l'utilisateur
char texte[Max]; // mot d'or (à trouver)
int taille_mot; // la taille du mot d'or
int compt=0; // compteur des essaies
int compt2; // variable pour decider si le joueur a trouvé le mot d'or ou non
char ch[Max]; // la chaine à afficher
int ii=0; // compteur de la boucle for pour compter les nombres

strcpy(texte,"facteur"); // "facteur" est le mot à trouver

taille_mot=strlen(texte); // calculer la taille du mot d'or

printf("Attention! Vous chercher un mot de %d caractere.\n",taille_mot);

while(compt<10)
{
compt2=0;
strcpy(ch,""); // initialisation de la chaine à afficher

printf("\n\n Essaie Num %d: Donner le mot d'Or: ",(compt+1));
scanf("%s",&mot);
printf("\n");

for(ii=0;ii<taille_mot;ii++)
{
if(mot[ii]!="\0" || mot[ii]!="")
{
if(mot[ii]==texte[ii])
{
ch[ii]=mot[ii];
compt2++;
}
else
ch[ii]='-';
}
else
{ ch[ii]=""; }
}

printf(" ++++++ %s ++++++ /// %d caractere justes",ch,compt2);

if(compt2==taille_mot)
{
printf("\n\n***** Felicitation! Vous avez trouve le mot d'Or avec succes. " %s " ***** \n\n",texte);
break;
}
else
{
strcpy(ch,"");
}

compt++;
}

if(compt==10)
{ printf("\n\n ******** Gameover! Vous avez termine le nombre d'essaies possible. ******** \n\n"); }

system("pause");
return EXIT_SUCCESS;
}

2 réponses

BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
21 nov. 2011 à 10:31
Hello,
ça compile ton truc?
mot[ii]!="\0"

-> tu compare un caractère avec une chaine...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
21 nov. 2011 à 11:00
De plus, je pense que tu as une confusion entre le nombre d'essai et la longueur du mot à trouver: ce sont 2 variables différentes...
Voici un code corrigé, avec des commentaires explicatifs. N'hésites pas à me demander ce que tu ne comprends pas.

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

#define ESSAI_MAX 3 

int main() 
{ 
  char* mot; // mot saisie par l'utilisateur 
  char* texte = "facteur"; // mot d'or (à trouver) 
  int taille_mot; // la taille du mot d'or 
  int compt=0; // compteur des essaies 
  int compt2; // variable pour decider si le joueur a trouvé le mot d'or ou non 
  char* ch; // la chaine à afficher 
  int i=0; // compteur de la boucle for pour compter les nombres 

  taille_mot=strlen(texte); // calculer la taille du mot d'or 
  mot = (char*)malloc(taille_mot*sizeof(char)+1); // allocation de la chaine contenant le mot saisi (+1 pour le caractère de fin de chaine)

  printf("Attention! Vous chercher un mot de %d caracteres.\n",taille_mot); 

  while(compt<ESSAI_MAX) 
  { 
    compt2=0;
    ch = (char*)malloc(taille_mot*sizeof(char)+1); //init de la chaine à afficher (+1 pour le caractère de fin de chaine)

    printf("\n\n Essaie Num %d: Donner le mot d'Or: ",(compt+1)); 
    scanf("%s",mot); 
    printf("\n"); 

    for(i=0;i<taille_mot;i++) 
    { 
      if(mot[i]==texte[i]) 
      { 
        ch[i]=mot[i]; 
        compt2++; 
      } 
      else 
        ch[i]='-'; 
    }
    ch[taille_mot]='\0';	// attention à bien terminer la chaine!

    printf("++++ %s ++++ /// %d caracteres justes",ch,compt2); 

    if(compt2==taille_mot) 
    { 
      printf("\n\n*** Felicitations! Vous avez trouve le mot d'Or avec succes. " %s " ***",texte); 
      break; 
    } 

    compt++; 
    free(ch);
  } 

  if(compt==ESSAI_MAX) 
  {
    printf("\n\n*** Gameover! Vous avez termine le nombre d'essais possibles. ***");
  } 

  // désallocation des chaines
  free(mot);

  system("pause"); 
  return 0; 
}


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Rejoignez-nous