Probleme Mastermind en C

Fermé
Yohan - 24 déc. 2009 à 15:30
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 24 déc. 2009 à 17:59
Bonjour à tous et à toutes,

Je dois réaliser un Mastermind en C dans le cadre du cours de programmation cependant j'ai un souci :

J'ai deja réaliser la fonction qui permet a l'ordinateur de choisir 4 couleur aléatoire et une autre qui permet à l'utilisateur de rentrer ses 4 couleurs voici ce que ca donne :

char GenererCombiAleatoire()
{
char tab_ordi[4],combinaison;
char couleur[10][10] = {"r","v","b","m","o","j"};

int i;
srand(time(NULL));
for (i=1;i<5;i++)

{
tab_ordi[i] = rand()%6; //%6 car il prend une couleur comprise entre 1 et 6
printf("%s",&couleur[tab_ordi[i]]);
}

return combinaison;

}

char ProposerCombinaison()

{
char tab_proposition[4];
int i;
int true =1;
int false = 0;
int continuer = false ;
do
{
printf("Entrez 4 couleurs de votre choix");
scanf("%s",&tab_proposition[4]);
for(i=0;i<4;i++){
if(tab_proposition[i]!="R" & tab_proposition[i]!="r" &
tab_proposition[i]!="V" & tab_proposition[i]!="v" &
tab_proposition[i]!="B" & tab_proposition[i]!="b" &
tab_proposition[i]!="M" & tab_proposition[i]!="m" &
tab_proposition[i]!="O" & tab_proposition[i]!="o" &
tab_proposition[i]!="J" & tab_proposition[i]!="j"){
continuer = true;
}
}
if(continuer = false){ printf("Choix incorrect recommencez!"); }
}
while(continuer = true);


return tab_proposition;
}

Maintenant j'aimerais faire une fonction qui permettrait la vérification. Premièrement j'aimerais vérifier que si la combinaison du joueur est la même que celle de l'ordinateur alors la partie est gagnée. le problème est que dans ma nouvelle fonction, elle ne reconnait pas tab_proposition et tab_ordi vu qu'elles se trouvent dans les autres fonctions.

Comment pourais je faire? d'avance merci
Yohan

5 réponses

up merci
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 147
24 déc. 2009 à 16:50
D'abord, corrigeons quelques erreurs:
- scanf("%s",&tab_proposition[4]) n'est pas correct, l'adresse du tableau est simplement: 'tab_proposition'.
- le tableau contiendra un caractère de fin ('\0') donc il aura une taille de 5.
- en outre, utiliser 'scanf' pour une chaîne de caractères est très dangereux, car il n'y a aucun contrôle de la longueur saisie.

Je ne vais pas répondre à ta question mais simplement faire quelques remarques pour simplifier ton programme:
- on ne fait pas de test du type: tab_proposition[i]!="V" & tab_proposition[i]!="v", on utilise la fonction 'toupper' (Ah en plus je m'aperçois que ta déclaration est fausse car tab_proposition[i] est un caractère que tu compares à une chaîne, il faut écrire 'V' et non "V"), le test devient: toupper(tab_proposition) != 'V'.
- personnellement, je ferais une déclaration du style:
#define NB_COULEUR 6
char couleur[NB_COULEUR][] = { "Rouge", "Vert", "Bleu", "Marron", "Orange", "Jaune" };
Ceci permet: de présenter à l'utilisateur des textes compréhensibles.
Pour l'utilisation, il y a deux solutions:
- Soit tu convertis les caractères saisis en chiffres, (0=R, 1=V, ...)
- Soit tu convertis les valeurs aléatoires en lettres (R=0, V=1, ...)
Ceci facilite les comparaisons.
Bonne réflexion.
0
Ok merci beaucoup pour tes nombreux conseils et ta correction.
Mais cela ne m'aide pas pour mon principal problème :(
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 147
24 déc. 2009 à 17:30
le problème est que dans ma nouvelle fonction, elle ne reconnait pas tab_proposition et tab_ordi vu qu'elles se trouvent dans les autres fonctions
Tu as un problème de gestion de tes variables, il y a deux solutions... une bonne et une mauvaise; commençons par la mauvaise:
- déclarer les variables globales en dehors de toutes les fonctions; tout le monde (je parle des fonctions évidemment) a accès à toutes les variables,
et continuuons par la bonne:
- déclarer les variables locales dans le 'main' et utiliser le passage de paramètres vers les fonctions.
NB:une déclaration du type: char couleur[NB_COULEUR][] = { "Rouge", "Vert", ... }; doit rester globale.
Bonne continuation.
0
contrainte du professeur : Interdiction d'utiliser les variables globales...

J'ai lu qu'il était possible de passer la fonction en paramètre afin de l'utiliser dans d'autres fonctions.
Comment cela fonctionne t-il?

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 147
24 déc. 2009 à 17:59
Quand j'ai dit 'doit rester globale', j'aurais dû mettre 'préférable à rester globale'; ce n'est pas une obligation mais comme il s'agit en fait d'un tableau dont le contenu est constant, c'est mieux de le mettre en global mais tu peux le mettre dans le 'main'.
Passer les fonctions en paramètres ? Oui c'est possible mais ici je n'en vois pas la nécessité (il faut se méfier de l'usine à gaz !).
Dans le 'main':
- Déclaration des variables,
- Appel à une fonction de fabrication d'une combinaison que la fonction placera dans tab_combinaison qu'on lui aura donc passé,
- Appel 4 fois à une fonction de saisie qui contrôle un caractère saisi (donc passer le tableau des couleurs), la fonction retourne un caractère que l'on met dans un tableau tab_saisie.
- Appel à une fonction de comparaison qui devra connaître tab_combinaison et tab_saisie et qui retourne vrai ou faux,
- Si la réponse est 'faux', on redemande une saisie.
Tout est donc réalisé par des fonctions mais tout reste géré par le 'main'.
Bonne réflexion.
0