Solitario Corte

di il
1 risposte

Solitario Corte

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;
}
}
}

1 Risposte

  • Re: Solitario Corte

    Ciao, posta il codice utilizzando gli appositi tag, altrimenti non si capisce nulla.
    Inoltre cerca di spiegare meglio qual è il problema riscontrato.
Devi accedere o registrarti per scrivere nel forum
1 risposte