sto cercando di fare il gioco del tris con anche la possibilità di giocare contro il computer..però le mosse del computer le voglio decidere non con la random ( eccetto casi particolari), ma in modo che blocchi gli attacchi dell' utente, e se ne ha la possbilita voglio che vinca facendo tris.
ho già fatto il programma, però ho riscontrato un problema giocandoci:in qualunque situazione del gioco nella modalità pc vs. giocatore, alla terza mossa del pc ( cioè io ho già inserito la 3° X, ma lui non inserisce la sua terza O e il gioco continua lo stesso, però inserisco solo io le "pedine"). se poi vado a vincere e dico che voglio fare un altra partita, il problema è lo stesso, però questa volta inizia subito dalla prima mossa. cosa può essere? ( vedi sorgente della funzione contenente il gioco nellamodalità pc vs.giocatore)

codice:
void giococonpc () {
     int t=0;
     srand(time(NULL));      //apri gioco con pc
do{                           
for (m=0;m<3;m++)
{
    for (n=0;n<3;n++)
    {
        tabella[m][n]=0;
        }
        }
        cont=0;
        t=0;
        system("cls");


do{                
if (cont == 0) {
         disegno();
         }
     x=0; 
     t=0;                  
do{  if(x!=0){
     cout<<"Impossibile inserire la X in questa posizione!"<<endl;
     }                  
     cout<<"Il giocatore 1 e' 'X': scegli dove posizionare la 'X'"<<endl;
     cout<<"Riga:";
     cin>> r;
     cout<<"Colonna:";
     cin>>c;
     x++;
}while(r>3 || r<1 || c>3 || c<1 ||(tabella[r-1][c-1]=='X'||tabella[r-1][c-1]=='O'));

tabella[r-1][c-1]='X';
cont++;
disegno();

int a=0;
int b=1;
int z=2;
int r;

w=0;

//ORIZZONTALE
for(r=0; r<3;r++)
{
if (tabella[r][a]=='X' && tabella[r][b]=='X' && tabella[r][z]=='X') 
{
                       cout<<"Giocatore 1 Hai vinto!"<<endl;w=1;break;
                       }
                       
//VERTICALE               
if (tabella[a][r]=='X' && tabella[b][r]=='X' && tabella[z][r]=='X') 
{
                       cout<<"Giocatore 1 Hai vinto!"<<endl;w=1;break;
                       }
                       }
                       
if(w!=1)
{                      
//DIAGONALE
                 
if (tabella[2][0]=='X' && tabella[1][1]=='X' && tabella[0][2]=='X') 
{
                       cout<<"Giocatore 1 Hai vinto!"<<endl;break;
                       }
                       
if (tabella[0][0]=='X' && tabella[1][1]=='X' && tabella[2][2]=='X') 
{
                       cout<<"Giocatore 1 Hai vinto!"<<endl;break;
                       }
                       }else{
                             break;}
if(cont==9)
{
           cout<<"Nessuno ha vinto!"<<endl;break;
           }
 
    
    
   
             
//ATTACCO   
//orizzontale
a=0;
b=1;
z=2;
t=0;
r=0;
for(r=0; r<3; r++)
{
         
if(tabella[r][0]=='O' && tabella[r][1]=='O' && tabella[r][2]==0)
{
                      tabella[r][2]='O';t=1;break;
                      }
                              
if(tabella[r][0]=='O' && tabella[r][1]==0 && tabella[r][2]=='O')
{
                      tabella[r][1]='O';t=1;break;
                      }
                      
                               
if(tabella[r][0]==0 && tabella[r][1]=='O' && tabella[r][2]=='O')
{
                      tabella[r][0]='O';t=1;break;
                      }
                      
//verticale
         
if(tabella[0][r]=='O' && tabella[1][r]=='O' && tabella[2][r]==0)
{
                      tabella[2][r]='O';t=1;break;
                      }
                              
if(tabella[0][r]=='O' && tabella[1][r]==0 && tabella[2][r]=='O')
{
                      tabella[1][r]='O';t=1;break;
                      }
                      
                              
if(tabella[0][r]==0 && tabella[1][r]=='O' && tabella[2][r]=='O')
{
                      tabella[0][r]='O';t=1;break;
                      }
}
                  
if(t!=1)
{r=0;
for(r=0; r<1; r++)
{
         if(tabella[r][a]=='O'&& tabella[r+1][b]=='O'&& tabella[r+2][z]==0)
         { 
                               tabella[r+2][z]='O';t=1; break;
                               }
                               
         if(tabella[r][a]=='O'&& tabella[r+1][b]==0&& tabella[r+2][z]=='O')
         { 
                               tabella[r+1][b]='O';t=1; break;
                               }
                               
         if(tabella[r][a]==0 && tabella[r+1][b]=='O'&& tabella[r+2][z]=='O')
         { 
                               tabella[r][a]='O';t=1; break;
                               }

//dwdedsdd

         if(tabella[z][r]=='O'&& tabella[b][r+1]=='O'&& tabella[a][r+2]==0)
         { 
                               tabella[a][r+2]='O';t=1; break;
                               }
                               
         if(tabella[z][r]=='O'&& tabella[b][r+1]==0&& tabella[a][r+2]=='O')
         { 
                               tabella[b][r+1]='O';t=1; break;
                               }
                               
         if(tabella[z][r]==0 && tabella[b][r+1]=='O'&& tabella[a][r+2]=='O')
         { 
                               tabella[z][r]='O';t=1; break;
                               }
}
}

if(t!=1)
{
        //DIFESA

//orizzontale

r=0;
for(r=0; r<3; r++){
         
if(tabella[r][0]=='X' && tabella[r][1]=='X' && tabella[r][2]==0)
{
                      tabella[r][2]='O';t=1;break;
                      }
                              
if(tabella[r][0]=='X' && tabella[r][1]==0 && tabella[r][2]=='X')
{
                      tabella[r][1]='O';t=1;break;
                      }
                      
                               
if(tabella[r][0]==0 && tabella[r][1]=='X' && tabella[r][2]=='X')
{
                      tabella[r][0]='O';t=1;break;
                      }
                      
//verticale
         
if(tabella[0][r]=='X' && tabella[1][r]=='X' && tabella[2][r]==0)
{
                      tabella[2][r]='O';t=1;break;
                      }
                              
if(tabella[0][r]=='X' && tabella[1][r]==0 && tabella[2][r]=='X')
{
                      tabella[1][r]='O';t=1;break;
                      }
                      
                              
if(tabella[0][r]==0 && tabella[1][r]=='X' && tabella[2][r]=='X')
{
                      tabella[0][r]='O';t=1;break;
                      }
}
}
                   
if(t!=1)
{
r=0;
for(r=0; r<1; r++)
{
         if(tabella[r][a]=='X'&& tabella[r+1][b]=='X'&& tabella[r+2][z]==0)
         { 
                               tabella[r+2][z]='O';t=1; break;
                               }
                               
         if(tabella[r][a]=='X'&& tabella[r+1][b]==0 && tabella[r+2][z]=='X')
         { 
                               tabella[r+1][b]='O';t=1; break;
                               }
                               
         if(tabella[r][a]==0 && tabella[r+1][b]=='X'&& tabella[r+2][z]=='X')
         { 
                               tabella[r][a]='O';t=1; break;
                               }

//dwdedsdd

         if(tabella[z][r]=='X'&& tabella[b][r+1]=='X'&& tabella[a][r+2]==0)
         { 
                               tabella[a][r+2]='O';t=1; break;
                               }
                               
         if(tabella[z][r]=='X'&& tabella[b][r+1]==0 && tabella[a][r+2]=='X')
         { 
                               tabella[b][r+1]='O';t=1; break;
                               }
                               
         if(tabella[z][r]==0 && tabella[b][r+1]=='X'&& tabella[a][r+2]=='X')
         { 
                               tabella[z][r]='O';t=1; break;
                               }
}
}

if(t==0)
{
/////CASO/////
    do {
        
        r = rand() % 3;
        c = rand() % 3;
        
        }while(tabella[r][c]=='X'||tabella[r][c]=='O');
        tabella[r][c]='O';
        }
          
        cont++;
     disegno();
       
a=0;
b=1;
z=2;
w=0;
//ORIZZONTALE
for(r=0; r<3;r++)
{
if (tabella[r][a]=='O' && tabella[r][b]=='O' && tabella[r][z]=='O') 
{
                       cout<<"Hai perso!"<<endl;w=1;break;
                       }
                       
//VERTICALE                

if (tabella[a][r]=='O' && tabella[b][r]=='O' && tabella[z][r]=='O') 
{
                       cout<<"Hai perso!"<<endl;w=1;break;
                       }
                       }
if(w!=1)
{
//DIAGONALE
                 
if (tabella[2][0]=='O' && tabella[1][1]=='O' && tabella[0][2]=='O') 
{
                       cout<<"Hai perso!"<<endl;break;
                       }
                       
if (tabella[0][0]=='O' && tabella[1][1]=='O' && tabella[2][2]=='O') 
{
                       cout<<"Hai perso!"<<endl;break;
                       }
                       }else{break;}
                       
                       
}while(cont<10);
     
cout<<"\nVuoi giocare ancora? (s/n)\n";
cin>>risp;


}while(risp=='s'||risp=='S');

if(risp=='n'||risp=='N')
{
cout<<"Grazie per aver giocato a tris"<<endl;
system("Pause");
exit(0);
}   
getchar();
getchar();
}