Non capisco perchè non mi và oltre il primo ciclo grande

di il
8 risposte

Non capisco perchè non mi và oltre il primo ciclo grande

Come da titolo non riesco a capire perrche non mi funziona correttamente oltre il primo ciclo.
il programma è ancora incompleto ma se gli do in input una carta che non siane briscola ne punti la prima volta funziona correttamente
ma alla seconda inizia a non funzionare chiedendomi nuovamente cosa voglio giocare o ridicendomi la mano che ho senza alcuna modifica(come se la mia scelta non fosse mai avvenuta).

non capisco se ciò è dovuto a:
-incompletezza del codice(il programma non è terminato come detto prima);
-errori nel posizionamento delle parentesi(ho dovuto modificarle a mano perche avevo fatto alcuni errori e forse fatto un danno ancora maggiore);
-problemi con gli if;
-altri eventuali errori;
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
//

struct carte{//variabili di ogni carta
	char nome[30]; //nome della carta es. Asse di spade
	int id; //numero compreso tra 1 e 10 che identifica il num della carta es. asse spade id=1; 2 di bastoni id=1, ecc.
	int id_generico; // numero compreso tra 1 e 40 che identifica TUTTE le carte es. asse s ha id 0, asse b ha id 10
	int seme; // 1 spade, 2 bastoni, 3 denari, 4 coppe
	int punti; // valore dei punti di ogni carta es asse--> punti=11
	int valore_strozzo; //numero per identificare quale fra 2 carte dello stasso seme è > es. 2 spade ha val di strozzo=0 asse di spade val di strozzo=9 3 di spade val s=8 ecc.
	int status; //se status=0 carta non pescata, se status=1 carta pescata
	int briscola; // se bricola=0 il seme non è briscola se 1 lo è
	int carta_sotto; //se 1 questa carta è quella sotto tutte e definisce la briscola e sara l'ultima pescata
	};
struct giocatore{
	int turno; //chi gioca per primo se turno=1 inizi per primo, se = a 2 per secondo //p.s devo ancora capire come usarla bene
	char nome[30];
	struct carte carte_mano[3];
};
int main(int argc, char*argv[])
{
	int trovato;
	int mossa,caso; //caso-->indica la situazione in cui mi trovo(vedi foglio)
	int i,j,k, scelta,giocata;//giocata-->scelta ma per AI
	int punti_fatti; //punti del giocatore
	int id_generato; // generare numeri casuali per dare le carte
	struct carte carta[41];
	struct giocatore umano, AI, lavoro;
	srand(time(NULL)); //inizializzazione generatore
	umano.turno=1;//gioca prima il giocatore reale
	trovato=0;
	punti_fatti=0;
	{//dichiarazione carte
	for(i=1; i<41; i++){//uso i=1 e come condizione 41 per non confondermi con lo zero
		// ID carta, seme
		if(i/10 <= 1) 
		{
			carta[i].id=i; //spade 1-10
			carta[i].seme=1;
		}
			
		if(i/10 > 1 && i/10 <= 2)
		{
			carta[i].id=i-10; //bastoni 11-20
			carta[i].seme=2;
		}
			
		if(i/10 > 2 && i/10 <= 3)
		{
			carta[i].id=i-20; //denari 21-30
			carta[i].seme=3;
		}
			
		if(i/10 > 2 && i/10 <=40)
		{
			carta[i].id=i-30; //coppe 31-40
			carta[i].seme=4;
		}
				
		// ID carta generico
		carta[i].id_generico=i; 
		
		// punti, strozzo
		if(i==1 || i==11 || i==21 || i==31) 
		{
			carta[i].punti=11; // asse
			carta[i].valore_strozzo=9;
		}
			
		if(i==2 || i==12 || i==22 || i==32)
		{
			carta[i].punti=0; // 2
			carta[i].valore_strozzo=0;
		}
		 
		if(i==3 || i==13 || i==23 || i==33)
		{
			carta[i].punti=10; // 3
			carta[i].valore_strozzo=8;
		}
			
		if(i==4 || i==14 || i==24 || i==34) 
		{
			carta[i].punti=0; // 4
			carta[i].valore_strozzo=1;
		}
			
		if(i==5 || i==15 || i==25 || i==35) 
		{
			carta[i].punti=0; // 5
			carta[i].valore_strozzo=2;
		}
			
		if(i==6 || i==16 || i==26 || i==36) 
		{
			carta[i].punti=0; // 6
			carta[i].valore_strozzo=3;
		}
			
		if(i==7 || i==17 || i==27 || i==37) 
		{
			carta[i].punti=0; // 7
			carta[i].valore_strozzo=4;
		}
			
		if(i==8 || i==18 || i==28 || i==38)
		{
			carta[i].punti=2; // fante
			carta[i].valore_strozzo=5;
		}
		
		if(i==9 || i==19 || i==29 || i==39)
		{
			carta[i].punti=3; // cavallo
			carta[i].valore_strozzo=6;
		}
				
		if(i==10 || i==20 || i==30 || i==40)
		{
			carta[i].punti=4; // re
			carta[i].valore_strozzo=7;
		}
		// status
		carta[i].status=0;
		
		// briscola
		carta[i].briscola=0;
		
		// carta sotto
		carta[i].carta_sotto=0;
		
		// nome
		if(i==1)
			strcpy(carta[i].nome, "Asso di spade");

		if(i==2)
			strcpy(carta[i].nome, "Due di spade");
			
		if(i==3)
			strcpy(carta[i].nome, "Tre di spade");
			
		if(i==4)
			strcpy(carta[i].nome, "Quattro di spade");
			
		if(i==5)
			strcpy(carta[i].nome, "Cinque di spade");
			
		if(i==6)
			strcpy(carta[i].nome, "Sei di spade");
			
		if(i==7)
			strcpy(carta[i].nome, "Sette di spade");
			
		if(i==8)
			strcpy(carta[i].nome, "Fante di spade");
			
		if(i==9)
			strcpy(carta[i].nome, "Cavallo di spade");
			
		if(i==10)
			strcpy(carta[i].nome, "Re di spade");
			
		if(i==11)
			strcpy(carta[i].nome, "Asso di bastoni");
			
		if(i==12)
			strcpy(carta[i].nome, "Due di bastoni");
			
		if(i==13)
			strcpy(carta[i].nome, "Tre di bastoni");
			
		if(i==14)
			strcpy(carta[i].nome, "Quattro di bastoni");
			
		if(i==15)
			strcpy(carta[i].nome, "Cinque di bastoni");
			
		if(i==16)
			strcpy(carta[i].nome, "Sei di bastoni");
			
		if(i==17)
			strcpy(carta[i].nome, "Sette di bastoni");
			
		if(i==18)
			strcpy(carta[i].nome, "Fante di bastoni");
			
		if(i==19)
			strcpy(carta[i].nome, "Cavallo di bastoni");
			
		if(i==20)
			strcpy(carta[i].nome, "Re di bastoni");
			
		if(i==21)
			strcpy(carta[i].nome, "Asso di denari");
			
		if(i==22)
			strcpy(carta[i].nome, "Due di denari");
			
		if(i==23)
			strcpy(carta[i].nome, "Tre di denari");
			
		if(i==24)
			strcpy(carta[i].nome, "Quattro di denari");
			
		if(i==25)
			strcpy(carta[i].nome, "Cinque di denari");
			
		if(i==26)
			strcpy(carta[i].nome, "Sei di denari");
			
		if(i==27)
			strcpy(carta[i].nome, "Sette di denari");
			
		if(i==28)
			strcpy(carta[i].nome, "Fante di denari");
			
		if(i==29)
			strcpy(carta[i].nome, "Cavallo di denari");
			
		if(i==30)
			strcpy(carta[i].nome, "Re di denari");
			
		if(i==31)
			strcpy(carta[i].nome, "Asso di coppe");
			
		if(i==32)
			strcpy(carta[i].nome, "Due di coppe");
			
		if(i==33)
			strcpy(carta[i].nome, "Tre di coppe");
			
		if(i==34)
			strcpy(carta[i].nome, "Quattro di coppe");
			
		if(i==35)
			strcpy(carta[i].nome, "Cinque di coppe");
			
		if(i==36)
			strcpy(carta[i].nome, "Sei di coppe");
			
		if(i==37)
			strcpy(carta[i].nome, "Sette di coppe");
			
		if(i==38)
			strcpy(carta[i].nome, "Fante di coppe");
			
		if(i==39)
			strcpy(carta[i].nome, "Cavallo di coppe");	
			
		if(i==40)
			strcpy(carta[i].nome, "Re di coppe");
	}
	}
	{//da la prima mano
	j=0;
	for(i=0; i<3;i++)
	{
		//ciclo di tre volte, ogni volta da una carta a me e una all'AI
		do
		{
			id_generato=rand()%40+1;
    	}while(carta[id_generato].status==1);
   		
		carta[id_generato].status=1;
		umano.carte_mano[j]=carta[id_generato];
		printf("carta %d = %s\n", j+1, carta[id_generato].nome);
		
		do
		{
			id_generato=rand()%40+1;
    	}while(carta[id_generato].status==1);
   	 	
		carta[id_generato].status=1;
		AI.carte_mano[j]=carta[id_generato];
		j++;
		
	}
	}
	{//Scelta carta sotto e impostazione della briscola su tutte le carte
	printf("\n");
	do
	{
		id_generato=rand()%40+1;
	}while(carta[id_generato].status==1);
	
    carta[id_generato].status=1;
    carta[id_generato].carta_sotto=1;
    for(i=i; i<41; i++){
    	if(carta[i].seme == carta[id_generato].seme)
		{
    		carta[i].briscola=1;
		}
	}
	printf("Carta sotto:  %s\n", carta[id_generato].nome);
	}
	{//prime 17 mani (escludo le ultime tre ovvero quando la brisola sotto va in mano)
		for(k=0;k<17;k++){
			mossa=0;
			if(umano.turno=1){
	printf("Quale carta vuoi giocare?  ");
	scanf("%d", &scelta);
	printf("Hai giocato:  %s\n", umano.carte_mano[scelta-1].nome);
		{//individuazione del caso (vedi foglio)
		caso=0;
		if(umano.carte_mano[scelta-1].briscola==0 && umano.carte_mano[scelta-1].punti==0)
		caso=1;		
		if(umano.carte_mano[scelta-1].briscola==0 && umano.carte_mano[scelta-1].punti!=0)
		caso=2;
		if(umano.carte_mano[scelta-1].briscola==1 && umano.carte_mano[scelta-1].punti==0)
		caso=3;
		if(umano.carte_mano[scelta-1].briscola==1 && umano.carte_mano[scelta-1].punti!=0 && umano.carte_mano[scelta-1].punti<5)
		caso=4;
		if(umano.carte_mano[scelta-1].briscola==1 && umano.carte_mano[scelta-1].punti>=10)
		caso=5;}
	switch(caso) {
		case 1:
			//sub caso A (vedi foglio)
			 for(i=1;i<2;i++)  {//ordinamento per punti
			 	for(j=i-1;j<3;j++){
			 		if(AI.carte_mano[i].punti>AI.carte_mano[j].punti){
			 			lavoro.carte_mano[0]=AI.carte_mano[i];
			 			AI.carte_mano[i]=AI.carte_mano[j];
			 			AI.carte_mano[j]=lavoro.carte_mano[0];
					 }
				 }
      }
			for(i=0;i<3 && trovato==0;i++){
				if(umano.carte_mano[scelta-1].seme==AI.carte_mano[i].seme && umano.carte_mano[scelta-1].punti<AI.carte_mano[i].punti){
					printf("l'AI gioca: %s\n",AI.carte_mano[i].nome);
					printf("prende l'AI\n");
					trovato=1;
					umano.turno=2;
					do //pescate
		{
			id_generato=rand()%40+1;
    	}while(carta[id_generato].status==1);
   		
		carta[id_generato].status=1;
		AI.carte_mano[i]=carta[id_generato];
		
		
		do{
			id_generato=rand()%40+1;
    	}while(carta[id_generato].status==1);
   		
		carta[id_generato].status=1;
		umano.carte_mano[scelta-1]=carta[id_generato];
		}	}
		//sub caso B
		//ordinamento per strozzo
		 for(i=1;i<2;i++)  {
			 	for(j=i-1;j<3;j++){
			 		if(AI.carte_mano[i].valore_strozzo>AI.carte_mano[j].valore_strozzo){
			 			lavoro.carte_mano[0]=AI.carte_mano[i];
			 			AI.carte_mano[i]=AI.carte_mano[j];
			 			AI.carte_mano[j]=lavoro.carte_mano[0];
					 }
				 }
      }
      
      for(i=0;i<3 && trovato==0;i++){
				if(AI.carte_mano[i].briscola==0){
					trovato=1;
					if(AI.carte_mano[i].valore_strozzo>umano.carte_mano[scelta-1].valore_strozzo && AI.carte_mano[i].seme==umano.carte_mano[scelta-1].seme){
						umano.turno=2;
						printf("l'AI gioca: %s\n",AI.carte_mano[i].nome);
						printf("prende l'AI\n");
						umano.turno=2;
					do //pescate
		{
			id_generato=rand()%40+1;
    	}while(carta[id_generato].status==1);
   		
		carta[id_generato].status=1;
		AI.carte_mano[i]=carta[id_generato];
		
		
		do{
			id_generato=rand()%40+1;
    	}while(carta[id_generato].status==1);
   		
		carta[id_generato].status=1;
		umano.carte_mano[scelta-1]=carta[id_generato];
				}
				else{
					printf("l'AI gioca: %s\n",AI.carte_mano[i].nome);
					printf("prendi tu\n");
					punti_fatti=punti_fatti+umano.carte_mano[scelta-1].punti+AI.carte_mano[i].punti;
						do //pescate
		{
			id_generato=rand()%40+1;
    	}while(carta[id_generato].status==1);
   		
		carta[id_generato].status=1;
		umano.carte_mano[scelta-1]=carta[id_generato];
		
		
		do{
			id_generato=rand()%40+1;
    	}while(carta[id_generato].status==1);
   		
		carta[id_generato].status=1;
		AI.carte_mano[i]=carta[id_generato];
					
				}
				
				
					
		}}
		//sub caso c
		if(trovato==0){
			printf("l'AI gioca: %s\n",AI.carte_mano[0].nome);
			printf("prende l'AI\n");
			umano.turno=2;
			do{
			id_generato=rand()%40+1;
    	}while(carta[id_generato].status==1);
   		
		carta[id_generato].status=1;
		AI.carte_mano[i]=carta[id_generato];
		
		
		do{
			id_generato=rand()%40+1;
    	}while(carta[id_generato].status==1);
   		
		carta[id_generato].status=1;
		umano.carte_mano[scelta-1]=carta[id_generato];
		 }
		 printf("la tua mano:\n");
		 for(i=0;i<3;i++){
		 	printf("carta %d = %s\n",i+1,umano.carte_mano[i].nome);
		 }  			
		break;
		
		
		}	
			
	}

	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
		
		else
		{//caso in cui tocca prima all AI
		}
	}}
	
system("PAUSE");
return 0;
}

Ho provato a risolvere ma non riesco. grazie della collaborazione

8 Risposte

  • Re: Non capisco perchè non mi và oltre il primo ciclo grande

    Ho notato un paio di cose

    a) if(umano.turno=1){

    in cui c'è una evidente svista

    e poi

    b) non viene assegnato correttamente il valore dell'elemento .briscola di carte_mano (sono sempre a 0)
  • Re: Non capisco perchè non mi và oltre il primo ciclo grande

    Non ho capito cosa intendi con l'affermazione b)

    l'impostazione della briscola gliela ò nel momento in cui genero carta_sotto ed in base a quella pongo il valore carta.briscola=1
    utilizzando questo:
    for(i=1; i<41; i++){
    if(carta.seme == carta[id_generato].seme)
    {
    carta.briscola=1;
    }
    }
  • Re: Non capisco perchè non mi và oltre il primo ciclo grande

    Così imposti la briscola nelle carte del mazzo ( array carte[] ) ma NON lo stai facendo nell'array delle carte del giocatore umano ( array carte_mano[] )

    E' chiaro?
  • Re: Non capisco perchè non mi và oltre il primo ciclo grande

    Si ho capito, grazie non me ne ero accorto
  • Re: Non capisco perchè non mi và oltre il primo ciclo grande

    Non ho espresso bene il mio problema.
    talvolta (e già non capisco perchè non sempre) se gioco una carta che attivi il case 1 mi dà in output:
    hai giocato <nome carta> (giustamente)
    ma poi mi chiede nuovamente quale carte voglio giocare e vede inalterata la mia mano tale che io ho in mano le medesime carte che avevo prima di dirgli che carta giocare
  • Re: Non capisco perchè non mi và oltre il primo ciclo grande

    Intanto, hai apportato le correzioni degli errori che ti ho indicato?

    Fatto questo, ricompilato e provato nuovamente il codice, lo riproponi qui e si vede di continuare l'analisi, se i problemi ci sono ancora.
    Quanto meno, vorrei capire se il tempo che ho impiegato è stato utile o no.
  • Re: Non capisco perchè non mi và oltre il primo ciclo grande

    Si, ho apportato le modifiche ma il problema persiste
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
    //
    
    struct carte{//variabili di ogni carta
    	char nome[30]; //nome della carta es. Asse di spade
    	int id; //numero compreso tra 1 e 10 che identifica il num della carta es. asse spade id=1; 2 di bastoni id=1, ecc.
    	int id_generico; // numero compreso tra 1 e 40 che identifica TUTTE le carte es. asse s ha id 0, asse b ha id 10
    	int seme; // 1 spade, 2 bastoni, 3 denari, 4 coppe
    	int punti; // valore dei punti di ogni carta es asse--> punti=11
    	int valore_strozzo; //numero per identificare quale fra 2 carte dello stasso seme è > es. 2 spade ha val di strozzo=0 asse di spade val di strozzo=9 3 di spade val s=8 ecc.
    	int status; //se status=0 carta non pescata, se status=1 carta pescata
    	int briscola; // se bricola=0 il seme non è briscola se 1 lo è
    	int carta_sotto; //se 1 questa carta è quella sotto tutte e definisce la briscola e sara l'ultima pescata
    	};
    struct giocatore{
    	int turno; //chi gioca per primo se turno=1 inizi per primo, se = a 2 per secondo //p.s devo ancora capire come usarla bene
    	char nome[30];
    	struct carte carte_mano[3];
    };
    int main(int argc, char*argv[])
    {
    	int trovato;
    	int mossa,caso; //caso-->indica la situazione in cui mi trovo(vedi foglio)
    	int i,j,k, scelta,giocata;//giocata-->scelta ma per AI
    	int punti_fatti; //punti del giocatore
    	int id_generato; // generare numeri casuali per dare le carte
    	struct carte carta[41];
    	struct giocatore umano, AI, lavoro;
    	srand(time(NULL)); //inizializzazione generatore
    	umano.turno=1;//gioca prima il giocatore reale
    	trovato=0;
    	punti_fatti=0;
    	{//dichiarazione carte
    	for(i=1; i<41; i++){//uso i=1 e come condizione 41 per non confondermi con lo zero
    		// ID carta, seme
    		if(i/10 <= 1) 
    		{
    			carta[i].id=i; //spade 1-10
    			carta[i].seme=1;
    		}
    			
    		if(i/10 > 1 && i/10 <= 2)
    		{
    			carta[i].id=i-10; //bastoni 11-20
    			carta[i].seme=2;
    		}
    			
    		if(i/10 > 2 && i/10 <= 3)
    		{
    			carta[i].id=i-20; //denari 21-30
    			carta[i].seme=3;
    		}
    			
    		if(i/10 > 2 && i/10 <=40)
    		{
    			carta[i].id=i-30; //coppe 31-40
    			carta[i].seme=4;
    		}
    				
    		// ID carta generico
    		carta[i].id_generico=i; 
    		
    		// punti, strozzo
    		if(i==1 || i==11 || i==21 || i==31) 
    		{
    			carta[i].punti=11; // asse
    			carta[i].valore_strozzo=9;
    		}
    			
    		if(i==2 || i==12 || i==22 || i==32)
    		{
    			carta[i].punti=0; // 2
    			carta[i].valore_strozzo=0;
    		}
    		 
    		if(i==3 || i==13 || i==23 || i==33)
    		{
    			carta[i].punti=10; // 3
    			carta[i].valore_strozzo=8;
    		}
    			
    		if(i==4 || i==14 || i==24 || i==34) 
    		{
    			carta[i].punti=0; // 4
    			carta[i].valore_strozzo=1;
    		}
    			
    		if(i==5 || i==15 || i==25 || i==35) 
    		{
    			carta[i].punti=0; // 5
    			carta[i].valore_strozzo=2;
    		}
    			
    		if(i==6 || i==16 || i==26 || i==36) 
    		{
    			carta[i].punti=0; // 6
    			carta[i].valore_strozzo=3;
    		}
    			
    		if(i==7 || i==17 || i==27 || i==37) 
    		{
    			carta[i].punti=0; // 7
    			carta[i].valore_strozzo=4;
    		}
    			
    		if(i==8 || i==18 || i==28 || i==38)
    		{
    			carta[i].punti=2; // fante
    			carta[i].valore_strozzo=5;
    		}
    		
    		if(i==9 || i==19 || i==29 || i==39)
    		{
    			carta[i].punti=3; // cavallo
    			carta[i].valore_strozzo=6;
    		}
    				
    		if(i==10 || i==20 || i==30 || i==40)
    		{
    			carta[i].punti=4; // re
    			carta[i].valore_strozzo=7;
    		}
    		// status
    		carta[i].status=0;
    		
    		// briscola
    		carta[i].briscola=0;
    		
    		// carta sotto
    		carta[i].carta_sotto=0;
    		
    		// nome
    		if(i==1)
    			strcpy(carta[i].nome, "Asso di spade");
    
    		if(i==2)
    			strcpy(carta[i].nome, "Due di spade");
    			
    		if(i==3)
    			strcpy(carta[i].nome, "Tre di spade");
    			
    		if(i==4)
    			strcpy(carta[i].nome, "Quattro di spade");
    			
    		if(i==5)
    			strcpy(carta[i].nome, "Cinque di spade");
    			
    		if(i==6)
    			strcpy(carta[i].nome, "Sei di spade");
    			
    		if(i==7)
    			strcpy(carta[i].nome, "Sette di spade");
    			
    		if(i==8)
    			strcpy(carta[i].nome, "Fante di spade");
    			
    		if(i==9)
    			strcpy(carta[i].nome, "Cavallo di spade");
    			
    		if(i==10)
    			strcpy(carta[i].nome, "Re di spade");
    			
    		if(i==11)
    			strcpy(carta[i].nome, "Asso di bastoni");
    			
    		if(i==12)
    			strcpy(carta[i].nome, "Due di bastoni");
    			
    		if(i==13)
    			strcpy(carta[i].nome, "Tre di bastoni");
    			
    		if(i==14)
    			strcpy(carta[i].nome, "Quattro di bastoni");
    			
    		if(i==15)
    			strcpy(carta[i].nome, "Cinque di bastoni");
    			
    		if(i==16)
    			strcpy(carta[i].nome, "Sei di bastoni");
    			
    		if(i==17)
    			strcpy(carta[i].nome, "Sette di bastoni");
    			
    		if(i==18)
    			strcpy(carta[i].nome, "Fante di bastoni");
    			
    		if(i==19)
    			strcpy(carta[i].nome, "Cavallo di bastoni");
    			
    		if(i==20)
    			strcpy(carta[i].nome, "Re di bastoni");
    			
    		if(i==21)
    			strcpy(carta[i].nome, "Asso di denari");
    			
    		if(i==22)
    			strcpy(carta[i].nome, "Due di denari");
    			
    		if(i==23)
    			strcpy(carta[i].nome, "Tre di denari");
    			
    		if(i==24)
    			strcpy(carta[i].nome, "Quattro di denari");
    			
    		if(i==25)
    			strcpy(carta[i].nome, "Cinque di denari");
    			
    		if(i==26)
    			strcpy(carta[i].nome, "Sei di denari");
    			
    		if(i==27)
    			strcpy(carta[i].nome, "Sette di denari");
    			
    		if(i==28)
    			strcpy(carta[i].nome, "Fante di denari");
    			
    		if(i==29)
    			strcpy(carta[i].nome, "Cavallo di denari");
    			
    		if(i==30)
    			strcpy(carta[i].nome, "Re di denari");
    			
    		if(i==31)
    			strcpy(carta[i].nome, "Asso di coppe");
    			
    		if(i==32)
    			strcpy(carta[i].nome, "Due di coppe");
    			
    		if(i==33)
    			strcpy(carta[i].nome, "Tre di coppe");
    			
    		if(i==34)
    			strcpy(carta[i].nome, "Quattro di coppe");
    			
    		if(i==35)
    			strcpy(carta[i].nome, "Cinque di coppe");
    			
    		if(i==36)
    			strcpy(carta[i].nome, "Sei di coppe");
    			
    		if(i==37)
    			strcpy(carta[i].nome, "Sette di coppe");
    			
    		if(i==38)
    			strcpy(carta[i].nome, "Fante di coppe");
    			
    		if(i==39)
    			strcpy(carta[i].nome, "Cavallo di coppe");	
    			
    		if(i==40)
    			strcpy(carta[i].nome, "Re di coppe");
    	}
    	}
    	{//da la prima mano
    	j=0;
    	for(i=0; i<3;i++)
    	{
    		//ciclo di tre volte, ogni volta da una carta a me e una all'AI
    		do
    		{
    			id_generato=rand()%40+1;
        	}while(carta[id_generato].status==1);
       		
    		carta[id_generato].status=1;
    		umano.carte_mano[j]=carta[id_generato];
    		printf("carta %d = %s\n", j+1, carta[id_generato].nome);
    		
    		do
    		{
    			id_generato=rand()%40+1;
        	}while(carta[id_generato].status==1);
       	 	
    		carta[id_generato].status=1;
    		AI.carte_mano[j]=carta[id_generato];
    		j++;
    		
    	}
    	}
    	{//Scelta carta sotto e impostazione della briscola su tutte le carte
    	printf("\n");
    	do
    	{
    		id_generato=rand()%40+1;
    	}while(carta[id_generato].status==1);
    	
        carta[id_generato].status=1;
        carta[id_generato].carta_sotto=1;
        for(i=1; i<41; i++){
        	if(carta[i].seme == carta[id_generato].seme)
    		{
        		carta[i].briscola=1;
    		}
    	}
    	printf("Carta sotto:  %s\n", carta[id_generato].nome);
    	for(i=0;i<3;i++){
    		if(umano.carte_mano[i].seme==carta[id_generato].seme)
    		umano.carte_mano[i].briscola=1;
    		if(AI.carte_mano[i].seme==carta[id_generato].seme)
    		AI.carte_mano[i].briscola=1;
    	}
    	}
    	{//prime 17 mani (escludo le ultime tre ovvero quando la brisola sotto va in mano)
    		for(k=0;k<17;k++){
    			mossa=0;
    			if(umano.turno==1){
    	printf("Quale carta vuoi giocare?  ");
    	scanf("%d", &scelta);
    	printf("Hai giocato:  %s\n", umano.carte_mano[scelta-1].nome);
    		{//individuazione del caso (vedi foglio)
    		caso=0;
    		if(umano.carte_mano[scelta-1].briscola==0 && umano.carte_mano[scelta-1].punti==0)
    		caso=1;		
    		if(umano.carte_mano[scelta-1].briscola==0 && umano.carte_mano[scelta-1].punti!=0)
    		caso=2;
    		if(umano.carte_mano[scelta-1].briscola==1 && umano.carte_mano[scelta-1].punti==0)
    		caso=3;
    		if(umano.carte_mano[scelta-1].briscola==1 && umano.carte_mano[scelta-1].punti!=0 && umano.carte_mano[scelta-1].punti<5)
    		caso=4;
    		if(umano.carte_mano[scelta-1].briscola==1 && umano.carte_mano[scelta-1].punti>=10)
    		caso=5;}
    	switch(caso) {
    		case 1:
    			//sub caso A (vedi foglio)
    			 for(i=1;i<2;i++)  {//ordinamento per punti
    			 	for(j=i-1;j<3;j++){
    			 		if(AI.carte_mano[i].punti>AI.carte_mano[j].punti){
    			 			lavoro.carte_mano[0]=AI.carte_mano[i];
    			 			AI.carte_mano[i]=AI.carte_mano[j];
    			 			AI.carte_mano[j]=lavoro.carte_mano[0];
    					 }
    				 }
          }
    			for(i=0;i<3 && trovato==0;i++){
    				if(umano.carte_mano[scelta-1].seme==AI.carte_mano[i].seme && umano.carte_mano[scelta-1].punti<AI.carte_mano[i].punti){
    					printf("l'AI gioca: %s\n",AI.carte_mano[i].nome);
    					printf("prende l'AI\n");
    					trovato=1;
    					umano.turno=2;
    					do //pescate
    		{
    			id_generato=rand()%40+1;
        	}while(carta[id_generato].status==1);
       		
    		carta[id_generato].status=1;
    		AI.carte_mano[i]=carta[id_generato];
    		
    		
    		do{
    			id_generato=rand()%40+1;
        	}while(carta[id_generato].status==1);
       		
    		carta[id_generato].status=1;
    		umano.carte_mano[scelta-1]=carta[id_generato];
    		}	}
    		//sub caso B
    		//ordinamento per strozzo
    		 for(i=1;i<2;i++)  {
    			 	for(j=i-1;j<3;j++){
    			 		if(AI.carte_mano[i].valore_strozzo>AI.carte_mano[j].valore_strozzo){
    			 			lavoro.carte_mano[0]=AI.carte_mano[i];
    			 			AI.carte_mano[i]=AI.carte_mano[j];
    			 			AI.carte_mano[j]=lavoro.carte_mano[0];
    					 }
    				 }
          }
          
          for(i=0;i<3 && trovato==0;i++){
    				if(AI.carte_mano[i].briscola==0){
    					trovato=1;
    					if(AI.carte_mano[i].valore_strozzo>umano.carte_mano[scelta-1].valore_strozzo && AI.carte_mano[i].seme==umano.carte_mano[scelta-1].seme){
    						umano.turno=2;
    						printf("l'AI gioca: %s\n",AI.carte_mano[i].nome);
    						printf("prende l'AI\n");
    						umano.turno=2;
    					do //pescate
    		{
    			id_generato=rand()%40+1;
        	}while(carta[id_generato].status==1);
       		
    		carta[id_generato].status=1;
    		AI.carte_mano[i]=carta[id_generato];
    		
    		
    		do{
    			id_generato=rand()%40+1;
        	}while(carta[id_generato].status==1);
       		
    		carta[id_generato].status=1;
    		umano.carte_mano[scelta-1]=carta[id_generato];
    				}
    				else{
    					printf("l'AI gioca: %s\n",AI.carte_mano[i].nome);
    					printf("prendi tu\n");
    					punti_fatti=punti_fatti+umano.carte_mano[scelta-1].punti+AI.carte_mano[i].punti;
    						do //pescate
    		{
    			id_generato=rand()%40+1;
        	}while(carta[id_generato].status==1);
       		
    		carta[id_generato].status=1;
    		umano.carte_mano[scelta-1]=carta[id_generato];
    		
    		
    		do{
    			id_generato=rand()%40+1;
        	}while(carta[id_generato].status==1);
       		
    		carta[id_generato].status=1;
    		AI.carte_mano[i]=carta[id_generato];
    					
    				}
    				
    				
    					
    		}}
    		//sub caso c
    		if(trovato==0){
    			printf("l'AI gioca: %s\n",AI.carte_mano[0].nome);
    			printf("prende l'AI\n");
    			umano.turno=2;
    			do{
    			id_generato=rand()%40+1;
        	}while(carta[id_generato].status==1);
       		
    		carta[id_generato].status=1;
    		AI.carte_mano[i]=carta[id_generato];
    		
    		
    		do{
    			id_generato=rand()%40+1;
        	}while(carta[id_generato].status==1);
       		
    		carta[id_generato].status=1;
    		umano.carte_mano[scelta-1]=carta[id_generato];
    		 }
    		 printf("la tua mano:\n");
    		 for(i=0;i<3;i++){
    		 	printf("carta %d = %s\n",i+1,umano.carte_mano[i].nome);
    		 }  			
    		break;
    		
    		
    		}	
    			
    	}
    		else
    		{//caso in cui tocca prima all AI
    		}
    	}}
    	
    system("PAUSE");
    return 0;
    }
    
    
    grazie dell aiuto
  • Re: Non capisco perchè non mi và oltre il primo ciclo grande

    Prova ad impostare delle carte fisse (non random) e replicare il problema.

    In ogni caso, NON si scrive così un programma. Devi usare delle funzioni e organizzare il main in modo che le funzioni siano chiamate in modo che si sappia esattamente cosa sta facendo il programma in un certo momento.
Devi accedere o registrarti per scrivere nel forum
8 risposte