Tell me if you find any bugs or holes in the code and if you have any question.
Note: You type in the row and column number in together with no space between them. Thank You
Code:
// Done by Shazly
// Tell if you find any bugs or holes in the code!! Thank You :D
#include<iostream>
using namespace std;
void display_board(char board[][8], int limit1, int limit2); // displays as much as the screen can take
void fill_board(char board[][8], int limit1, int limit2); // fills the board with the mark (-)
void Player_X(char board[][8]); // player X turn
void Player_O(char board[][8]); // player O turn
bool X_wins_3(char board[][8]); // winning with 3 X straight
bool X_wins_4(char board[][8]); // winning with 4 X straight
bool O_wins_3(char board[][8]); // winning with 3 O straight
bool O_wins_4(char board[][8]); // winning with 4 O straight
void Players_names(); // The players names input
void board_size(); // the size choise of the user
int range1; // the array 1 diminsion size
int range2; // the array 2 dimension size
string player1;
string player2;
int main()
{
char board[8][8]; // board size can be changed here and on the functions but 8 is best
int turn = 0; // to verify which player's turn is it
cout << "\n\n\t\t\tWelcome To Tic Tac Toe ADVANCED\n\n";
Players_names();
board_size();
fill_board(board, range1, range2);
display_board(board, range1, range2);
while(1)
{
if(turn == 0)
{
Player_X(board);
turn = 1;
if(range1 > 3 && range2 > 3)
{
if(X_wins_4(board))
{
cout << "\n\n\tPlayer " << player1 << " Wins.\n\n";
break;
}
}
else
{
if(X_wins_3(board))
{
cout << "\n\n\tPlayer " << player1 << " Wins.\n\n";
break;
}
}
}
else if(turn == 1)
{
Player_O(board);
turn = 0;
if(O_wins_4(board))
{
cout << "\n\n\tPlayer " << player2 << " Wins.\n\n";
break;
}
else
{
if(O_wins_3(board))
{
cout << "\n\n\tPlayer " << player2 << " Wins.\n\n";
break;
}
}
}
}
}
void display_board(char board[][8], int limit, int limit2)
{
cout << "\n\n\n\t ";
for(int r = 0; r < limit2; r++)
{
cout << " " << r;
}
cout << "\n\n\t\t";
for(int i = 0; i < limit; i++)
{
cout << "\n\t\t";
for(int k = 0; k < limit2; k++)
{
cout << "______";
}
cout << "\n\n\t" << i << "\t| ";
for(int j = 0; j < limit2; j++)
{
cout << board[i][j] << " | ";
}
}
cout << "\n\t\t";
for(int p = 0; p < limit2; p++)
{
cout << "______";
}
}
void fill_board(char board[][8], int limit, int limit2)
{
int counter = 0;
for(int i = 0; i < limit; i++)
{
for(int j = 0; j < limit2; j++)
{
board[i][j] = '-';
}
}
}
void board_size()
{
while(1)
{
cout << "\n\n\n\tPlease Type In The Desired Board Size [ Rows ] [ Columns ]\n\n\tRows:\t\t";
cin >> range1;
cout << "\n\tColumns:\t";
cin >> range2;
if((range1 > 8) || (range1 < 3) || (range2 > 8) || (range2 < 3))
{
cout << "\n\n\tMax Range In Both Criterias Is 8 !! Please Try Again.";
}
else
{
break;
}
}
}
void Players_names()
{
cout << "\n\n\tPlease Type In The First Player's Name:\n\n\t\t";
getline(cin, player1, '\n');
cout << "\n\n\tPlease Type In The Second Player's Name:\n\n\t\t";
getline(cin, player2, '\n');
}
void Player_X(char board[][8])
{
int input;
int column;
int row;
while(1)
{
cout << "\n\n\n\t" << player1 << "'s Move: \t";
cin >> input;
row = input / 10;
column = input % 10;
if((board[row][column] != 'X' && board[row][column] != 'O') && (row < 8 && row >= 0 && column < 8 && column >= 0))
{
board[row][column] = 'X';
display_board(board, range1, range2);
break;
}
else
{
cout << "\n\n\tYou Have Typed In An Invalid Input!! Please Try Again.";
}
}
}
bool X_wins_4(char board[][8])
{
for(int i = 0; i < range1; i++)
{
for(int j = 0; j < range2; j++)
{
if(board[i][j] == 'X' && board[i][j+1] == 'X' && board[i][j+2] == 'X' && board[i][j+3] == 'X')
{
return true;
}
}
}
for(int m = 0; m < range1; m++)
{
for(int n = 0; n < range2; n++)
{
if(board[m][n] == 'X' && board[m+1][n] == 'X' && board[m+2][n] == 'X' && board[m+3][n] == 'X')
{
return true;
}
}
}
for(int k = 0; k < range1; k++)
{
for(int p = 0; p < range2; p++)
{
if(board[k][p] == 'X' && board[k+1][p+1] == 'X' && board[k+2][p+2] == 'X' && board[k+3][p+3] == 'X')
{
return true;
}
}
}
return false;
}
bool X_wins_3(char board[][8])
{
if((board[0][0] == 'X' && board[0][1] == 'X' && board[0][2] == 'X') ||
(board[1][0] == 'X' && board[1][1] == 'X' && board[1][2] == 'X') ||
(board[2][0] == 'X' && board[2][1] == 'X' && board[2][2] == 'X') ||
(board[0][0] == 'X' && board[1][1] == 'X' && board[2][2] == 'X') ||
(board[0][2] == 'X' && board[1][1] == 'X' && board[2][0] == 'X') ||
(board[0][0] == 'X' && board[1][0] == 'X' && board[2][0] == 'X') ||
(board[0][1] == 'X' && board[1][1] == 'X' && board[2][1] == 'X') ||
(board[0][2] == 'X' && board[1][2] == 'X' && board[2][2] == 'X'))
{
return true;
}
return false;
}
void Player_O(char board[][8])
{
int input;
int column;
int row;
while(1)
{
cout << "\n\n\n\t" << player2 << "'s Move: \t";
cin >> input;
row = input / 10;
column = input % 10;
if((board[row][column] != 'X' && board[row][column] != 'O') && (row < 8 && row >= 0 && column < 8 && column >= 0))
{
board[row][column] = 'O';
display_board(board, range1, range2);
break;
}
else
{
cout << "\n\n\tYou Have Typed In An Invalid Input!! Please Try Again.";
}
}
}
bool O_wins_3(char board[][8])
{
if((board[0][0] == 'O' && board[0][1] == 'O' && board[0][2] == 'O') ||
(board[1][0] == 'O' && board[1][1] == 'O' && board[1][2] == 'O') ||
(board[2][0] == 'O' && board[2][1] == 'O' && board[2][2] == 'O') ||
(board[0][0] == 'O' && board[1][1] == 'O' && board[2][2] == 'O') ||
(board[0][2] == 'O' && board[1][1] == 'O' && board[2][0] == 'O') ||
(board[0][0] == 'O' && board[1][0] == 'O' && board[2][0] == 'O') ||
(board[0][1] == 'O' && board[1][1] == 'O' && board[2][1] == 'O') ||
(board[0][2] == 'O' && board[1][2] == 'O' && board[2][2] == 'O'))
{
return true;
}
return false;
}
bool O_wins_4(char board[][8])
{
for(int i = 0; i < range1; i++)
{
for(int j = 0; j < range2-3; j++)
{
if(board[i][j] == 'O' && board[i][j+1] == 'O' && board[i][j+2] == 'O' && board[i][j+3] == 'O')
{
return true;
}
}
}
for(int m = 0; m < range1-3; m++)
{
for(int n = 0; n < range2; n++)
{
if(board[m][n] == 'O' && board[m+1][n] == 'O' && board[m+2][n] == 'O' && board[m+3][n] == 'O')
{
return true;
}
}
}
for(int k = 0; k < range1; k++)
{
for(int p = 0; p < range2; p++)
{
if(board[k][p] == 'O' && board[k+1][p+1] == 'O' && board[k+2][p+2] == 'O' && board[k+3][p+3] == 'O')
{
return true;
}
}
}
return false;
}