Problema con tris

di il
34 risposte

34 Risposte - Pagina 2

  • Re: Problema con tris

    oregon ha scritto:


    Ho capito che lo spazio è voluto e proprio per questo ti ho suggerito di cambiare le condizioni che avevi scritto nella while (che erano sbagliate) con quelle che ti propongo io (corrette). E' la terza volta che te lo dico.
    Ora funziona, ma il pc non compie le sue scelte, inserisce solo le X dell'utente
  • Re: Problema con tris

    Ora funzionano l'inserimento dell'utente e la stampa ma non l'inserimento del pc...C'è qualche altra condizione da cambiare o errore stupido che ho fatto?
  • Re: Problema con tris

    Ci sono altri errori ...

    - Come nel caso precedente, anche la

    while((m[j]!='X')&&(m[j]!='O'));

    della parte della scelta del PC è sbagliata.

    - La variabile stop non viene mai valorizzata.

    - Controlla l'algoritmo passo passo
  • Re: Problema con tris

    oregon ha scritto:


    Ci sono altri errori ...

    - Come nel caso precedente, anche la

    while((m[j]!='X')&&(m[j]!='O'));


    Questa l'ho cambiata perchè mi sono accorto
    faccio subito il resto

    Grazie mille, ti aggiorno
  • Re: Problema con tris

    Continua a non funzionare l'inserimento pc...Anche analizzando il codice non capisco cosa non va
  • Re: Problema con tris

    Ho dato un'occhiata al codice scorrendo rapidamente col mouse e temo che i problemi non si limitano al solo inserimento pc...
    Ovviamente può anche essere che mi sbaglio, ma se fossi in te prenderei un foglio di carta e ragionerei meglio sull'algoritmo da implementare.

    Capisco che non le hai ancora studiate, ma utilizzando le funzioni il codice risulterebbe molto più chiaro e sarebbe più semplice anche trovare eventuali errori.

    In ogni caso mi manca questo programmino, appena ho un po' di tempo proverò ad implementarlo anch'io!
  • Re: Problema con tris

    Nippolo ha scritto:


    Ho dato un'occhiata al codice scorrendo rapidamente col mouse e temo che i problemi non si limitano al solo inserimento pc...
    Ovviamente può anche essere che mi sbaglio, ma se fossi in te prenderei un foglio di carta e ragionerei meglio sull'algoritmo da implementare.

    Capisco che non le hai ancora studiate, ma utilizzando le funzioni il codice risulterebbe molto più chiaro e sarebbe più semplice anche trovare eventuali errori.

    In ogni caso mi manca questo programmino, appena ho un po' di tempo proverò ad implementarlo anch'io!

    Potresti dirmi dove secondo te ci sono errori? Oltre a quelli già evidenziati da Oregon?
    Grazie mille
  • Re: Problema con tris

    Ma adesso come hai sistemato il codice?

    Come valorizzi stop?

    Mostra il codice modificato, altrimenti non si possono individuare altri problemi ...
  • Re: Problema con tris

    oregon ha scritto:


    Ma adesso come hai sistemato il codice?

    Come valorizzi stop?

    Mostra il codice modificato, altrimenti non si possono individuare altri problemi ...
    Domani vi rimando tutto

    Comunque stop è inizializzazato a 1; se vado negli if per piazzare la O viene cambiato in zero così evita la generazione di coordinate random
  • Re: Problema con tris

    Ho visto che in

    for (a = 0; a<0; a++)

    pensi che questo sia ripetuto una volta, ma non è così.

    E comunque non ha senso impostare un ciclo che verrà eseguito solo una volta.
  • Re: Problema con tris

    oregon ha scritto:


    Ho visto che in

    for (a = 0; a<0; a++)

    pensi che questo sia ripetuto una volta, ma non è così.

    E comunque non ha senso impostare un ciclo che verrà eseguito solo una volta.
    Urca non mi ero accorto
    Grazie mille
    Domani correggo e riposto il codice
  • Re: Problema con tris

    Proprio per questo direi di toglierlo

    //for (a = 0; a<0; a++)

    Ma continua ad esaminare il codice perché altro, nell'algoritmo, non va ...
  • Re: Problema con tris

    Vi riposto il codice
    #include<stdio.h>
    #include<math.h>
    #include<time.h>
    int main()
    {
    	int i, j, win, a, stop;					// xu, yu: coordinate che inserisce l'utente	xpc, ypc: coordinate generate dal pc
    	char m[3][3];
    	
    	srand(time(NULL));
    	
    	printf("TRIS\nX : utente\nO : computer\n\n");
    	
    	for(i=0;i<3;i++)
    	{
    		for(j=0;j<3;j++)
    		{
    			m[i][j]=' ';
    			printf(" %c |", m[i][j]);
    		}
    		printf("\n------------\n");
    	}
    	
    	system("pause");
    	stop=1;
    	win=2;
    	while(win==2)
    	{
    		
    		do
    		{
    			do														//inserimento utente
    			{
    				printf("Inserire la coordinata di riga: ");
    				scanf("%d", &i);	
    			} while((i<0)||(i>2));
    			
    			do
    			{
    				printf("Inserire la coordinata di colonna: ");
    				scanf("%d", &j);
    			} while((j<0)||(j>2));
    		} while(m[i][j]!=' ');				//controllo se le coordinate sono libere
    
    		m[i][j]='X';
    
    				
    		for(i=0;i<3;i++)									
    		{
    			for(j=0;j<3;j++)
    			{
    				if(m[i][j]=='O')							//vittoria pc
    				{
    					if(m[(i+1)%3][j]=='O')					//controllo da parte del pc se ci sono due O sulla stessa riga ed ha quindi possibilità di vincere
    					{
    						if(m[(i+2)%3][j]=' ')				//controllo se lo spazio in cui devo inserire la O è libero
    						{				
    							m[(i+2)%3][j]='O';
    							win=0;
    						}
    					}
    					
    					else if(m[i][(j+1)%3]=='O')					//controllo da parte del pc se ci sono due O sulla stessa colonna ed ha quindi possibilità di vincere
    					{
    						if(m[i][(j+1)%3]=' ')				//controllo se lo spazio in cui devo inserire la O è libero
    						{				
    							m[i][(j+1)%3]='O';
    							win=0;
    						}
    					}
    					stop=0;
    				}
    				
    				else if((m[i][j]=='O')&&(i=j))					//controllo da parte del pc se ci sono due O sulla stessa diagonale ed ha quindi possibilità di vincere
    				{
    					if(m[(i+1)%3][(j+1)%3]=='O')
    					{
    						if(m[(i+1)%3][(j+1)%3]=' ')				//controllo se lo spazio in cui devo inserire la O è libero
    						{				
    							m[(i+1)%3][(j+1)%3]='O';
    							win=0;
    						}
    						stop=0;
    					}
    				}
    				
    				else if(m[i][j]=='X')
    				{
    					if(m[(i+1)][j]=='X')					//controllo da parte del pc se ci sono due X sulla stessa riga e deve quindi bloccare l'utente
    					{
    						if(m[(i+2)%3][j]==' ')
    						{
    							m[(i+2)%3][j]='O';				//controllo se lo spazio in cui devo inserire la O è libero
    						}	
    					}
    					
    					else if(m[i][(j+1)%3]=='X')					//controllo da parte del pc se ci sono due X sulla stessa colonna e deve quindi bloccare l'utente
    					{
    						if(m[i][(j+2)%3]==' ')
    						{
    							m[i][(j+2)%3]='O';					//controllo se lo spazio in cui devo inserire la O è libero
    						}
    					}
    					stop=0;
    				}
    				
    				else if((m[i][j]=='X')&&(i=j))					//controllo da parte del pc se ci sono due X sulla stessa diagonale e deve quindi bloccare l'utente
    				{
    					if(m[(i+1)%3][(j+1)%3]=='X')
    					{
    						if(m[(i+2)%3][(j+2)%3]==' ')
    						{
    							m[(i+2)%3][(j+2)%3]='O';			//controllo se lo spazio in cui devo inserire la O è libero
    						}
    					}
    					stop=0;
    				}
    			}
    		}
    		
    		if(stop)												//se pc non deve impedire vittoria o vincere muove a caso controllando che non ci siano già O o X
    		{
    			do
    			{
    				i=rand()%3;
    				j=rand()%3;
    			} while(m[i][j]!=' ');
    			
    			m[i][j]='O';
    		}
    	
    		for(i=0;i<3;i++)											//stampa della matrice
    		{
    			for(j=0;j<3;j++)
    			{
    				printf(" %c |", m[i][j]);
    			}
    			printf("\n------------\n");
    		}
    		
    		if(win==0)
    		{
    			printf("\n\nChe peccato! PC ha vinto!");
    		}
    		else if(win==1)
    		{
    			printf("\n\nComplimenti! Hai vinto!");
    		}
    		
    		system("pause");
    		system("cls");
    	}
    	
    	printf("\n\n\n\n");
    	system("pause");
    	return 0;
    }

    Continua a non andare
  • Re: Problema con tris

    Rifletti ... per come hai impostato il codice, lo stop=0 lo metti a prescindere se le if sono eseguite o no. Se fai attenzione, le if potrebbero non essere vere e comunque tu poni stop=0 come se il pc avesse fatto una mossa.
  • Re: Problema con tris

    Inoltre in molte condizioni utilizzi = al posto di ==
Devi accedere o registrarti per scrivere nel forum
34 risposte