[langage C] jeu mastermind

Fermé
Fragma Messages postés 8 Date d'inscription mercredi 22 novembre 2006 Statut Membre Dernière intervention 29 mars 2007 - 22 nov. 2006 à 15:11
 hajine - 3 avril 2008 à 19:19
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

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 jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
22 nov. 2006 à 15:22
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 mercredi 22 novembre 2006 Statut Membre Dernière intervention 29 mars 2007
22 nov. 2006 à 16:04
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 jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857 > Fragma Messages postés 8 Date d'inscription mercredi 22 novembre 2006 Statut Membre Dernière intervention 29 mars 2007
22 nov. 2006 à 16:16
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 mercredi 22 novembre 2006 Statut Membre Dernière intervention 29 mars 2007 > kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013
22 nov. 2006 à 16:31
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 jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857 > Fragma Messages postés 8 Date d'inscription mercredi 22 novembre 2006 Statut Membre Dernière intervention 29 mars 2007
22 nov. 2006 à 16:48
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 mercredi 22 novembre 2006 Statut Membre Dernière intervention 29 mars 2007 > kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013
22 nov. 2006 à 17:03
#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
svp vous pouvez m'aider à écrire le programme en langage c du jeu mastermind
0