Tic Tac Toe game in C++
We are using C++ this time.
So lets start, We are using two libraries so lets import them first
#include <iostream>
#include <fstream> // For file manipulation
Then we have to declare a global variable right after importing both of the libraries
char square[10] = {'o','1','2','3','4','5','6','7','8','9'};
Displaying my name in ASCII art at the top
void Logo() //Function to display Usman
{
std::string line;
#ifdef _WIN32 //Checking if opreating system is windows
std::ifstream myfile ("logo.txt");
if (myfile.is_open())
{
while ( getline (myfile,line)){
std::cout <<"\t\t\t\t\t\t\t"<< line << '\n';
}
myfile.close();
#elif __APPLE__ //Checking if opreating system is MacOS
std::ifstream myfile ("/Users/matrix/Desktop/Tic Tac Toe/Tic Tac Toe/logo.txt");
if (myfile.is_open())
{
while ( getline (myfile,line))
{
std::cout <<"\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<< line << '\n';
}
myfile.close();
#endif
}
}
Now we have to initiate a function which will be marking both of the players and assigning them there marks.
int marker(int player) //Function for returning user
{
if (player == 1)
{
return 'X';
}
else
{
return 'O';
}
}
Now creating a clear function to clear our Command Line Interface (CLI) this will be used when we restart the game
void clearSquare() //To clear the CLI
{
for(int i = 0; i<10; i++)
square[i] = '0'+i;
}
One of the most important function in this game here is going to be VictoryChecker whose sole purpose is to compare blocks by other blocks and if theirs a match then voila!
int VictoryChecker() //compairing blocks by other blocks to check if player has won
{
if (square[1] == square[2] && square[2] == square[3])
return 1;
else if (square[4] == square[5] && square[5] == square[6])
return 1;
else if (square[7] == square[8] && square[8] == square[9])
return 1;
else if (square[1] == square[4] && square[4] == square[7])
return 1;
else if (square[2] == square[5] && square[5] == square[8])
return 1;
else if (square[3] == square[6] && square[6] == square[9])
return 1;
else if (square[1] == square[5] && square[5] == square[9])
return 1;
else if (square[3] == square[5] && square[5] == square[7])
return 1;
else if (square[1] != '1' && square[2] != '2' && square[3] != '3'
&& square[4] != '4' && square[5] != '5' && square[6] != '6'
&& square[7] != '7' && square[8] != '8' && square[9] != '9')
return 0;
else
return -1;
}
Now lets design our User Interface. Don't freak out its not Graphical instead we are using Command Line Interface approach here
void Cli() //Command Line Interface of the game.
{
#ifdef _WIN32 //Checking if opreating system is windows
system("cls"); // cls command to clear screen for windows
Logo(); // Logo
std::cout << "\t\t\t\t\t\t\t\t"<<"Tic Tac Toe"<< std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<< "Player 1 (X) - Player 2 (O)" << std::endl << std::endl << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<" | | " << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<" " << square[1] << " | " << square[2] << " | " << square[3] << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<"_____|_____|_____" << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<" | | " << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<" " << square[4] << " | " << square[5] << " | " << square[6] << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<"_____|_____|_____" << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<" | | " << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<" " << square[7] << " | " << square[8] << " | " << square[9] << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<" | | " << std::endl << std::endl;
#elif __APPLE__ //Checking if opreating system is MacOS
system("export TERM=xterm"); //clear command to clear screen for MacOS
system("clear"); //clear command to clear screen for MacOS
Logo(); // Logo
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<"Tic Tac Toe"<< std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<< "Player 1 (X) - Player 2 (O)" << std::endl << std::endl << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<" | | " << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<" " << square[1] << " | " << square[2] << " | " << square[3] << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<"_____|_____|_____" << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<" | | " << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<" " << square[4] << " | " << square[5] << " | " << square[6] << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<"_____|_____|_____" << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<" | | " << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<" " << square[7] << " | " << square[8] << " | " << square[9] << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<" | | " << std::endl << std::endl;
#endif
}
Main function now
int main() //Main
{
bool replay=true;
while (replay!=false){
int player = 1,i;
char choice, mark;
do // Checking Input given from user and compairing it with the box
{
Cli();
if(player%2)
{
player=1;
}
else
{
player=2;
}
std::cout << "Player " << player << ", Choose the box: ";
std::cin >> choice;
mark=marker(player);
if (choice == '1' && square[1] == '1' && choice < '9')
square[1] = mark;
else if (choice == '2' && square[2] == '2' && choice < '9')
square[2] = mark;
else if (choice == '3' && square[3] == '3' && choice < '9')
square[3] = mark;
else if (choice == '4' && square[4] == '4' && choice < '9')
square[4] = mark;
else if (choice == '5' && square[5] == '5' && choice < '9')
square[5] = mark;
else if (choice == '6' && square[6] == '6' && choice < '9')
square[6] = mark;
else if (choice == '7' && square[7] == '7' && choice < '9')
square[7] = mark;
else if (choice == '8' && square[8] == '8' && choice < '9')
square[8] = mark;
else if (choice == '9' && square[9] == '9' && choice <= '9')
square[9] = mark;
else // To handle the crap shit user might input
{
std::cout<<"Invalid move "<<std::endl;
player--;
}
player++;
i=VictoryChecker();
} while(i==-1);
Cli();
if(i==1)
{
std::cout<<"Player "<<--player<<" has Won! "<<std::endl;//Decrementing the Player value so in output it shows which player won
}
else
{
std::cout<<"Game draw - No one has WON!"<<std::endl;
}
std::string Replay;
std::cout<<"Would you like to try your luck again? and play "<<std::endl;
std::cin>>Replay;
if(Replay == "y"|| "yes" || "Yes" ||"YES" ||"Y" || "ye" || "Ye" ||"yas" ||"Yas"){ //sasti try to catch all types crap shit input user my enter
clearSquare();
}
else
{
exit(0); //explicitly exiting.
}
}}
All code at one place now
//
// main.cpp
// Tic Tac Toe
//
// Created by Usman Rizwan on 22/1/21
//
#include <iostream>
#include <fstream> // For file manipulation
char square[10] = {'o','1','2','3','4','5','6','7','8','9'};
void Logo() //Function to display Usman
{
std::string line;
#ifdef _WIN32 //Checking if opreating system is windows
std::ifstream myfile ("logo.txt");
if (myfile.is_open())
{
while ( getline (myfile,line)){
std::cout <<"\t\t\t\t\t\t\t"<< line << '\n';
}
myfile.close();
#elif __APPLE__ //Checking if opreating system is MacOS
std::ifstream myfile ("/Users/matrix/Desktop/Tic Tac Toe/Tic Tac Toe/logo.txt");
if (myfile.is_open())
{
while ( getline (myfile,line))
{
std::cout <<"\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<< line << '\n';
}
myfile.close();
#endif
}
}
int marker(int player) //Function for returning user
{
if (player == 1)
{
return 'X';
}
else
{
return 'O';
}
}
void clearSquare() //To clear the CLI
{
for(int i = 0; i<10; i++)
square[i] = '0'+i;
}
int VictoryChecker() //compairing blocks by other blocks to check if player has won
{
if (square[1] == square[2] && square[2] == square[3])
return 1;
else if (square[4] == square[5] && square[5] == square[6])
return 1;
else if (square[7] == square[8] && square[8] == square[9])
return 1;
else if (square[1] == square[4] && square[4] == square[7])
return 1;
else if (square[2] == square[5] && square[5] == square[8])
return 1;
else if (square[3] == square[6] && square[6] == square[9])
return 1;
else if (square[1] == square[5] && square[5] == square[9])
return 1;
else if (square[3] == square[5] && square[5] == square[7])
return 1;
else if (square[1] != '1' && square[2] != '2' && square[3] != '3'
&& square[4] != '4' && square[5] != '5' && square[6] != '6'
&& square[7] != '7' && square[8] != '8' && square[9] != '9')
return 0;
else
return -1;
}
void Cli() //Command Line Interface of the game.
{
#ifdef _WIN32 //Checking if opreating system is windows
system("cls"); // cls command to clear screen for windows
Logo(); // Logo
std::cout << "\t\t\t\t\t\t\t\t"<<"Tic Tac Toe"<< std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<< "Player 1 (X) - Player 2 (O)" << std::endl << std::endl << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<" | | " << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<" " << square[1] << " | " << square[2] << " | " << square[3] << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<"_____|_____|_____" << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<" | | " << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<" " << square[4] << " | " << square[5] << " | " << square[6] << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<"_____|_____|_____" << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<" | | " << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<" " << square[7] << " | " << square[8] << " | " << square[9] << std::endl;
std::cout << "\t\t\t\t\t\t\t\t"<<" | | " << std::endl << std::endl;
#elif __APPLE__ //Checking if opreating system is MacOS
system("export TERM=xterm"); //clear command to clear screen for MacOS
system("clear"); //clear command to clear screen for MacOS
Logo(); // Logo
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<"Tic Tac Toe"<< std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<< "Player 1 (X) - Player 2 (O)" << std::endl << std::endl << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<" | | " << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<" " << square[1] << " | " << square[2] << " | " << square[3] << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<"_____|_____|_____" << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<" | | " << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<" " << square[4] << " | " << square[5] << " | " << square[6] << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<"_____|_____|_____" << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<" | | " << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<" " << square[7] << " | " << square[8] << " | " << square[9] << std::endl;
std::cout << "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"<<" | | " << std::endl << std::endl;
#endif
}
int main() //Main
{
bool replay=true;
while (replay!=false){
int player = 1,i;
char choice, mark;
do // Checking Input given from user and compairing it with the box
{
Cli();
if(player%2)
{
player=1;
}
else
{
player=2;
}
std::cout << "Player " << player << ", Choose the box: ";
std::cin >> choice;
mark=marker(player);
if (choice == '1' && square[1] == '1' && choice < '9')
square[1] = mark;
else if (choice == '2' && square[2] == '2' && choice < '9')
square[2] = mark;
else if (choice == '3' && square[3] == '3' && choice < '9')
square[3] = mark;
else if (choice == '4' && square[4] == '4' && choice < '9')
square[4] = mark;
else if (choice == '5' && square[5] == '5' && choice < '9')
square[5] = mark;
else if (choice == '6' && square[6] == '6' && choice < '9')
square[6] = mark;
else if (choice == '7' && square[7] == '7' && choice < '9')
square[7] = mark;
else if (choice == '8' && square[8] == '8' && choice < '9')
square[8] = mark;
else if (choice == '9' && square[9] == '9' && choice <= '9')
square[9] = mark;
else // To handle the crap shit user might input
{
std::cout<<"Invalid move "<<std::endl;
player--;
}
player++;
i=VictoryChecker();
} while(i==-1);
Cli();
if(i==1)
{
std::cout<<"Player "<<--player<<" has Won! "<<std::endl;//Decrementing the Player value so in output it shows which player won
}
else
{
std::cout<<"Game draw - No one has WON!"<<std::endl;
}
std::string Replay;
std::cout<<"Would you like to try your luck again? and play "<<std::endl;
std::cin>>Replay;
if(Replay == "y"|| "yes" || "Yes" ||"YES" ||"Y" || "ye" || "Ye" ||"yas" ||"Yas"){ //sasti try to catch all types crap shit input user my enter
clearSquare();
}
else
{
exit(0); //explicitly exiting.
}
}}
Complete Xcode project and source code can be found here
Huge credits to one of my most favorite teacher Sir Haroon for helping me in this project.