Re !
Je comprend rien du tout au pointeur ou quoi???
jvous explique, je dois programmer un jeu d’allumette (21 allumettes, on en prend 1,2, ou 3 et celui qui tire la derniere a perdu, mais si c’est le jeu de forboyard :ane:)
“intelligent”, c’est a dire avec une IA, pour joueur contre le PayCay !!
C’est un tp de la fac. on a fait un premier programme, et ils donnent des instructions pour creer d autres versions “ameliorées”.
Alors la j’en suis à:
“Créer une structure Joueur contenant comme champs nom et nbPrises et creer 2 variables, une pour le joueur et l autre pour l’ia”
(nbPrises sera affichier a la fin pour l’humain et l’ia)
donc je l’ai fait et ca marche !
Alors pourquoi je poste? et bien dans le code joint ci desous, j’ai creer les variables joueur_humain et joueur_ia de 2 facons differentes, et je les affiches de 2 facons differentes, a savoir un coup je met * devant et d’un autr je le met pas… (et si j’interverti les * entre joueur_humain et joueur_ia ca bug !)
ALors c’est une histoire de pointeur, j’ai quelques lacunes du premier semestre apparament [:matleflou] (j’utilise les pointeurs depuis 2 mois, meaculpa :jap:)
Si quelqu un peut m’expliquer le pourquoi du comment ?
Cordialement
Edit: pour vous y retrouver,
- ligne 5 je declare la structure,
- ligne 370 (Dans le main()) je creer les variables + initialise
- ligne 306 et 314, affichage de 2 manieres différentes !
[cpp]
#include <stdio.h>
struct Joueur {
char *nom[50];
int nbPrises;
};
char *nom1[50];
char *nom2[50];
int firstPlayer;
struct Joueur joueur_humain;
struct Joueur joueur_ia;
/**********************************************************
*
- retourne le minimum des 2 nombres
-
**********************************************************/
int min(int a, int b)
{
if(a>b)
{
return b;
} else {
return a;
}
}
/******************************************************
*
- demanderPredicat(char[] question)
-
******************************************************/
int demanderPredicat(char* question) {
printf("%s (oui/non)\n",question);
char tmp_rep[50];
scanf("%s",tmp_rep);
if( tmp_rep[0]==‘y’
|| tmp_rep[0]==‘o’ ) {
return 1;
} else {
return 0;
}
}
/**********************************************************
*
**********************************************************/
void affichePosition(int Pos)
{
printf("\n");
int i;
for(i=0;i<Pos;i++)
{
printf(" 0 ");
}
printf("\n");
for(i=0;i<Pos;i++)
{
printf(" | ");
}
printf("\n");
for(i=0;i<Pos;i++)
{
printf(" | ");
}
printf("\n\n\n");
}
/*****************************************************
*
*****************************************************/
void afficheCoup(int Coup)
{
printf(“Le coup est %i\n”,Coup);
}
/*************************************************************
*
- Verifie que le coup est jouable dans la position Pos
- La fonction renverra 1 s’il le coup est jouable, 0 sinon
-
*************************************************************/
int estCoupValide(int Pos, int Coup)
{
return (Coup>0 && Coup<4 && Pos>Coup);
}
/************************************************************
*
- joue le coup dans PosDepart et rend la position obtenue
-
************************************************************/
int joueLeCoup(int PosDepart,int Coup)
{
return (PosDepart-Coup);
}
/************************************************************
*
- saisi un coup valide et le rend en retour
-
************************************************************/
int coupSaisi(int Pos)
{
int tmp_coup;
int cpt_tentative=1;
printf(“Entrez un coup entre 1 et %i:\n”,min(Pos-1,3));
while(!estCoupValide(Pos,tmp_coup)) {
if(cpt_tentative>1)
{
printf("Veuillez entrez un coup entre 1 et %i:\n", min(Pos+1,3));
}
scanf("%i",&tmp_coup);
cpt_tentative++;
}
return tmp_coup;
}
/*********************************************************
*
- rend 1 si la position Pos est finale, 0 sinon
-
*********************************************************/
int positionTerminale(int Pos)
{
return (Pos==1);
}
/*********************************************************
*
- rend 1 si la position Pos est Gagnante, 0 sinon
-
*********************************************************/
int evalue(int Pos)
{
return (Pos%4!=1);
}
/*********************************************************
*
- rend 1 si la position Pos est Gagnante, 0 sinon
-
*********************************************************/
int positionGagnante(int Pos)
{
return evalue(Pos);
}
/**********************************************************
*
- rend 1 si la postion Pos est Perdante, 0 sinon
-
**********************************************************/
int positionPerdante(int Pos)
{
return !evalue(Pos);
}
/***********************************************************
*
- Donne le meilleur coup à jouer dans Pos
-
***********************************************************/
int trouveCoupIA(int Pos)
{
if(positionGagnante(Pos))
{
int cpt_all=1;
int coup_definitif;
while(cpt_all<4 || estCoupValide(Pos,cpt_all))
{
if(positionPerdante(Pos-cpt_all))
{
coup_definitif=cpt_all;
}
cpt_all++;
}
return coup_definitif;
} else
{
return 1;
}
}
/***************************************************************
*
- Moteur du jeu contre l’ IA
-
***************************************************************/
void moteurIA(int Pos)
{
int tmp_coup;
int cpt_coup=0;
int tmp_player=firstPlayer;
while ( !positionTerminale(Pos))
{
affichePosition( Pos);
if(tmp_player%2 != 0)
{
printf("\nC'est à %s de jouer\n",joueur_humain.nom);
tmp_coup=coupSaisi(Pos);
Pos=joueLeCoup(Pos,tmp_coup);
} else
{
printf("\nC'est à %s de jouer\n",*joueur_ia.nom);
tmp_coup=trouveCoupIA(Pos);
Pos=joueLeCoup(Pos,tmp_coup);
}
cpt_coup++;
tmp_player++;
}
/**************************************************************
*
**************************************************************/
if(tmp_player % 2 != 0)
{
printf("\n\n\n L’IA a gagner ! (en %i coups)\n\n",cpt_coup–);
} else
{
printf("\n\n\n %s a gagner ! (en %i coups)\n\n",nom1,cpt_coup–);
}
}
/***************************************************************
*
***************************************************************/
main() {
int position=11;
printf("\033[2J");
printf(" *********************************************\n");
printf(" * *\n");
printf(" * Bienvenu sur le jeu de Nim v1.0 *\n");
printf(" * *\n");
printf(" *********************************************\n\n");
*joueur_ia.nom=“l’IA”;
joueur_ia.nbPrises=0;
//printf("---->%s<----",*joueur_ia.nom);
printf("\nVeuillez entrer votre nom (joueur 1):\n");
scanf("%s",joueur_humain.nom);
//printf("---->%s<----",joueur_humain.nom);
printf("\n");
firstPlayer = demanderPredicat(“Voulez-vous commencer la partie ?”);
moteurIA(position);
}
[/cpp]
En tout cas merci d’avoir tout lu [:matleflou]