/*******************************************************/ // TIC TAC TOE with computer AI // // Coded by PRATIK ANAND // // Modified by Haritosh Joshi // // Beta testing by Prateek Jain // // // /******************************************************/ #include #include #include #include int flag=0; void display(char a[][3]); void check(char a[3][3],char stat) { int i=0,j=0; if ((a[0][0]==a[1][1] && a[1][1]==a[2][2] && a[0][0]!='_') || (a[0][2]==a[1][1] && a[1][1]==a[2][0] && a[0][2]!='_')) if (stat=='u') { cout<<"\n\nYou have won"; display(a); getch(); exit(0); } else if (stat=='a') { cout<<"\n\nComputer has won"; display(a); getch(); exit(0); } for(i=0;i<3;i++) if ((((a[i][j]==a[i][j+1]) && (a[i][j]==a[i][j+2])) && (a[i][j]!='_'))) { if (stat=='u') flag=1; else if (stat=='a') flag=2; goto condition; } for(i=0;i<3;i++) if ((a[j][i]==a[j+1][i] && a[j][i]==a[j+2][i]) && a[j][i]!='_') { if (stat=='u') flag=1; else if (stat=='a') flag=2; } condition: if (flag==1) { cout<<"You have won"; display(a); getch(); exit(0); } else if (flag==2) { cout<<"Computer has won"; display(a); getch(); exit(0); } } void user(char a[3][3]) { if (flag) return; int row,col; sub: cout<<"\nEnter row and column no. b/w 1 and 3 :"; cin>>row>>col; if (a[row-1][col-1]=='_') a[row-1][col-1]='x'; else { cout<<"\n\nPlease enter a proper choice "; goto sub; } check(a,'u'); } void ai(char a[3][3]) { int i,j,k,l; if (flag) return; if (a[0][0]==a[1][1] && a[0][0]!='_') //diag { if(a[2][2]=='_') {a[2][2]='o'; goto final;} } else if (a[0][0]==a[2][2] && a[0][0]!='_') //diag { if(a[1][1]=='_') {a[1][1]='o'; goto final; } } else if (a[1][1]==a[2][2] && a[1][1]!='_') //diag { if(a[0][0]=='_') {a[0][0]='o'; goto final;} } else if (a[0][2]==a[1][1] && a[0][2]!='_') //diag { if(a[2][0]=='_') { a[2][0]='o'; goto final; } } else if (a[0][2]==a[2][0] && a[0][2]!='_') //diag { if(a[2][2]=='_') {a[1][1]='o'; goto final;} } else if (a[1][1]==a[2][0] && a[1][1]!='_') //diag { if(a[2][2]=='_') { a[0][2]='o'; goto final;} } //------------------------------------ for(i=0;i<3;i++) //for row for(j=0;j<3;j++) { if((a[i][j]=='x' && a[i][j+2]=='x') || (a[i][j]=='o' && a[i][j+2]=='o')) { if(a[i][j+1]=='_') { a[i][j+1]='o'; goto final; } } else if((a[i][j]=='x' && a[i][j+1]=='x') || (a[i][j]=='o' && a[i][j+1]=='o')) { if(a[i][j+2]=='_') {a[i][j+2]='o'; goto final;} } else if((a[i][j+1]=='x'&& a[i][j+2]=='x') || (a[i][j+1]=='o' && a[i][j+2]=='o')) { if(a[i][j]=='_') {a[i][j]='o'; goto final;} } } for(i=0;i<3;i++) //for col for(j=0;j<3;j++) { if((a[j][i]=='x' && a[j+2][i]=='x') || (a[j][i]=='o' && a[j+2][i]=='o')) { if(a[j+1][i]=='_') {a[j+1][i]='o'; goto final;} } else if((a[j][i]=='x' && a[j+1][i]=='x') || (a[j][i]=='o' && a[j+1][i]=='o') ) { if(a[j+2][i]=='_') {a[j+2][i]='o'; goto final;} } else if((a[j+1][i]=='x'&& a[j+2][i]=='x') || (a[j+1][i]=='o' && a[j+2][i]=='o')) { if(a[j][i]=='_') a[j][i]='o'; goto final; } } sub:randomize(); k=random(3); l=random(3); if(a[k][l]=='_') a[k][l]='o'; else goto sub; final: check(a,'a'); } void display(char a[][3]) { cout<<"\n"; for(int i=0;i<3;i++) { for(int j=0;j<3;j++) cout<