Problema con una serie di if

di il
6 risposte

Problema con una serie di if

Salve a tutti, sto sviluppando un gioco di briscola come progetto per un esame di informatica. Sto cercando di articolare una sequenza di if che permettano al computer di giocare la carta più conveniente, solo che non funziona. Allego il codice che ho scritto per eventuali consigli:
int PcGiocaSecondo (){																//Il calcolatore decide la carta da giocare se è il secondo a tirare
												     	
	for (int i=0; i<3; i++){

	if (terra[0].seme != briscola.seme){ 												//Seme briscola diverso dal seme a terra
			if ((terra[0].seme == manoPC[i].seme) && (manoPC[0].punti > terra[0].punti))
			{
				box = manoPC[i].valore;
				manoPC[i].valore = terra[2].valore;
				terra[1].valore = box;
		
				box = manoPC[i].seme;
				manoPC[i].seme = terra[1].seme;
				terra[1].seme = box;
	
				box = manoPC[i].punti;
				manoPC[i].punti = terra[1].punti;
				terra[1].punti = box;
				
				cout<<"L'avversario ha lanciato la carta "<<manoPC[i].valore<<manoPC[i].seme<<endl;
			}
	
	
			if ((terra[0].seme == manoPC[i].seme) && (manoPC[0].punti < terra[0].punti))												//Punteggio in mano minore di quello a terra
			{												
				box = manoPC[i].valore;
				manoPC[i].valore = terra[2].valore;
				terra[1].valore = box;
		
				box = manoPC[i].seme;
				manoPC[i].seme = terra[1].seme;
				terra[1].seme = box;
	
				box = manoPC[i].punti;
				manoPC[i].punti = terra[1].punti;
				terra[1].punti = box;	
				
				cout<<"L'avversario ha lanciato la carta "<<manoPC[i].valore<<manoPC[i].seme<<endl;
			}
		
	
			 if ((terra[0].seme == manoPC[i].seme) && (manoPC[0].punti = terra[0].punti) && (manoPC[i].valore < terra[0].valore))  									//Valore carte in mano più basso di quello a terra
        	{  
				box = manoPC[i].valore;
				manoPC[i].valore = terra[2].valore;
				terra[1].valore = box;
		
				box = manoPC[i].seme;
				manoPC[i].seme = terra[1].seme;
				terra[1].seme = box;
	
				box = manoPC[i].punti;
				manoPC[i].punti = terra[1].punti;
				terra[1].punti = box;
				
				cout<<"L'avversario ha lanciato la carta "<<manoPC[i].valore<<manoPC[i].seme<<endl;
        	}

    }  
}	
  
}
Il mazzo è rappresentato da una struttura con valore, seme e punteggio di ogni carta. Eseguendo il codice (all'interno del gioco) non avviene nessuna selezione della carta.

6 Risposte

  • Re: Problema con una serie di if

    Il metodo principale per capire dove sono i problemi di "algoritmo" è fare il debug. Se non sai farlo devi imparare.

    Mi sembra che tutto si basi su questa if

    if (terra[0].seme != briscola.seme){

    Hai visto se viene eseguita?
  • Re: Problema con una serie di if

    Uso Dev++ e ogni volta che provo a fare il debug si blocca e devo chiudere tutto..

    Ho aggiunto il caso in cui il seme della carta a terra sia lo stesso della briscola.
    int PcGiocaSecondo (){																//Il calcolatore decide la carta da giocare se è il secondo a tirare
    							
    	for (int i=0; i<3; i++){
    	cout<<manoPC[i].valore<<manoPC[i].seme<<endl;
    	}						
    												     	
    	for (int i=0; i<3; i++){
    
    if (terra[0].seme != briscola.seme){ 												//Seme briscola diverso dal seme a terra
    
    			if ((terra[0].seme == manoPC[i].seme) && (manoPC[0].punti > terra[0].punti))
    			{
    				box = manoPC[i].valore;
    				manoPC[i].valore = terra[1].valore;
    				terra[1].valore = box;
    		
    				box = manoPC[i].seme;
    				manoPC[i].seme = terra[1].seme;
    				terra[1].seme = box;
    	
    				box = manoPC[i].punti;
    				manoPC[i].punti = terra[1].punti;
    				terra[1].punti = box;
    				
    				cout<<"L'avversario ha lanciato la carta "<<manoPC[i].valore<<manoPC[i].seme<<endl;
    			}
    	
    	
    			if ((terra[0].seme == manoPC[i].seme) && (manoPC[0].punti < terra[0].punti))				//Punteggio in mano minore di quello a terra
    			{												
    				box = manoPC[i].valore;
    				manoPC[i].valore = terra[1].valore;
    				terra[1].valore = box;
    		
    				box = manoPC[i].seme;
    				manoPC[i].seme = terra[1].seme;
    				terra[1].seme = box;
    	
    				box = manoPC[i].punti;
    				manoPC[i].punti = terra[1].punti;
    				terra[1].punti = box;	
    				
    				cout<<"L'avversario ha lanciato la carta "<<manoPC[i].valore<<manoPC[i].seme<<endl;
    			}
    		
    				 if ((terra[0].seme == manoPC[i].seme) && (manoPC[0].punti = terra[0].punti) && (manoPC[i].valore < terra[0].valore))  									//Valore carte in mano più basso di quello a terra
            	{  
    				box = manoPC[i].valore;
    				manoPC[i].valore = terra[1].valore;
    				terra[1].valore = box;
    		
    				box = manoPC[i].seme;
    				manoPC[i].seme = terra[1].seme;
    				terra[1].seme = box;
    	
    				box = manoPC[i].punti;
    				manoPC[i].punti = terra[1].punti;
    				terra[1].punti = box;
    				
    				cout<<"L'avversario ha lanciato la carta "<<manoPC[i].valore<<manoPC[i].seme<<endl;
            	}
            	
        }  
        
        if ((terra[0].seme == briscola.seme) && (manoPC[0].punti < terra[0].punti))
           	{
           		
           			box = manoPC[i].valore;
    				manoPC[i].valore = terra[1].valore;
    				terra[1].valore = box;
    		
    				box = manoPC[i].seme;
    				manoPC[i].seme = terra[1].seme;
    				terra[1].seme = box;
    	
    				box = manoPC[i].punti;
    				manoPC[i].punti = terra[1].punti;
    				terra[1].punti = box;
    				
    				cout<<"L'avversario ha lanciato la carta "<<manoPC[i].valore<<manoPC[i].seme<<endl;
    		}
    	}	
    }

    Quando eseguo il programma credo non venga eseguita, il resto viene visualizzato, ma non la scelta della carta da parte del pc
  • Re: Problema con una serie di if

    typedef ha scritto:


    Uso Dev++ e ogni volta che provo a fare il debug si blocca e devo chiudere tutto..
    Questo è un problema. Il debug è fondamentale quando si programma. Usa uno strumento adeguato o avrai sempre problemi.

    Inserisci delle printf in punti specifici per visualizzare il valore delle variabili che ti interessa controllare così da capire qual è il loro valore quando esegui il codice. In base a tali valori dovresti capire perché il tuo algoritmo non funziona.
  • Re: Problema con una serie di if

    Ho inserito un cout con scritto ''Seme uguale'' dopo ''if (terra[0].seme != briscola.seme)'' e ''Seme diverso'' dopo ''if (terra[0].seme == briscola.seme)'' per valutare cosa succede. Quando eseguo il programma ottengo 3 volte la scritta uguale e non ''lancia'' alcuna carta, o 3 volte la scritta diverso e ''lancia'' tutte e tre le carte in mano, in base al caso.
  • Re: Problema con una serie di if

    Visualizza i valori delle variabili per capire quali carte sta esaminando e se sono corrette in base a quelle che dovrebbero essere.
  • Re: Problema con una serie di if

    Si, sono corrette, non l'ho specificato nel messaggio precedente, mi scuso.
Devi accedere o registrarti per scrivere nel forum
6 risposte