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