Ciao a tutti
In Facoltà ci hanno dato un gioco da sviluppare, in questo caso il Poker (quello da 5 carte, non Texas Hold'Em).
Ad ogni modo, ho implementato l'algoritmo che mischia le carte, ora devo implementare la funzione per distribuirle... E ci riesco, ma capita che alcune carte estratte siano uguali! Mi spiego meglio.
Inserisco i nomi di 4 giocatori, poi distribuisco loro le carte.
Giocatore1:
2 di picche
3 di cuori
10 di fiori
1 di rombi
Giocatore2:
3 di cuori
4 di picche
13 di rombi
2 di fiori
ecc...
Come potete vedere, il 3 di cuori è in comune, di conseguenza non si può giocare... Ora vi posto il codice, la funzione che distribuisce è in fondo.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define VALMAX 13
#define NCARTE 52
#define NGIOC 4
#define CLS system("cls")
typedef struct {
char seme[20];
int numero;
} carta;
carta mazzo[NCARTE];
typedef struct {
char nome[20];
carta mano[5];
} persona;
persona giocatore[NGIOC];
void inserimentoGiocatori();
void assegnamentoValori();
void mescolaCarte();
void assegnamentoCarte();
int main()
{
int i = 0;
assegnamentoValori();
inserimentoGiocatori();
/*for(i = 0; i < NCARTE; i++) //CONTROLLO SULL'EFFETTIVO FUNZIONAMENTO DELLA FUNZIONE DI ASSEGNAMENTO DEI VALORI ALLE CARTE
{
printf("%d\n", mazzo[i].numero);
}*/
mescolaCarte();
/*for(i = 0; i < NCARTE; i++)
{
printf("%d %s\n", mazzo[i].numero, mazzo[i].seme);
}*/
assegnamentoCarte();
system("pause");
return 0;
}
void assegnamentoValori()
{
int i = 0, k = 0, var = 0, j = 0;
for(i = 0; i < NCARTE; i++)
{
mazzo[i].numero = 0;
}
for(i = 0; i < 13; i++)
{
strcpy(mazzo[i].seme, "Cuori");
}
for(i = 13; i < 26; i++)
{
strcpy(mazzo[i].seme, "Picche");
}
for(i = 26; i < 39; i++)
{
strcpy(mazzo[i].seme, "Rombi");
}
for(i = 39; i < 52; i++)
{
strcpy(mazzo[i].seme, "Fiori");
}
for(i = 0, k = 1; i < NCARTE && k <= VALMAX; i++, k++)
{
mazzo[i].numero = k;
if(k == VALMAX)
{
k = 0;
}
}
}
void inserimentoGiocatori()
{
int i;
char nome;
for(i = 0; i < 4; i++)
{
printf("Inserire il nome del giocatore numero %d: ", i + 1);
scanf("%s", &giocatore[i].nome);
}
}
void mescolaCarte()
{
typedef struct {
char temp_seme[20];
int temp_numero;
} struttura;
struttura temp_struct;
typedef struct {
char seme_2[20];
int numero_2;
} appoggio;
appoggio vettoreStruct[NCARTE];
int j = 0, i = 0, p = 0;
int u;
u = 51;
while(u >= 0)
{
i = rand() % 52;
do{
j = rand() % 52;
} while(j == i);
temp_struct.temp_numero = mazzo[i].numero;
strcpy(temp_struct.temp_seme, mazzo[i].seme);
mazzo[i].numero = mazzo[j].numero;
strcpy(mazzo[i].seme, mazzo[j].seme);
mazzo[j].numero = temp_struct.temp_numero;
strcpy(mazzo[j].seme, temp_struct.temp_seme);
u--;
}
/*puts("STAMPA");
for(i = 0; i < 52; i++)
{
printf("%d - %d %s\n", i + 1,mazzo[i].numero, mazzo[i].seme);
}*/
/*for(p = 0; p < NCARTE; p++)
{
vettoreStruct[p].numero = mazzo[j].numero;
strcpy(vettoreStruct[p].seme, mazzo[j].seme);
}*/
}
void assegnamentoCarte()
{
int i = 0, f = 0;
int k = 0, p = 0, y = 0, flag_1 = 0;
CLS;
for(i = 0; i < NGIOC; i++)
{
for(k = 0; k < 5; k++)
{
do{
p = rand() % 51;
for(f = 0; f < 5; f++)
{
if(giocatore[i].mano[k].numero == mazzo[p].numero)
{
flag_1 = 1;
}
}
if(flag_1 == 0)
{
giocatore[i].mano[k].numero = mazzo[p].numero;
strcpy(giocatore[i].mano[k].seme, mazzo[p].seme);
}
} while(flag_1 == 1);
}
}
for(i = 0; i < NGIOC; i++)
{
puts("");
printf("Giocatore: %s\n", giocatore[i].nome);
puts("");
printf("Carte in mano: \n");
for(k = 0; k < 5; k++)
{
printf("%d di %s", giocatore[i].mano[k].numero,giocatore[i].mano[k].seme);
puts("");
}
}
}
Ovviamente devo ancora finirlo, migliorarlo, ecc... Per ora la mia difficoltà riguarda la distribuzione delle carte.
Ringrazio anticipatamente chiunque mi aiuti