I made a SOMEWHAT smart tic tac toe that uses a board class......enjoy !
Code:#include <iostream> using namespace std; class board { protected: char board[3][3]; public: board() { for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { board[i][j] = ' '; } } } void play() { char win; do { display(); playerMove(); win = checkWinner(); if(win != ' ') { break; } computerMove(); win = checkWinner(); } while(win == ' '); if(win == 'X') { cout << "\nYOU WIN!\n\n"; } if(win == 'O'){ cout << "\nTHE COMPUTER WINS!\n\n"; } if(win == 'D') { cout << "\nCAT'S GAME!\n\n"; } display(); } void display() { cout << " X \n"; cout << " 0 | 1 | 2\n\n"; for(int i = 0; i < 3; i++) { cout << " " << board[i][0] << " | " << board[i][1] << " | " << board[i][2] << " "; cout << " " << i; if(i == 1) { cout << " Y "; } if(i != 2) { cout << "\n---|---|--- -\n"; } } } void playerMove() { int x, y; cout << "\nEnter x coordinate: "; cin >> x; cout << "\nEnter y coordinate: "; cin >> y; if(board[y][x] != ' ') { cout << "Incorrect coordinate. Please enter again.\n"; playerMove(); } else { board[y][x] = 'X'; } } void computerMove() { if((board[0][0] == board[1][1]) && (board[2][2] == ' ') && (board[0][0] != ' ') && (board[1][1] != ' ')) { board[2][2] = 'O'; return; } if((board[1][1] == board[2][2]) && (board[0][0] == ' ') && (board[1][1] != ' ') && (board[2][2] != ' ')) { board[0][0] = 'O'; return; } if((board[0][0] == board[2][2]) && (board[1][1] == ' ') && (board[0][0] != ' ') && (board[2][2] != ' ')) { board[1][1] = 'O'; return; } if((board[0][2] == board[1][1]) && (board[2][0] == ' ') && (board[0][2] != ' ') && (board[1][1] != ' ')) { board[2][0] = 'O'; return; } if((board[2][0] == board[1][1]) && (board[0][2] == ' ') && (board[2][0] != ' ') && (board[1][1] != ' ')) { board[0][2] = 'O'; return; } if((board[2][0] == board[0][2]) && (board[1][1] == ' ') && (board[2][0] != ' ') && (board[0][2] != ' ')) { board[1][1] = 'O'; return; } if((board[0][0] == board[1][0]) && (board[2][0] == ' ') && (board[0][0] != ' ') && (board[1][0] != ' ')) { board[2][0] = 'O'; return; } if((board[0][1] == board[1][1]) && (board[2][1] == ' ') && (board[0][1] != ' ') && (board[1][1] != ' ')) { board[2][1] = 'O'; return; } if((board[0][2] == board[1][2]) && (board[2][1] == ' ') && (board[0][2] != ' ') && (board[1][2] != ' ')) { board[2][1] = 'O'; return; } if((board[0][0] == board[0][1]) && (board[0][2] == ' ') && (board[0][0] != ' ') && (board[0][1] != ' ')) { board[0][2] = 'O'; return; } if((board[1][0] == board[1][1]) && (board[1][2] == ' ') && (board[1][0] != ' ') && (board[1][1] != ' ')) { board[1][2] = 'O'; return; } if((board[2][0] == board[2][1]) && (board[2][2] == ' ') && (board[2][0] != ' ') && (board[2][1] != ' ')) { board[2][2] = 'O'; return; } for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { if(board[i][j] == ' ') { board[i][j] = 'O'; return; } } } } char checkWinner() { for(int i = 0; i < 3; i++) { if((board[i][0] == board[i][1]) && (board[i][1] == board[i][2])) { return board[i][0]; } if((board[0][i] == board[1][i]) && (board[1][i] == board[2][i])) { return board[0][i]; } } if((board[0][0] == board[1][1]) && (board[1][1] == board[2][2])) { return board[0][0]; } if((board[0][2] == board[1][1]) && (board[1][1] == board[2][0])) { return board[0][2]; } unsigned int a = 0; for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { if(board[i][j] == ' ') { break; } else { a++; } } } if(a == 9) { return 'D'; } return ' '; } }; int main() { char ch; do { board b; b.play(); cout << "\n\nDo you wish to play again? (Y/N):"; cin >> ch; } while(ch == 'Y'); cout << "\n\nThanks for playing!!!"; return 0; }