Salve, ho riscontrato qualche difficoltà con un solitario chiamato Corte.
In pratica una volta realizzato il codice (che riesce a svolgere la funzione principale di poter giocare), vorremmo aggiungere una schermata iniziale con Titolo del gioco e regole e anche una schermata di terminazione dove si annuncia la vincita o la perdita.
Abbiamo provato più volte ma il gioco non riesce a leggerlo.
Questo è il codice :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include<io.h>
#include<fcntl.h>
#include<windows.h>
struct carta {
char seme;
int valore;
bool erased;
};
carta mazzo[32];
carta pile[8][8];
void stampatitolo();
void stampa_regole();
int textcolor(int color);
void setMazzo();
void setPile();
void showPile();
void nextMove();
void deleteFromTop(int x);
int main(){
srand(time(NULL));
stampatitolo();
stampa_regole();
int p=7;
textcolor(p);
setMazzo();
setPile();
while(true){
showPile();
nextMove();
}
}
void stampatitolo()
{
int p=5;
textcolor(p);
printf("\t\t\t\t ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n");
printf("\t\t\t\t º º\n");
printf("\t\t\t\t º CORTE º\n");
printf("\t\t\t\t º º");
printf("\n\t\t\t\t ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n\n");
printf("Benvenuto al Solitario Corte, per Vincere dovrai rimuovere tutte le carte accoppiando fra di loro le carte dello stesso valore (indipendentemente dal seme) a patto che siano libere e non chiuse da altre \n");
}
int textcolor (int color)
{
SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), color);
}
void setMazzo(){
for(int i = 0; i < 8; i++){
mazzo[i*4].seme = 'A';
mazzo[i*4].valore = 1;
mazzo[i*4].erased = false;
mazzo[i*4+1].seme = 'J';
mazzo[i*4+1].valore = 2;
mazzo[i*4+1].erased = false;
mazzo[i*4+2].seme = 'Q';
mazzo[i*4+2].valore = 3;
mazzo[i*4+2].erased = false;
mazzo[i*4+3].seme = 'K';
mazzo[i*4+3].valore = 4;
mazzo[i*4+3].erased = false;
}
}
void setPile(){
carta tmp[32];
for(int i = 0; i < 32; i++)
tmp = mazzo;
for(int i = 0; i < 8; i++){
for(int j = 0; j < 8; j++){
int length = sizeof(tmp)/sizeof(tmp[0]);
int r = rand()%length;
pile[j] = tmp[r];
carta tmp2[length-1];
for(int z = 0; z < length; z++){
int index = 0;
if(z != r){
tmp2[index] = tmp[index];
}
}
carta tmp[length-1];
for(int i = 0; i < (length-1); i++)
tmp = tmp2;
}
}
}
void showPile(){
system("cls");
for(int i = 0; i < 8; i++){
for(int j = 0; j < 8; j++){
if(pile[j].erased != true){
if(i == 7) printf("%d%c\t", pile[j].valore, pile[j].seme);
if(i != 7){
if(pile[j][i+1].erased == true) printf("%d%c\t", pile[j].valore, pile[j].seme);
else printf("--\t");
}
} else printf(" \t");
}
printf("\n");
}
}
void nextMove(){
int selected, selected_value, second_selection;
bool isPossible = false;
while(true){
printf("selezione colonna (1 - :");
scanf("%d", &selected);
selected--;
for(int j = 7; j >= 0; j--){
if(pile[selected][j].erased == false){
selected_value = pile[selected][j].valore;
break;
}
}
for(int i = 0; i < 8; i++){
for(int j = 7; j >= 0; j--){
if(i != selected){
if(pile[i][j].valore == selected_value && pile[i][j].erased == false) {
if(j != 7){
if(pile[i][j+1].erased == true) isPossible = true;
} else isPossible = true;
}
}
}
}
if(isPossible == true){
while(true){
isPossible = false;
printf("quale altra colonna vuoi selezionare? (1 - ");
scanf("%d", &second_selection);
second_selection--;
for(int j = 7; j >= 0; j--){
if(pile[second_selection][j].valore == selected_value && pile[second_selection][j].erased == false) {
if(j != 7){
if(pile[second_selection][j+1].erased == true) isPossible = true;
} else isPossible = true;
}
}
if(isPossible == false) printf("la colonna non e' selezionabile riprova.\n");
else{
deleteFromTop(selected);
deleteFromTop(second_selection);
return;
}
}
} else {
printf("la colonna non e' selezionabile riprova, .\n");
}
}
}
void deleteFromTop(int x){
for(int j = 7; j >= 0; j--){
if(pile[x][j].erased == false){
pile[x][j].erased = true;
return;
}
}
}