Ciao a tutti,
premetto che sono alle prime armi per quanto riguarda i puntatori, ho scritto un programma in C per la distribuzione di un mazzo di carte francesi (52 carte), in maniera casuale. Le carte vengono distribuite in una mano da poker all'italiana (5 carte). E devo vedere se nella mano sono presenti coppie, doppie coppie, tris, poker, colore e scala.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 5
void shuffle (int wDeck[][ 13 ] );
int* deal(const int wDeck[][13], const char *wFace[], const char *wSuit[]);
void pair(const int* hand[SIZE] ,const char *wFace[]);
void tris(const int* hand[SIZE], const char *wFace[]);
void poker(const int* hand[SIZE], const char *wFace[]);
void color(const int* hand[SIZE], const char *wSuit[]);
int main(int argc, char **argv){
const char *suit[4] = {"Cuori", "Quadri", "Fiori", "Picche"}; //dichiaro e inizializzo il vettore dei semi
const char *face[13] = {"Asso", "Due", "Tre", "Quattro", "Cinque", //dichiaro e inizializzo il vettore delle facce
"Sei", "Sette", "Otto", "Nove", "Dieci",
"Jack", "Regina", "Re"};
int deck[4][13] = {{0}}; //dichiaro e inizializzo la matrice delle carte a zero
int hand[SIZE];
srand(time(NULL)); //metto il time come seme per la randomicità
shuffle(deck); //mischio il mazzo di carte
hand[SIZE] = deal(deck, face, suit); //distribuisco le carte
pair(hand[SIZE], face); //controllo se ci sono copp i
tris(hand[SIZE], face); //controllo se c'è untris
poker(hand[SIZE], face); //controllo se c'è un poker
color(hand[SIZE], suit); //controllo se c'è un colore
return 0;
}
//mischia il mazzo di carte
void shuffle(int wDeck[][13]){
int row; //riga
int column; //colonna
int card; //contatore
for(card = 0; card < 52; card++){
do{
row = rand() % 4;
column = rand() % 13;
}while(wDeck[row][column] != 0);
wDeck[row][column] = card;
}
}
//distribuisce le carte apppena mischiate
int* deal(const int wDeck[][13], const char *wFace[], const char *wSuit[]){
int card; //contatore delle carte
int row; //riga
int column; //colonna
int hand[SIZE];
for(card = 0; card < SIZE; card++){
for(row = 0; row < 4; row++){
for(column = 0; column < 13; column++){
if(wDeck[row][column] == card){ //se la casella contiene la carta corrente la visualizza
hand[card] = wFace[column];
printf("%5s di %-8s\n", wFace[column], wSuit[row]);
}
}
}
}
return hand[SIZE];
}
//controlla se è presente una coppia nella mano del giocatore
void pair(const int* hand[SIZE], const char *wFace[]){
int key; //chiave da ricercare nel vettore
int count = 0; //contatore che stabilisce il punto
int point; //indica il punto
int i, j; //contatori
for(i = 0; i < SIZE; i++){
key = hand[i];
for(j = 0; j < SIZE; j++){
if(hand[j] == key && j != i){
count++;
point = hand[j];
if(count == 2){
printf("\nCoppia di: %s", point);
}
}
}
}
}
//controlla se è presente un tris nella mano del giocatore
void tris(const int* hand[SIZE], const char *wFace[]){
int key; //chiave da ricercare nel vettore
int count = 0; //contatore che stabilisce il punto
int point; //indica il punto
int i, j; //contatori
for(i = 0; i < SIZE; i++){
key = hand[i];
for(j = 0; j < SIZE; j++){
if(hand[j] == key && j != i){
count++;
point = hand[j];
if(count == 3){
printf("\nTris di: %s", point);
}
}
}
}
}
//controlla se è presente un poker nella mano del giocatore
void poker(const int* hand[SIZE], const char *wFace[]){
int key; //chiave da ricercare nel vettore
int count = 0; //contatore che stabilisce il punto
int point; //indica il punto
int i, j; //contatori
for(i = 0; i < SIZE; i++){
key = hand[i];
for(j = 0; j < SIZE; j++){
if(hand[j] == key && j != i){
count++;
point = hand[j];
if(count == 4){
printf("\nPoker di: %s", point);
}
}
}
}
}
void color(const int* hand[SIZE], const char *wSuit[]){
int key; //chiave da ricercare nel vettore
int count = 0; //contatore che stabilisce il punto
int point; //indica il punto
int i, j; //contatori
for(i = 0; i < SIZE; i++){
key = hand[i];
for(j = 0; j < SIZE; j++){
if(hand[j] == key && j != i){
count++;
point = hand[j];
if(count == 5){
printf("\nColore di: %s", point);
}
}
}
}
}
Il programma va in segmentation fault da quando ho provato a far "ritornare" un vettore dalla funzione deal, in modo che la mano potesse essere la stessa per le altre funzioni come pair, tris, poker, color. Come posso risolvere?