I made a SOMEWHAT smart tic tac toe that uses a board class......enjoy :D !
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;
}