Problema con tris

di il
34 risposte

Problema con tris

Buongiorno a tutti,
ho un problema nella realizzazione di un programma in C, il tris: quando l'utente inserisce le coordinate dove piazzare la sua X, il ciclo va in loop e continua a chiedere le coordinate, non segue gli altri passaggi. Qualcuno sa come aiutarmi?
#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");
	
	win=2;
	while(win==2)
	{
		system("cls");
		
		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]!='X')&&(m[i][j]!='O'));				//controllo se le coordinate sono libere
		
		m[i][j]='X';
		
		for(a=0;a<0;a++)						//ripetizione del ciclo una sola volta
		{								
			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;
							}
						}
					}
					
					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;
							}
						}
					}
					
					else if(m[i][j]=='X')
					{
						if(m[(i+1)%3][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
							}
						}
					}
					
					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]='O')
							{
								m[(i+2)%3][(j+2)%3]='O';			//controllo se lo spazio in cui devo inserire la O è libero
							}
						}
					}
				}
			}
			
			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]!='X')&&(m[i][j]!='O'));
				
				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!");
		}
	}
	
	printf("\n\n\n\n");
	system("pause");
	return 0;
}

Non ci sono funzioni esterne al main perchè non ancora fatte, ogni altro suggerimento è ben accetto.
Grazie a tutti in anticipo

34 Risposte

  • Re: Problema con tris

    Cosa inserisci da tastiera?
  • Re: Problema con tris

    Inserisco le coordinate dove mettere la X, l'inserimento dell'utente (tra 0 e 2)
  • Re: Problema con tris

    Deve essere

    } while (m[j] != ' '); //controllo se le coordinate sono libere
  • Re: Problema con tris

    Quale sarebbe il problema? Ho provato a toglierlo ma non cambia nulla
    Il problema è che mi fa inserire le coordinate (riga/colonna) all'infinito
  • Re: Problema con tris

    Hai letto il mio post precedente? Che c'è scritto?
  • Re: Problema con tris

    oregon ha scritto:


    Deve essere

    } while (m[j] != ' '); //controllo se le coordinate sono libere


    Questo? sì certo
  • Re: Problema con tris

    E cosa non ti è chiaro? Cosa hai fatto? Hai cambiato la linea del tuo codice con quella proposta?
  • Re: Problema con tris

    oregon ha scritto:


    E cosa non ti è chiaro? Cosa hai fatto? Hai cambiato la linea del tuo codice con quella proposta?
    bhe non ho molto capito il senso...dovrei fare un controllo, se non c'è niente eseguo il codice dentro (cioè scrivo la O) altrimenti passo via senza fare nulla... Il while in teoria non dovrebbe servire
    Questo per quanto ne so io, se sbaglio correggimi che imparo
  • Re: Problema con tris

    Trovato un errore piuttosto sciocco... deve essere "==" non =
  • Re: Problema con tris

    Continua a non funzionare anche con il while
  • Re: Problema con tris

    No niente ... tra apici c'è uno spazio

    ' '

    Quindi metti

    } while (m[j] != ' ');

    nel tuo while ed elimina la

    system("CLS");

    almeno temporaneamente per vedere il risultato.
  • Re: Problema con tris

    oregon ha scritto:


    No niente ... tra apici c'è uno spazio

    ' '

    Quindi metti

    } while (m[j] != ' ');

    nel tuo while ed elimina la

    system("CLS");

    almeno temporaneamente per vedere il risultato.



    Ok quindi via la system cls
    Lo spazio è voluto perché la matrice è riempita di spazi, quindi se non ci sono X e O c'è uno spazio e posso sovrascriverlo
  • Re: Problema con tris

    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.
  • 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.

    Ok scusami, non avevo ben capito
    Questo pomeriggio sistemo e ti aggiorno
    Grazie
Devi accedere o registrarti per scrivere nel forum
34 risposte