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

di Anonimizzato22894 il
8 risposte
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

  • 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)
  • 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;
    }
    }
  • 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?
  • Si ho capito, grazie non me ne ero accorto
  • 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
  • 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.
  • 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
  • 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