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(); }