[langage C] jeu mastermind

Fragma Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
 hajine -
Salut :)

En fait, je suis débutante en C et on nous a demandé de coder un jeu (mastermind) .. j'avoue que je perds un peu pied :)))

En fait, au début du jeu, il faut choisir le nombre de chiffres de la combinaison à deviner. Ensuite, pour la saisie de la combinaison, j'ai opté pour la chaine de caractère: convertir la combinaison saisie en une chaine de caractère pour la comparer après avec la combinaison générée aléatoirement. En ce qui concerne la chaine de caractères, je voudrai savoir comment faire pour que cette chaine n'accepte que les chiffres (et non les caractères et symboles)



Merci à vous!

3 réponses

emsiste
 
ben voila pr que la chaine n'accepte que des chiffres , voila le traitement
for(i=0;i<n;i++)
{if(isdigit (ch[i])
//traitement
else
//error
}
un ptit exemple qui repd a ta question may be :d
3
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
Tu dois pouvoir comparé chaque caractère avec leur valeur dans la table ASCII pour savoir s'il s'agit effectivement d'un chiffre, ou non.

Pour ce qui est des valeurs a tester regarde ici, ce qui correspond en Hexa aux différents chiffres : http://www.table-ascii.com/

Tu test si ta valeur est comprise entre \30 et \39.
0
Fragma Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Bon, si on prend par exemple une combinaison à 4 chiffres.
Faudrait que je mette chaque chiffre dans une case d'un tableau pour que je puisse les comparer avec le code ASCII ? :s


Ahhh ces boucles!!!
0
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857 > Fragma Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Etant donné que ta chaine de caractère est un tableau, tu n'as pas à mettre ce qui est saisit par ton utilisateur, tu testes directement dessus de la facon suivante :

for (int i = 0; i < 4; i++ ){
  if ( chaine[i] < '\30' && chaine[i] > '\39' ){
        /// --- ERREUR SAISIE
  }
  else {
    /// --- faire traitement
  }
}


Mais je ne suis plus tres sur que ce soit comme ca qu'on teste la valeur ACSII :s, faudrait que quelqun qui passe par là atteste ou non.

0
Fragma Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   > kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention  
 
Humm en fait le problème, c'est que quand on saisit des symboles ou des caractères au lieu des chiffres, y a une boucle infinie qui se crée.. je sais pas vraiment la nature du problème .. la boucle ou le test !?


du coup j'ai envie de mettre tout le code pour qu'on me corrige les fauteuuu :((

je désespère :p
0
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857 > Fragma Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Heu... je peux pas te dire comment.

Met ton code qui est concerné en entier ici et je te dirais.
0
Fragma Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   > kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention  
 
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<string.h>

int main()

{
    int i,j,x,val,resultat,valide,nb_tentatives=0,nb_tentatives_max=4,trouve;
    char combinaison[4],combinaison_gagnante[4];
    
    trouve=0;
    resultat=0;
    
    for (i=0; i<4; i++)
        srand(time(0));
        do { {x=rand()%(10000);
           itoa(x,combinaison_gagnante,10);}
    
           valide=1;
           i=1;
     
           while (i<4 && valide==1)
           {j=0;
           while (j<i && valide==1)
           { if (combinaison_gagnante[i]==combinaison_gagnante[j])
           valide=0;
           else j++;
     }
     
     if (valide==1) i++;
     } } while((valide==0) && (strlen(combinaison_gagnante)!=4));
     
     printf("la combinaison gagnante est: %s",combinaison_gagnante);
    
    
    while ((nb_tentatives<nb_tentatives_max) && (trouve==0))
    { do {printf("\nPour jouer a Mastermind, vous devez choisir 4 chiffres. \nVeuillez donner votre combinaison: ");
    
    scanf("%d",&val);
    itoa(val,combinaison,10);
    
    } while ((strlen(combinaison)!=4));
    
    if (strcmp(combinaison,combinaison_gagnante)==0)
    
    {printf(" TROUVE!");
    trouve=1;}
    
    else 
    {j=0;
    for (i=0; i<=4; i++)
    {if (combinaison[i]==combinaison_gagnante[j])
        
        {resultat++;
        nb_tentatives++;
        j++;}
    
    }
    
    printf("\nresultat: %d X",resultat);}}
    
    
    
    system("pause");
    return 0;
}


ça c'est pour une combinaison à 4 chiffres ..

(y a plein de fautes :p et il manque le chrono (paske le temps de saisie est limité) et le score .. )

et l'affichage de la combinaison gagnante c'est euh juste pour tester hein!


Hummmm ...
0
hajine
 
svp vous pouvez m'aider à écrire le programme en langage c du jeu mastermind
0