Jeu de carte BATAILLE problème d'affectation de valeur

Résolu/Fermé
samux22 Messages postés 8 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 30 avril 2014 - 15 déc. 2012 à 15:25
samux22 Messages postés 8 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 30 avril 2014 - 16 déc. 2012 à 21:26
Bonjour tout le monde !


J'ai commencé à apprendre le C il y a environs 6 mois, et j'en suis rendu à l'envie de recréer ce jeu.

Voici donc l'intérieur du problème: ceci est un aperçu de mon tableau qui contient 32 cartes au total:

tableau[1]="As de coeur",14;
tableau[2]="Roi de coeur",13;
tableau[3]="Dame de coeur",12;
tableau[4]="Valet de coeur",11;
tableau[5]="10 de coeur",10;
tableau[6]="9 de coeur",9;
tableau[7]="8 de coeur",8;
tableau[8]="7 de coeur",7;


Je n'arrive pas à faire accéder mon programme à la valeur numérique qui correspond à chaque carte. Par exemple, si je tire l'As de Coeur, j'aimerais que mon programme stocke dans une variable la valeur 14, pour pouvoir la comparée ensuite avec la carte ennemis ensuite tirée, et me renvoyer la carte gagnante.

Je ne suis pas certain que la structure de mon tableau soit la bonne, toutefois. Si vous avez des idées sur la manière dont je devrais m'y prendre, elle serait les bienvenus !


Merci beaucoup à ceux qui se plancheront sur mon problème !

Samux22
A voir également:

1 réponse

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
15 déc. 2012 à 16:34
Après 6 mois d'apprentissage du C tu n'es pas capable de faire autre chose que des tableaux de chaînes de caractères !?

Il faudrait regarder les struct et les enum, c'est un minimum pour ce que tu veux faire...

enum Couleur {PIQUE, COEUR, CARREAU, TREFLE};
enum Valeur {DEUX=2, TROIS=3, QUATRE=4, CINQ=5, SIX=6, SEPT=7, HUIT=8, NEUF=9, DIX=10, VALET=11, DAME=12, ROI=13, AS=14};

typedef struct struct_carte
{
	Valeur valeur;
	Couleur couleur;
}
Carte;

// Renvoie une valeur négative, nulle, ou positive si la valeur de carte1 est inférieure, égale ou supérieure à la valeur de carte2.
int comparer(Carte carte1, Carte carte2)
{
	return carte1.valeur-carte2.valeur;
}

int main()
{
	Carte c1 = {AS,COEUR};
	Carte c2 = {CINQ,PIQUE};

	printf("%d",comparer(c1,c2));
}
0
samux22 Messages postés 8 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 30 avril 2014
15 déc. 2012 à 17:25
Merci beaucoup de me répondre, KX.

J'ai écrit 6 mois mais je suis en term S, je n'est pas vraiment le temps, à part le week-end, ou pendant les vacances, de me pencher sur le C.

Pourriez-vous m'expliquer rapidement à quoi correspondent les lignes suivantes ? (quels sont les formats des variable Valeur valeur et couleur Couleur ? et à quoi sert le " Carte; " seul, au milieu du code ? )


typedef struct struct_carte
{
Valeur valeur;
Couleur couleur;
}
Carte;



Merci à vous !
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
15 déc. 2012 à 17:36
"quels sont les formats des variable Valeur valeur et couleur Couleur ?"
ce sont des types enum déclarés dans les lignes juste au-dessus.

"à quoi sert le " Carte; " seul, au milieu du code ?"
Il n'est pas "seul", c'est la suite du typedef. On doit avoir : typedef untype nomdutype
Le paramètre "untype" c'est la structure : struct struct_carte { ... }
Le paramètre "nomdutype" c'est le "Carte" à la fin.
0
samux22 Messages postés 8 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 30 avril 2014
15 déc. 2012 à 18:51
Merci KX, je vais m'y mettre alors :-)
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
15 déc. 2012 à 19:07
Remarque : tout à l'heure j'ai compilé en C++ mais pour compiler en C il faut changer un peu les types :

enum enum_couleur {PIQUE, COEUR, CARREAU, TREFLE};
typedef enum enum_couleur Couleur;

enum enum_valeur {DEUX=2, TROIS=3, QUATRE=4, CINQ=5, SIX=6, SEPT=7, HUIT=8, NEUF=9, DIX=10, VALET=11, DAME=12, ROI=13, AS=14};
typedef enum enum_valeur Valeur;

struct struct_carte
{
    Valeur valeur;
    Couleur couleur;
};
typedef struct struct_carte Carte;
0
samux22 Messages postés 8 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 30 avril 2014
15 déc. 2012 à 20:37
Merci pour toutes ces infos KX !

Il ne me reste plus qu'à réécrire mon programme dans le bon format :-) Comment ferai-je pour que l'ordinateur ne choisisse pas deux fois la même carte ?

(Pourriez-vous, si vous avez le temps, m'expliquer comment créer un programme qui affiche toutes les cartes dans un ordre au hasard, dans le système de structure ?)

Voici mon programme actuel; il mélange les cartes en simulant un mélange humain (c'est à dire que le paquet en séparé en trois, puis l'ordre des trois tas est inversé), puis il distribue en deux tas (en simulant une distribution humaine: une carte sur deux) :



int main()
{
printf("\n\n ---------------JEU DE LA BATAILLE---------------\n\n\n\n");

srand(time(NULL));

int tableau[100];
int l;
double k;
int carte2[100];
int player1[100];
int player2[100];
int i=0;
int j=0;
int n=200;
int K=0;
int p=0;
double m=0;
int compteur;

tableau[0]=0;

tableau[1]="As de coeur",14;
tableau[2]="Roi de coeur",13;
tableau[3]="Dame de coeur",12;
tableau[4]="Valet de coeur",11;
tableau[5]="10 de coeur",10;
tableau[6]="9 de coeur",9;
tableau[7]="8 de coeur",8;
tableau[8]="7 de coeur",7;

tableau[9]="As de carreau",14;
tableau[10]="Roi de carreau",13;
tableau[11]="Dame de carreau",12;
tableau[12]="Valet carreau",11;
tableau[13]="10 de carreau",10;
tableau[14]="9 de carreau",9;
tableau[15]="8 de carreau",8;
tableau[16]="7 de carreau",7;

tableau[17]="As de pique",14;
tableau[18]="Roi de pique",13;
tableau[19]="Dame de pique",12;
tableau[20]="Valet de pique",11;
tableau[21]="10 de pique",10;
tableau[22]="9 de pique",9;
tableau[23]="8 de pique",8;
tableau[24]="7 de pique",7;

tableau[25]="As de trefle",14;
tableau[26]="Roi de trefle",13;
tableau[27]="Dame de trefle",12;
tableau[28]="Valet de trefle",11;
tableau[29]="10 de trefle",10;
tableau[30]="9 de trefle",9;
tableau[31]="8 de trefle",8;
tableau[32]="7 de trefle",7;


for (p=1 ; p<=n ; p++) //melange des cartes
{
i=(rand()%(32-2+1))+2; //premier partage
j=(rand()%(i-1+1))+1; //deuxieme partage

for ( K=1 ; K<=i ; K++ )
{
carte2[K] = tableau[K]; //affiche les i premiere cartes dans tab2
}

for ( K=i+1 ; K<=32 ; K++ )
{
tableau[K-i] = tableau[K]; //affiche les derniere cartes de tab1 au debut
}

for ( K=1 ; K<=j ; K++ )
{
tableau[K+32-j] = carte2[K]; //affiche les premiere carte de tab2 a la fin de tab1
}

for ( K=j+1 ; K<=i ; K++ )
{
tableau[(K-j)+(32-i)] = carte2[K]; //range les carte du milieu
}

printf("\tMelange %d, i=%d, j=%d\n", p, i,j);
}


i=0;
l=0;
m=0;
K=0;

for (m=1;m<=32;m++) //distribue en deux tas (joueur1 et joueur2)
{
K++;
if (floor(m/2)==(m/2))
{i++;
player1[i]=tableau[K];
}
else
{l++;
player2[l]=tableau[K];
}
}

printf("\n -- Voici le tas 1 --\n\n"); //afficher tas du joueur 1
for (i=1;i<=16;i++)
{
printf("\t");printf(player1[i]);printf("\n");
}

printf("\n -- Voici le tas 2 --\n\n"); //afficher tas du joueur 2
for (i=1;i<=16;i++)
{
printf("\t");printf(player2[i]);printf("\n");
}


// tirage de carte

printf("\nJoueur 1 tire une carte : "); printf(player1[1]);
printf("\nJoueur 2 tire une carte : "); printf(player2[1]);



printf("\n\n\n");

return 0;
}
0