Dubbio con gli if

di il
4 risposte

Dubbio con gli if

Salve, ultimamente sto scrivendo un piccolo programmino che simula il gioco del TRIS (tic tac toe)
#include <iostream>
#include <string>
using namespace std;

char t[9]={'0','1','2','3','4','5','6','7','8'};//tabella del tris
string g1, g2;
char sceltag1,sceltag2;
int c=0;

void mostra_tabella(){
	
	
	cout<<"\t|"<<t[0]<<"|"<<t[1]<<"|"<<t[2]<<"|"<<endl;
	cout<<"\t|"<<t[3]<<"|"<<t[4]<<"|"<<t[5]<<"|"<<endl;
	cout<<"\t|"<<t[6]<<"|"<<t[7]<<"|"<<t[8]<<"|"<<endl;
}

int scelta(){

	
	
	for(int i=0; i<=9; i++)	{
	
	if(sceltag1==t[i]){
		t[i]='X';
	}
	}//per il primo giocatore
	
	for(int i=0; i<=9; i++)	{
	
	if(sceltag2==t[i]){
		t[i]='O';
	}
	}//per il secondo
}

int controllo_vittoria(){
	if(t[0]=='X' && t[1]=='X' && t[2]=='X'||t[0]=='O' && t[1]=='O' && t[2]=='O' ){
		cout<<g1<<" ha vinto!";
		
		c=1;
	}
	
	if(t[2]=='X' && t[5]=='X' && t[8]=='X'|| t[2]=='O' && t[5]=='O' && t[8]=='O'){
		cout<<g1<<" ha vinto!";
		
		c=1;
	}
	
	if(t[6]=='X' && t[7]=='X' && t[8]=='X'|| t[6]=='O' && t[7]=='O' && t[8]=='O'){
		cout<<g1<<" ha vinto!";
		
		c=1;
	}
	
	if(t[0]=='X' && t[3]=='X' && t[6]=='X'|| t[0]=='O' && t[3]=='O' && t[6]=='O'){
		cout<<g1<<" ha vinto!";
		
		c=1;
	}
	
	if(t[0]=='X' && t[4]=='X' && t[8]=='X'|| t[0]=='O' && t[4]=='O' && t[8]=='O'){
		cout<<g1<<" ha vinto!";
		
		c=1;
	}
	
	if(t[6]=='X' && t[4]=='X' && t[2]=='X'|| t[6]=='O' && t[4]=='O' && t[2]=='O'){
		cout<<g1<<" ha vinto!";
		
		c=1;
	}
}


int main(){
	cout<<"Ciao! Benvenuto al gioco TRIS"<<endl;
	cout<<"Inserisci il nome del primo giocatore: ";
	cin>>g1;
	cout<<"Ora inserisci il nome del secondo giocatore: ";
	cin>>g2; cout<<endl;
	
	cout<<g1<<" sara' la X"<<endl;
	cout<<g2<<" sara' la O"<<endl;
	
	mostra_tabella();
	
	
	do{
	cout<<"\nE' il turno di "<<g1<<": ";
	cin>>sceltag1;
	scelta();
	mostra_tabella();
	
	controllo_vittoria();
	
	cout<<"\nE' il turno di "<<g2<<": ";
	cin>>sceltag2;
	scelta();
	mostra_tabella();
	
	controllo_vittoria();
	
}
	while(c==0);
	
	system("PAUSE");
}
	
Quando uno dei due giocatori vince, ovviamente come potete vedere, esce il nome solo del primo giocatore.
Oltre a fare 2 if diversi (per player) per ogni condizione di vittoria, esiste qualche altro modo per stampare a schermo solo il nome del vincitore senza scrivere codici in modo grossolano?

4 Risposte

  • Re: Dubbio con gli if

    La domanda non è chiara ...
  • Re: Dubbio con gli if

    Nella funzione controllo_vittoria(), ci sono degli if che stampano a schermo un messaggio di vittoria nel caso in cui uno di quei casi si verifichi.
    Però come puoi vedere dal codice esce solo il nome del primo giocatore.

    La mia domanda è:
    Esiste qualche modo per evitare di fare 12 if (6 if per tutti i casi di vittoria, moltiplicati per 2 che sono il numero di giocatori), e mantenere i 6 if però stampare a schermo il nome del corrispettivo giocatore che ha vinto? (x=Giocatore 1 - O=Giocatore2)
  • Re: Dubbio con gli if

    E' ovvio che esca solo un nome, dato che visualizzi sempre lo stesso nome sia che ci siano 3 X sia che ci siano 3 O

    Devi visualizzare g1 solo se ci sono le 3 X (se la X è assegnata a g1) e devi visualizzare g2 solo se ci sono 3 0

    La funzione non deve visualizzare il vincitore ma restituire un valore che indica il vincitore (ad esempio 1 per il primo, 2 per il secondo, 0 per nessun vincitore). Così la chiami e ottieni il valore, in base a questo visualizzi il primo o il secondo nome (oppure continui a giocare).
    Il controllo lo puoi fare con dei cicli for con cui esamini le righe, le colonne e poi le diagonali.
  • Re: Dubbio con gli if

    Ho risolto in una maniera quasi simile, ecco il codice:
    #include <iostream>
    #include <string>
    using namespace std;
    
    char t[9]={'0','1','2','3','4','5','6','7','8'};//tabella del tris
    string g1, g2;
    char sceltag1,sceltag2;
    int c=0;
    
    void mostra_tabella(){
    	
    	
    	cout<<"\t|"<<t[0]<<"|"<<t[1]<<"|"<<t[2]<<"|"<<endl;
    	cout<<"\t|"<<t[3]<<"|"<<t[4]<<"|"<<t[5]<<"|"<<endl;
    	cout<<"\t|"<<t[6]<<"|"<<t[7]<<"|"<<t[8]<<"|"<<endl;
    }
    
    int scelta(){
    
    	
    	
    	for(int i=0; i<=9; i++)	{
    	
    	if(sceltag1==t[i]){
    		t[i]='X';
    	}
    	}//per il primo giocatore
    	
    	for(int i=0; i<=9; i++)	{
    	
    	if(sceltag2==t[i]){
    		t[i]='O';
    	}
    	}//per il secondo
    }
    
    int controllo_vittoria(string win){
    	if(t[0]=='X' && t[1]=='X' && t[2]=='X'||t[0]=='O' && t[1]=='O' && t[2]=='O' ){
    		cout<<win<<" ha vinto!";
    		
    		c=1;
    	}
    	
    	if(t[2]=='X' && t[5]=='X' && t[8]=='X'|| t[2]=='O' && t[5]=='O' && t[8]=='O'){
    		cout<<win<<" ha vinto!";
    		
    		c=1;
    	}
    	
    	if(t[6]=='X' && t[7]=='X' && t[8]=='X'|| t[6]=='O' && t[7]=='O' && t[8]=='O'){
    		cout<<win<<" ha vinto!";
    		
    		c=1;
    	}
    	
    	if(t[0]=='X' && t[3]=='X' && t[6]=='X'|| t[0]=='O' && t[3]=='O' && t[6]=='O'){
    		cout<<win<<" ha vinto!";
    		
    		c=1;
    	}
    	
    	if(t[0]=='X' && t[4]=='X' && t[8]=='X'|| t[0]=='O' && t[4]=='O' && t[8]=='O'){
    		cout<<win<<" ha vinto!";
    		
    		c=1;
    	}
    	
    	if(t[6]=='X' && t[4]=='X' && t[2]=='X'|| t[6]=='O' && t[4]=='O' && t[2]=='O'){
    		cout<<win<<" ha vinto!";
    		
    		c=1;
    	}
    }
    
    
    int main(){
    	cout<<"Ciao! Benvenuto al gioco TRIS"<<endl;
    	cout<<"Inserisci il nome del primo giocatore: ";
    	cin>>g1;
    	cout<<"Ora inserisci il nome del secondo giocatore: ";
    	cin>>g2; cout<<endl;
    	
    	cout<<g1<<" sara' la X"<<endl;
    	cout<<g2<<" sara' la O"<<endl;
    	
    	mostra_tabella();
    	
    	
    	do{
    	cout<<"\nE' il turno di "<<g1<<": ";
    	cin>>sceltag1;
    	scelta();
    	mostra_tabella();
    	
    	controllo_vittoria(g1);
    	
    	if(c==1){break;
    	}
    	
    	cout<<"\nE' il turno di "<<g2<<": ";
    	cin>>sceltag2;
    	scelta();
    	mostra_tabella();
    	
    	controllo_vittoria(g2);
    	
    }
    	while(c==0);
    	
    	system("PAUSE");
    }
    	
    Ora devo solo capire come stoppare il gioco in caso di pareggio
Devi accedere o registrarti per scrivere nel forum
4 risposte