Vi posto quello che sono riuscito a scrivere finora, premetto che il programma dà per scontato che gli siano passate due scale, fatto questo tramite due cicli for controlla quale carta sia maggiore delle due mani, senza tenere conto però del seme. Come posso fare? Avevo pensato di scrivere un altro ciclo for per vedere se le due scale erano uguali, ma sono sicuro che l'ho scritto male...
codice:
#include <stdio.h>
typedef enum Seme
{
Cuori = 4,
Quadri = 3,
Fiori = 2,
Picche = 1
}Seme;
typedef struct Carta
{
unsigned int NumeroCarta; /* 1-13 */
Seme SemeCarta;
}Carta;
int Vincitore(Carta G1[], Carta G2[]);
int main()
{
Carta G1[5], G2[5];
// mano giocatore 1
G1[0].NumeroCarta = 1;
G1[0].SemeCarta = Quadri;
G1[1].NumeroCarta = 2;
G1[1].SemeCarta = Quadri;
G1[2].NumeroCarta = 3;
G1[2].SemeCarta = Quadri;
G1[3].NumeroCarta = 4;
G1[3].SemeCarta = Quadri;
G1[4].NumeroCarta = 5;
G1[4].SemeCarta = Quadri;
//mano giocatore 2
G2[0].NumeroCarta = 3;
G2[0].SemeCarta = Quadri;
G2[1].NumeroCarta = 4;
G2[1].SemeCarta = Quadri;
G2[2].NumeroCarta = 5;
G2[2].SemeCarta = Quadri;
G2[3].NumeroCarta = 6;
G2[3].SemeCarta = Quadri;
G2[4].NumeroCarta = 7;
G2[4].SemeCarta = Quadri;
if (Vincitore(G1,G2) == 1)
printf("Ha vinto il giocatore 1\n");
else
printf("Ha vinto il giocatore 2\n");
return 0;
}
int Vincitore(Carta G1[], Carta G2[])
{
int i, max1, max2, uguale;
//controllo se la scala è uguale
uguale = 0;
for(i=0;i<5;i++)
{
if(G1[i].NumeroCarta == G2[i].NumeroCarta)
uguale = 1;
else
uguale = 0;
}
// trovo la carta più alta del primo giocatore
max1=G1[0].NumeroCarta;
for (i=1;i<5;i++)
{
if (G1[i].NumeroCarta>max1)
max1=G1[i].NumeroCarta;
}
// trovo la carta più alta del secondo giocatore
max2=G2[0].NumeroCarta;
for (i=1;i<5;i++)
{
if (G2[i].NumeroCarta>max2)
max2=G2[i].NumeroCarta;
}
if(max1 > max2)
return 1;
else
return 2;
}