Salve a tutti, sono nuovo sul forum, vi scrivo per chiedervi consigli e/o metodi per la realizzazione di un solitario (Trifoglio irlandese) in C.
Questo è un progetto universitario e, non avendo molta esperienza sul linguaggio c chiedo consiglio a voi.
Ho scritto il codice che vi allegherò (sono in windows sul compilatore DevC++) in cui sono contenute anche le regole del gioco (che vengono visualizzate all'esecuzione del programma), vorrei sapere se ciò che ho fatto è corretto e se esistono modi per semplificare il codice che ho scritto.
Inoltre vorrei chiedervi un aiuto su come poter far visualizzare il tavolo delle carte e come impostare gli slot dove andranno collocate le carte in ordine. Per qualsiasi dubbio scrivetemi, cercherò di chiarire il prima possibile. Aggiungo che mancano alcuni pezzi del solitario perchè non ho idea di come programmarli.
Spero in un vostro aiuto.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define MAX 9
#define MAX_CARDS 52
#define MAX_RANKS 13
#define MAX_SUITS 4
#define COLS 4 //number of columns to display in output
//structure definition
struct card{
char *rank;
char suit[MAX];
};
typedef struct card Card;
//array of pointers to strings for ranks
char *ranks[MAX_RANKS] = {"Asso", "Due", "Tre", "Quattro", "Cinque", "Sei", "Sette",
"Otto", "Nove", "Dieci", "Jack", "Queen", "King"};
//two-dimensional array of strings for suits
char suits[MAX_SUITS][MAX] = {"Fiori", "Quadri", "Cuori", "Picche"};
// protos
void initialize(Card []);
void shuffle(Card []);
void display(const Card[]);
void intro ();
void uscita (char* nome);
void sistemaDeck(Card[]);
// functions
void intro(){
printf("\nÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ TRIFOGLIO IRLANDESE ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» \n");
printf(" \n");
printf(" Prodotto da: \n");
printf(" Gabriele Micol \n");
printf(" Mogavero Alessia \n");
printf(" Sapienza Andrea \n");
printf(" \n");
printf("\nÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ \n");
system("pause");
system("cls");
printf("\n\nÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ TRIFOGLIO IRLANDESE ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n");
printf(" REGOLE DEL GIOCO \n");
printf(" 4 pile di base in basso a destra: \n");
printf(" - costruire sequenze di carte dall'asso al re \n");
printf(" \n");
printf(" 18 pile di gioco: \n");
printf(" - in ogni pila non possono trovarsi piu' di tre carte \n");
printf(" - La carta superiore puo' essere spostata nella base o nelle pile di gioco \n");
printf(" - le pile vuote non vengono riempite \n");
printf(" BUON DIVERTIMENTO!!! \n");
printf("\nÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n");
system("pause");
}
/*
initialize the deck of cards to string values
deck: an array of structure cards */
void initialize(Card deck[]){
int i = 0;
for(i=0;i<MAX_CARDS;i++){
deck[i].rank = ranks[i%MAX_RANKS];
strncpy(deck[i].suit, suits[i/MAX_RANKS], MAX);
}
}
/*
use the pseudo-random number generator to shuffle the cards
deck: an array of structure cards
*/
void shuffle(Card deck[]){
int swapper = 0; //index of card to be swapped
int i = 0; //counter
Card temp = {"", ""}; //temp holding place for swap
srand(time(NULL)); //seed the random numbers with current time
for(i=0;i<MAX_CARDS;i++){
//generate a pseudo-random number from 0 to 51
swapper = rand() % MAX_CARDS;
//swap current card with da swapper
temp = deck[i];
deck[i] = deck[swapper];
deck[swapper] = temp;
}
}
/*
display the deck of cards
deck: an array of structure cards */
void display(const Card deck[]){
int i = 0;
for(i=0;i<MAX_CARDS;i++){
printf("%5s of %-12s", deck[i].rank, deck[i].suit);
//put in a newline every %x loops
if(0==((i+1)%COLS)){
printf("\n");
}
}
}
void sistemaDeck(Card deck[]){
initialize(deck);
printf("\nshuffling deck ... \n");
shuffle(deck);
}
void uscita(char* nome)
{
system("cls");
printf("\nÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ TRIFOGLIO IRLANDESE ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» \n");
printf(" \n");
printf(" GRAZIE %s PER AVER GIOCATO !!!! \n", nome);
printf(" \n");
printf(" \n");
printf(" \n");
printf(" \n");
printf("\nÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ \n");
}
// main function
int main(){
char nome [50];
intro();
system ("cls");
printf("Inserisci il tuo nome: ");
scanf("%s", nome);
//declare an array of 52 cards
Card deck[MAX_CARDS] = {"",""};
//Dopo questa funziona avrai il deck mischiato
sistemaDeck(deck);
//Vai avanti da qui con l'array deck
uscita(nome);
return 0;
}