//to print the boardvoid Board::Refresh() { int sum1=0,sum2=0,sum3=0,sum4=0; for(int i=0;i<3;i++) { sum1 = sum2 = 0; for(int j=0;j<3;j++) { sum1 = sum1 + int(board[i][j]); sum2 = sum2 + int(board[j][i]); } sum3 = sum3 + int(board[i][i]); sum4 = sum4 + int(board[i][2-i]); if(sum1%10==3||sum2%10==3||sum3%10==3||sum4%10==3) { pl = true; end = true; cout<<\"You won!Congratulations:)\\n\"; break; } else if(sum1/10==3||sum2/10==3||sum3/10==3||sum4/10==3) { cp = true; end = true; cout<<\"The computer did a better job!Sorry~\\n\"; break; } }
if(!pl&&!cp&&count==9) { cout<<\"Draw!Play again~\\n\";
end = true; } }
void Board::GetCptStep() { int a,b; bool win,defend; win = defend = false; int sum1,sum2,sum3=0,sum4=0; for(int i=0;i<3;i++) { sum1 = sum2 = 0; for(int j=0;j<3;j++) { sum1 = sum1 + int(board[i][j]); sum2 = sum2 + int(board[j][i]); } sum3 = sum3 + int(board[i][i]); sum4 = sum4 + int(board[i][2-i]); //calculate sum if(sum1/10==2) { for(int k=0;k<3;k++) { if(board[i][k]==N) { a = i; b =k; win = true; break; } else if(board[i][k]==X) break; else continue; } } //to win - row if(!win&&sum2/10==2) { for(int k=0;k<3;k++) {
if(board[k][i]==N) { a = k; b =i; win = true; break; } else if(board[k][i]==X) break; else continue; } }
//to win - column if(!win&&sum1%10==2) { for(int k=0;k<3;k++) { if(board[i][k]==N) { a = i; b =k; defend = true; break; } else if(board[i][k]==O) break; else continue; } }
//to defend - row
if(!win&&sum2%10==2) { for(int k=0;k<3;k++) { if(board[k][i]==N) { a = k; b =i; defend = true; break; } else if(board[k][i]==O) break; else
continue; } } //to defend - column } if(!win&&sum3/10==2) { for(int k=0;k<3;k++) { if(board[k][k]==N) { a = b = k; win = true; break; } else if(board[k][k]==X) break; else continue; } } //to win - diag1 if(!win&&sum4/10==2) { for(int k=0;k<3;k++) { if(board[k][2-k]==N) { a = k; b = 2-k; win = true; break; } else if(board[k][2-k]==X) break; else continue; } } //to win - diag2 if(!win&&sum3%10==2) { for(int k=0;k<3;k++) {
if(board[k][k]==N) { a = b = k; defend = true; break; } else if(board[k][k]==O) break; else continue; } }
//to defend - diag1
if(!win&&sum4%10==2) { for(int k=0;k<3;k++) { if(board[k][2-k]==N) { a = k; b = 2-k; defend = true; break; } else if(board[k][2-k]==O) break; else continue; } }
//to defend - diag2 if(!win&&!defend) { if(board[1][1]==N) a = b = 1; else { do { a = rand()%3; b = rand()%3; }while( board[a][b] ); }
} //get a random SetBoard(a,b,O); }
int main() { Board brd; int a,b; int control; string ans;//for the prompt cout<<\"Would you like to start first? Type in 'Y' or 'N'.\"<>ans; if(ans==\"Y\") { control = 1; break; } else if(ans==\"N\") { control = -1; break; } else { cout<<'\\a'<<\"Invalid input.Please type in 'Y' or 'N'.\"<//to decide whether to start with cpt or player, controlcout<<\"Please enter 2 integers from{1,2,3} with a blank between them to mark its positi-on.\\n\" <<\"Ex. \\\"1 2\\\" refers to row 1 column 2.\\n\\n\"; while(1) { if(control>0) { cout<<\"Make your move: \"; do
{ cin>>a>>b; if(!cin) { fflush(stdin);//to clear the invalid input in the RAM cin.clear(); brd.PrintBoard(); cout<<'\\a'<<\"Invalid input.Please enter another.\\n\" <<\"Make your move: \"; }
else if(a<1||b<1||a>3||b>3) { brd.PrintBoard(); cout<<'\\a'<<\"Invalid input.Please enter 2 integers from{1,2,3}.\\n\" <<\"Make your move: \"; }
else if(brd.IsFull(a-1,b-1)) { brd.PrintBoard(); cout<<'\\a'<<\"Already a chess here.Please enter another.\\n\" <<\"Make your move: \"; } else { brd.SetBoard(a-1,b-1,X); break;
}
}while(1);
//check a,b if invalid or already filled } else { brd.GetCptStep(); } control = control * (-1); brd.Refresh(); if(brd.IsEnd()) break; }
}
system(\"pause\"); return 0;