Colorazione testi per gioco di carte

di il
4 risposte

Colorazione testi per gioco di carte

Salve a tutti, tempo fa feci 2 post in cui richiedevo aiuto sullo sviluppo di un solitario di carte per un esame universitario, anche grazie all'aiuto di questo forum sono riuscito fra vari consigli a portarlo a termine, vorrei chiedere il vostro aiuto per solamente un ultimo paio di quesiti, il primo è il fatto che il programma in c non riconosce i condici inseriti per la visualizzazione del seme in c, ma solo in c++, alcuni conoscenti mi hanno consigliato l'utilizzo della libreria windows.h ma non so perchè l'errore non svanisce e i simboli per i semi non vengono visualizzati.
il secondo aiuto che vi chiedo riguarda la colorazione dei testi e della console, in più di un sito e forum come stack overflow ho trovato delle funzioni che non si sono rivelate funzionanti e nonostante sembrino piuttosto facili da utilizzare mi risultano sempre errate, nello specifico vorrei colorare la console all'esecuzione in verde e colorare le scritte di vittoria sconfitta e benvenuto, e, qualora possibile colorare le carte in rosso o nero sulla base del seme di appartenenza, ho anche visto la possibilità di riquadrarle in bianco per renderle più simili a delle carte ma non ho la più pallida idea di come sia possibile farle. spero che possiate aiutarmi e vi ringrazio in anticipo.
qui di seguito il mio codice.
#include <stdio.h>
#include <time.h> 
#include <stdlib.h>
#include <string.h>

typedef struct carta //definisco la struttura carta contenente le variabili che mi servono per formarla 
{
	char *seme;
	int valore;
	char *faccia;
	int isVuota; 
	int status; // 0 eliminata 1 visibile 2 coperta 
	
}carta;

int main ()
{	
int num_mosse=0; //per far terminare il gioco prima
    int fine=0; //variabile di fine gioco
    int risp=0; // variabile per controllare se il giocatore vuole continuare a giocare
    int win=0; //Se arriva a 16, il giocatore ha vinto
    
    int i;
	int j;
	int g;
	int m;
	int n;
	int appo;
	int app1,app2; //variabili d'appoggio per decrementare le colonne
	int col1;
	int col2;
	int calcolo[8];			   //array di interi per tenere il conto delle colonne man mano che il giocatore elimina le carte 
	carta mazzo[32];          //definisco l'array mazzo che contiene le mie 32 carte e le inizializzo una ad una
	
	
	srand(time(NULL));		 //tengo conto del tempo di avvio del programma

	mazzo[0] = {"\u2663", 1 , "A",0, 0};  //definisco le carte singolarmente 
	mazzo[1] = {"\u2663", 2 , "J",0, 0};
	mazzo[2] = {"\u2663", 3 , "Q",0, 0};
	mazzo[3] = {"\u2663", 4 , "K",0, 0};
	mazzo[4] = {"\u2663", 1 , "A",0, 0};
	mazzo[5] = {"\u2663", 2 , "J",0, 0};
	mazzo[6] = {"\u2663", 3 , "Q",0, 0};
	mazzo[7] = {"\u2663", 4 , "K",0, 0};
	
	mazzo[8]  = {"\u2665", 1 , "A",0, 0};
	mazzo[9]  = {"\u2665", 2 , "J",0, 0};
	mazzo[10] = {"\u2665", 3 , "Q",0, 0};
	mazzo[11] = {"\u2665", 4 , "K",0, 0};
	mazzo[12] = {"\u2665", 1 , "A",0, 0};
	mazzo[13] = {"\u2665", 2 , "J",0, 0};
	mazzo[14] = {"\u2665", 3 , "Q",0, 0};
	mazzo[15] = {"\u2665", 4 , "K",0, 0};
	
	mazzo[16] = {"\u2666", 1 , "A",0, 0};
	mazzo[17] = {"\u2666", 2 , "J",0, 0};
	mazzo[18] = {"\u2666", 3 , "Q",0, 0};
	mazzo[19] = {"\u2666", 4 , "K",0, 0};
	mazzo[20] = {"\u2666", 1 , "A",0, 0};
	mazzo[21] = {"\u2666", 2 , "J",0, 0};
	mazzo[22] = {"\u2666", 3 , "Q",0, 0};
	mazzo[23] = {"\u2666", 4 , "K",0, 0};
	
	mazzo[24] = {"\u2660", 1 , "A",0, 0};
	mazzo[25] = {"\u2660", 2 , "J",0, 0};
	mazzo[26] = {"\u2660", 3 , "Q",0, 0};
	mazzo[27] = {"\u2660", 4 , "K",0, 0};
	mazzo[28] = {"\u2660", 1 , "A",0, 0};
	mazzo[29] = {"\u2660", 2 , "J",0, 0};
	mazzo[30] = {"\u2660", 3 , "Q",0, 0};
	mazzo[31] = {"\u2660", 4 , "K",0, 0};

i=0;
	printf("    CCCCCCCCCCCCC       OOOOOOOOO        RRRRRRRRRRRRRRRRR  TTTTTTTTTTTTTTTTTTTTTTTEEEEEEEEEEEEEEEEEEEEEE\n");
    printf("  CCC::::::::::::C    OO:::::::::OO      R::::::::::::::::R T:::::::::::::::::::::TE::::::::::::::::::::E\n");
    printf(" CC:::::::::::::::C  OO:::::::::::::OO  R::::::RRRRRR:::::R T:::::::::::::::::::::TE::::::::::::::::::::E\n");
    printf("C:::::CCCCCCCC::::C O:::::::OOO:::::::OR R:::::R     R:::::RT:::::TT:::::::TT:::::TEE::::::EEEEEEEEE::::E\n");
    printf("C:::::C       CCCCCCO::::::O   O::::::O  R::::R     R:::::RTTTTTT  T:::::T  TTTTTT  E:::::E       EEEEEE\n");
	printf("C:::::C             O:::::O     O:::::O  R::::R     R:::::R        T:::::T          E:::::E             \n");
	printf("C:::::C             O:::::O     O:::::O  R::::RRRRRR:::::R         T:::::T          E::::::EEEEEEEEEE   \n");
	printf("C:::::C             O:::::O     O:::::O  R::::RRRRRR:::::R         T:::::T          E::::::EEEEEEEEEE   \n");
	printf("C:::::C             O:::::O     O:::::O  R:::::::::::::RR          T:::::T          E:::::::::::::::E   \n");
	printf("C:::::C             O:::::O     O:::::O  R::::RRRRRR:::::R         T:::::T          E:::::::::::::::E   \n");
	printf("C:::::C             O:::::O     O:::::O  R::::R     R:::::R        T:::::T          E::::::EEEEEEEEEE   \n");
 	printf(" C:::::C            O:::::O     O:::::O  R::::R     R:::::R        T:::::T          E:::::E             \n");
  	printf(" C:::::C     CCCCCCO::::::O     O::::::O R::::R      R:::::R       T:::::T          E:::::E       EEEEEE\n");
   	printf(" C:::::CCCCCCCC::::CO:::::::OOO:::::::ORR:::::R      R:::::R      TT:::::::TT      EE::::::EEEEEEEE:::::E\n");
    printf("  CC:::::::::::::::C OO:::::::::::::OO   R::::::R     R:::::R     T:::::::::T      E::::::::::::::::::::E\n");
    printf("   CCC::::::::::::C    OO:::::::::OO     R::::::R     R:::::R     T:::::::::T      E::::::::::::::::::::E\n");
    printf("     CCCCCCCCCCCCC     	 OOOOOOOOO       RRRRRRRR     RRRRRRR     TTTTTTTTTTT      EEEEEEEEEEEEEEEEEEEEEE\n");
                                                                                                         
                                                                                                           
                                                                                                       
    
        
    
    
        puts ("BENVENUTO!   Premi INVIO per visualizzare le regole del del gioco");
	    getchar();
	    
        system("cls");
        
     	
     
     
    	printf(" ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n");
		printf(" º                  BENVENUTO NEL SOLITARIO CORTE! ECCO LE REGOLE :           º\n");
    	printf(" º - Devi accoppiare le carte con lo stesso valore.                           º\n");
		printf(" º - Il seme delle carte non ha rilevanza, conta solo il valore.              º\n");
		printf(" º - Sono visibili solamente le ultime carte di ogni colonna.		      º\n");
		printf(" º - Le carte superiori saranno visibili una volta eliminate quelle inferiori º\n"); 
		 
		printf(" º - Se non riesci ad eliminare tutte le carte hai perso!                     º\n");
    	printf(" ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n");
	
    	printf(" ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n");
		printf(" º                                OBIETTIVO :                               º\n");
    	printf(" º -Eliminare tutte le carte presenti nel tavolo da gioco                   º\n");
    	printf(" ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n\n");
    	
     	
     	
		puts ("  Premi INVIO per iniziare a giocare.      BUON DIVERTIMENTO  ");
     	getchar();
     	
        system("cls");	


for (i=0; i<8 ; i++) //array per il tenere traccia delle carte a terra
{
	calcolo[i]=3;
}
	
	carta tavolo[4][8]; //effettuo il riempimento della matrice inserendo stocasticamente le carte (tenendo conto che le celle non siano già riempite da altre carte)
	for(i=0;i<4;i++)
	{
		for(j=0;j<8;j++)
		{
		tavolo[i][j].isVuota=1;
		}
	}
	
	i=0;
	
	while(i < 32)
	{
		m=rand()%4;
		n=rand()%8;
		if(tavolo[m][n].isVuota == 1 )
		{
			tavolo[m][n]=mazzo[i];
			mazzo[i].isVuota=1;
			i = i+1;
		}
	}
	
	 tavolo[3][0].status=1; //rendo visibili solo le carte dell'ultima riga 
	 tavolo[3][1].status=1;
	 tavolo[3][2].status=1;
	 tavolo[3][3].status=1;
	 tavolo[3][4].status=1;
	 tavolo[3][5].status=1;
	 tavolo[3][6].status=1;
	 tavolo[3][7].status=1;
	 
	 do{
	 
	  int z=0;

      i=0; 
      int r=0;
      
      printf("[0] \t\t[1] \t\t[2]\t\t [3]\t\t [4]\t\t [5]\t\t [6]\t\t [7]\t\t\n"); // stampo la matrice indicizzando le colonne per la selezione 
        
          for(g=0;g<4;g++)
		    {
		    	for (r=0;r<8;r++)
		    	{
		    		
					if(tavolo[g][r].status==0){
					
						printf (" x \t\t");
				    }
				
					 
					if(tavolo[g][r].status==1)
					{
				  	    printf(" %s %s \t\t", tavolo[g][r].faccia, tavolo[g][r].seme);
					}
					if(tavolo[g][r].status==2)
					{
						printf ("   \t\t");
			        }
				}
				printf("\n");
			}

	col1=0;
	col2=0;	
	do{
	i=0;
		do{
			
		
			printf("scegli una colonna! Se non riesci a proseguire , premi -1: "); // uscita dal programma qualora il giocatore non riuscisse a proseguire, è il caso che determina la sconfitta
			scanf("%d",&col1);
			
			if(col1 == -1){
			printf("HHHHHHHHH     HHHHHHHHH               AAA               IIIIIIIIII     PPPPPPPPPPPPPPPPP   EEEEEEEEEEEEEEEEEEEEEERRRRRRRRRRRRRRRRR      SSSSSSSSSSSSSSS      OOOOOOOOO     4\n");
			printf("H:::::::H     H:::::::H              A:::A              I::::::::I     P::::::::::::::::P  E::::::::::::::::::::ER::::::::::::::::R   SS:::::::::::::::S   OO:::::::::OO   \n");
			printf("H:::::::H     H:::::::H             A:::::A             I::::::::I     P::::::PPPPPP:::::P E::::::::::::::::::::ER::::::RRRRRR:::::R S:::::SSSSSS::::::S OO:::::::::::::OO \n");
			printf("HH::::::H     H::::::HH            A:::::::A            II::::::II     PP:::::P     P:::::PEE::::::EEEEEEEEE::::ERR:::::R     R:::::RS:::::S     SSSSSSSO:::::::OOO:::::::O\n");
			printf("  H:::::H     H:::::H             A:::::::::A             I::::I         P::::P     P:::::P  E:::::E       EEEEEE  R::::R     R:::::RS:::::S            O::::::O   O::::::O\n");
			printf("  H:::::H     H:::::H            A:::::A:::::A            I::::I         P::::P     P:::::P  E:::::E               R::::R     R:::::RS:::::S            O:::::O     O:::::O\n");
			printf("  H::::::HHHHH::::::H           A:::::A A:::::A           I::::I         P::::PPPPPP:::::P   E::::::EEEEEEEEEE     R::::RRRRRR:::::R  S::::SSSS         O:::::O     O:::::O\n");
			printf("  H:::::::::::::::::H          A:::::A   A:::::A          I::::I         P:::::::::::::PP    E:::::::::::::::E     R:::::::::::::RR    SS::::::SSSSS    O:::::O     O:::::O\n");
			printf("  H:::::::::::::::::H         A:::::A     A:::::A         I::::I         P::::PPPPPPPPP      E:::::::::::::::E     R::::RRRRRR:::::R     SSS::::::::SS  O:::::O     O:::::O\n");
			printf("  H::::::HHHHH::::::H        A:::::AAAAAAAAA:::::A        I::::I         P::::P              E::::::EEEEEEEEEE     R::::R     R:::::R       SSSSSS::::S O:::::O     O:::::O\n");
			printf("  H:::::H     H:::::H       A:::::::::::::::::::::A       I::::I         P::::P              E:::::E               R::::R     R:::::R            S:::::SO:::::O     O:::::O\n");
			printf("  H:::::H     H:::::H      A:::::AAAAAAAAAAAAA:::::A      I::::I         P::::P              E:::::E       EEEEEE  R::::R     R:::::R            S:::::SO::::::O   O::::::O\n");
			printf("HH::::::H     H::::::HH   A:::::A             A:::::A   II::::::II     PP::::::PP          EE::::::EEEEEEEE:::::ERR:::::R     R:::::RSSSSSSS     S:::::SO:::::::OOO:::::::O\n");
			printf("H:::::::H     H:::::::H  A:::::A               A:::::A  I::::::::I     P::::::::P          E::::::::::::::::::::ER::::::R     R:::::RS::::::SSSSSS:::::S OO:::::::::::::OO \n");
			printf("H:::::::H     H:::::::H A:::::A                 A:::::A I::::::::I     P::::::::P          E::::::::::::::::::::ER::::::R     R:::::RS:::::::::::::::SS    OO:::::::::OO   \n");
			printf("HHHHHHHHH     HHHHHHHHHAAAAAAA                   AAAAAAAIIIIIIIIII     PPPPPPPPPP          EEEEEEEEEEEEEEEEEEEEEERRRRRRRR     RRRRRRR SSSSSSSSSSSSSSS        OOOOOOOOO     \n");
			return 0;
			}
			
			if(col1<0 || col1>8) // Fase di debug 
			{
				printf("VALORE INSERITO ERRATO .. INSERISCI UN''ALTRA COLONNA! \n");
			}
			
			
			if(tavolo[0][col1].status==2)
			{
				printf("errore colonna senza carte!\n");
				col1=9;
			}
		}while(col1<0 || col1>8 || tavolo[3][col1].status==0);
		
		do{
			printf("seleziona la colonna di confronto! \n");
			scanf("%d",&col2);
			
			if(col2<0 || col2>8)
			{
				printf("VALORE INSERITO ERRATO .. INSERISCI UN''ALTRA COLONNA! \n");
			}
			if(tavolo[0][col2].status==2)
			{
				printf("errore colonna senza carte!\n");
				col2=9;
			}
			if(col1 == col2)
			{
				printf("hai selezionato  due volte la stessa colonna \n");
				col2=9;
			}
		}while(col2<0 || col2>8 || tavolo[3][col2].status==0);
		
		app1= calcolo[col1];
		app2= calcolo[col2];
		
		
		
		if( tavolo[app1][col1].valore == tavolo[app2][col2].valore)
	{
		printf("complimenti hai tolto due carte \n");
		tavolo[app1][col1].status=2;
		tavolo[app2][col2].status=2;
		calcolo[col1]=calcolo[col1]-1;
				calcolo[col2]=calcolo[col2]-1;

		app1 --;
		app2 --;
		tavolo[app1][col1].status=1;
		tavolo[app2][col2].status=1;
		i=1;
		win++;
	}else{
		printf ("mi dispiace, le 2 carte non sono uguali! \n");
	}
	}while(i!=1);
	num_mosse++;

	for(appo=0;appo<8;appo++){
		if(calcolo[appo]==0)
		fine==1;
		else
		{
		fine==0;
		appo==8;
	}
		system ("cls");
	}
}while(win<16);
		printf("HHHHHHHHH     HHHHHHHHH               AAA               IIIIIIIIII     VVVVVVVV           VVVVVVVVIIIIIIIIIINNNNNNNN        NNNNNNNNTTTTTTTTTTTTTTTTTTTTTTT     OOOOOOOOO \n");
    	printf("H:::::::H     H:::::::H              A:::A              I::::::::I     V::::::V           V::::::VI::::::::IN:::::::N       N::::::NT:::::::::::::::::::::T   OO:::::::::OO   \n");
		printf("H:::::::H     H:::::::H             A:::::A             I::::::::I     V::::::V           V::::::VI::::::::IN::::::::N      N::::::NT:::::::::::::::::::::T OO:::::::::::::OO \n");
		printf("HH::::::H     H::::::HH            A:::::::A            II::::::II     V::::::V           V::::::VII::::::IIN:::::::::N     N::::::NT:::::TT:::::::TT:::::TO:::::::OOO:::::::O\n");
		printf(" H:::::H      H:::::H             A:::::::::A             I::::I        V:::::V           V:::::V   I::::I  N::::::::::N    N::::::NTTTTTT  T:::::T  TTTTTTO::::::O   O::::::O\n");
		printf(" H:::::H      H:::::H            A:::::A:::::A            I::::I         V:::::V         V:::::V    I::::I  N:::::::::::N   N::::::N        T:::::T        O:::::O     O:::::O\n");
		printf("  H::::::HHHHH::::::H           A:::::A A:::::A           I::::I          V:::::V       V:::::V     I::::I  N:::::::N::::N  N::::::N        T:::::T        O:::::O     O:::::O\n");
		printf("  H:::::::::::::::::H          A:::::A   A:::::A          I::::I           V:::::V     V:::::V      I::::I  N::::::N N::::N N::::::N        T:::::T        O:::::O     O:::::O\n");
		printf("  H::::::HHHHH::::::H        A:::::AAAAAAAAA:::::A        I::::I             V:::::V V:::::V        I::::I  N::::::N   N:::::::::::N        T:::::T        O:::::O     O:::::O\n");
		printf("  H:::::H     H:::::H       A:::::::::::::::::::::A       I::::I              V:::::V:::::V         I::::I  N::::::N    N::::::::::N        T:::::T        O:::::O     O:::::O\n");
		printf("  H:::::H     H:::::H      A:::::AAAAAAAAAAAAA:::::A      I::::I               V:::::::::V          I::::I  N::::::N     N:::::::::N        T:::::T        O::::::O   O::::::O\n");
		printf("HH::::::H     H::::::HH   A:::::A             A:::::A   II::::::II              V:::::::V         II::::::IIN::::::N      N::::::::N      TT:::::::TT      O:::::::OOO:::::::O\n");
		printf("H:::::::H     H:::::::H  A:::::A               A:::::A  I::::::::I               V:::::V          I::::::::IN::::::N       N:::::::N      T:::::::::T       OO:::::::::::::OO \n");            
   	 	printf("H:::::::H     H:::::::H A:::::A                 A:::::A I::::::::I                V:::V           I::::::::IN::::::N        N::::::N      T:::::::::T         OO:::::::::OO   \n");
   	 	printf("HHHHHHHHH     HHHHHHHHHAAAAAAA                   AAAAAAAIIIIIIIIII                 VVV            IIIIIIIIIINNNNNNNN         NNNNNNN      TTTTTTTTTTT           OOOOOOOOO     \n");
   	 	
}

4 Risposte

  • Re: Colorazione testi per gioco di carte

    Innanzitutto mazzo lo puoi inizializzare così
    
             carta mazzo[32] = {
                {"\u2663", 1 , "A",0, 0},
                {"\u2663", 2 , "J",0, 0},
                {"\u2663", 3 , "Q",0, 0},
                {"\u2663", 4 , "K",0, 0},
                {"\u2663", 1 , "A",0, 0},
                {"\u2663", 2 , "J",0, 0},
                {"\u2663", 3 , "Q",0, 0},
                {"\u2663", 4 , "K",0, 0}, 
                {"\u2665", 1 , "A",0, 0},
                {"\u2665", 2 , "J",0, 0},
                {"\u2665", 3 , "Q",0, 0},
                {"\u2665", 4 , "K",0, 0},
                {"\u2665", 1 , "A",0, 0},
                {"\u2665", 2 , "J",0, 0},
                {"\u2665", 3 , "Q",0, 0},
                {"\u2665", 4 , "K",0, 0},  
                {"\u2666", 1 , "A",0, 0},
                {"\u2666", 2 , "J",0, 0},
                {"\u2666", 3 , "Q",0, 0},
                {"\u2666", 4 , "K",0, 0},
                {"\u2666", 1 , "A",0, 0},
                {"\u2666", 2 , "J",0, 0},
                {"\u2666", 3 , "Q",0, 0},
                {"\u2666", 4 , "K",0, 0}, 
                {"\u2660", 1 , "A",0, 0},
                {"\u2660", 2 , "J",0, 0},
                {"\u2660", 3 , "Q",0, 0},
                {"\u2660", 4 , "K",0, 0},
                {"\u2660", 1 , "A",0, 0},
                {"\u2660", 2 , "J",0, 0},
                {"\u2660", 3 , "Q",0, 0},
                {"\u2660", 4 , "K",0, 0}           
            };
    
    Con il Font giusto su terminale potresti provare a usare i char: quelli da 3 a 6 vengono stampati con i semi delle carte. Prova Lucida Console e
    
    typedef struct carta
    {
    	char seme;
    	int valore;
    	char faccia;
    	int isVuota; 
    	int status;
    }carta;
    
    [...]
             carta mazzo[32] = {
                {5, 1 , 'A',0, 0},
    [...]
    
    Se vuoi fare un gioco con tutti i crismi passa a C#. Se è un progetto universitario... chiudila lì
  • Re: Colorazione testi per gioco di carte

    Con da 3 a 6 vengono stampati con i semi delle carte che intendi?
  • Re: Colorazione testi per gioco di carte

    Che printf("\x03") oppure printf("%c", 3) stampa il cuore, eccetera. Non funziona su tutti i terminali
  • Re: Colorazione testi per gioco di carte

    Gianmarco Levantino ha scritto:


    Salve a tutti, tempo fa feci 2 post in cui richiedevo aiuto sullo sviluppo di un solitario di carte per un esame universitario, anche grazie all'aiuto di questo forum sono riuscito fra vari consigli a portarlo a termine...
    Ciao, a dir la verità non mi sembra che tu abbia seguito più di tanto i consigli che ti sono stati dati... anzi da una lettura veloce del codice che hai postato mi verrebbe da pensare che ti piace complicarti la vita!
Devi accedere o registrarti per scrivere nel forum
4 risposte