#include <iostream> #include<conio.h> //opening headerfile conio for clrscr(); #include<stdlib.h> //opening headerfile stdlib for using namespace std; random(int); char tic[3][3]; //global matrix declerations int d,e,f,a,t,i,j,x,y; //global variables declerations void display(); //displays the matrix void user(); //function for user's move void newdisp(); //function for display of matrix after every move void pc(); //function for pc's move int check(); //function for finding out the winner int horcheck(); //function for horizontal line check int vercheck(); //function for vertical line check int diagcheck(); int main() //main function { clrscr(); //clears the previous output screen randomize(); //initialize random function calling int d=random(2); //random function call for(i=0;i<3;i++) for(j=0;j<3;j++) tic[i][j]=' '; //assigning space ' ' to all elements of matrix display(); //display function call d==0?user():pc(); //random starting of the game depending on d getch(); //provides output by getting input without returning to program return 0; //return int to main function } void display() //display function definition { for(t=0;t<3;t++) { cout<<" "<<tic[t][0]<<" | "<<tic[t][1]<<" | "<<tic[t][2]<<endl; //figure formation if(t!=2) cout<<" --|---|--"<<endl; } } void user() //user function definition { cout<<" ENTER THE CO-ORDINATES WHERE YOU WANT TO PUT UR 'X' i.e 0,1,2 "; cin>>x>>y; if((x<0)||(x>2)&&(y<0)||(y>2)) //check for valid co-ordinates { cout<<" ENTER THE CORRECT CO-ORDINATES"; user(); //user function call } else { if(tic[x][y]==' ') //check for vacant space at entered co-ordinates { tic[x][y]='X'; //assigning user 'X' to the co-ordinates newdisp(); //newdisp function call } else { cout<<" THIS POSITION IS ALREADY FILLED. CHOOSE SOME OTHER CO-ORDINATES"; user(); //user function call } } d=check(); //check function call if(d==0) pc(); //pc function call else { cout<<" YOU ARE THE WINNER"; getche(); //requires enter to return to program. prevents return without display exit(1); //program termination } } void newdisp() //newdisp function definition { for(t=0;t<3;t++) { cout<<" "<<tic[t][0]<<" | "<<tic[t][1]<<" | "<<tic[t][2]<<endl; //displays new tictactoe after user or pc turn if(t!=2) cout<<" --|---|--"<<endl; } } void pc() //pc function call { int f,z; randomize(); //initialize random function calling cout<<" THIS IS THE COMPUTER'S MOVE "; for(i=0;i<=20;i++) { f=random(3); z=random(3); if(tic[f][z]==' ') //check for vacant space at entered co-ordinates { tic[f][z]='O'; //assigning pc 'O' to the co-ordinates goto x; //exiting for loop to display new tictactoe } else continue; // } x:newdisp(); //newdisp function call d=check(); //check function call if(d==0) user(); //user function call else { cout<<" I'M THE WINNER"; getche(); //requires enter to return to program. prevents return without display exit(1); //program termination } } check() //check function definition { horcheck(); //horcheck function call vercheck(); //vercheck function call diagcheck(); //diagcheck function call return (d||e||f); } horcheck() //horcheck function definition { if(((tic[0][0]==tic[0][1])&&(tic[0][1]==tic[0][2])&&(tic[0][1]!=' '))||((tic[1][0]==tic[1][1])&&(tic[1][1]==tic[1][2])&&(tic[1][1]!=' '))||((tic[2][0]==tic[2][1])&&(tic[2][1]==tic[2][2])&&(tic[2][2]!=' '))) d=1; //checks each element of a horizontal line to be same else //returns 1 if all 3 elements of any horizontal line are same d=0; //else returns 0 return d; } vercheck() //vercheck function definition { if(((tic[0][0]==tic[1][0])&&(tic[1][0]==tic[2][0])&&(tic[0][0]!=' '))||((tic[0][1]==tic[1][1])&&(tic[1][1]==tic[2][1])&&(tic[0][1]!=' '))||((tic[0][2]==tic[1][2])&&(tic[1][2]==tic[2][2])&&(tic[0][2]!=' '))) e=1; //checks each element of a vertical line to be same else //returns 1 if all 3 elements of any vertical line are same e=0; //else returns 0 return e; } diagcheck() //diagcheck function definition { if(((tic[0][0]==tic[1][1])&&(tic[1][1]==tic[2][2])&&(tic[0][0]!=' '))||((tic[0][2]==tic[1][1])&&(tic[1][1]==tic[2][0])&&(tic[1][1]!=' '))) f=1; //checks each element of a diagonal line to be same else //returns 1 if all 3 elements of any diagonal line are same f=0; //else returns 0 return f; }
Write, Run & Share C++ code online using OneCompiler's C++ online compiler for free. It's one of the robust, feature-rich online compilers for C++ language, running on the latest version 17. Getting started with the OneCompiler's C++ compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as C++
and start coding!
OneCompiler's C++ online compiler supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample program which takes name as input and print your name with hello.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
cout << "Enter name:";
getline (cin, name);
cout << "Hello " << name;
return 0;
}
C++ is a widely used middle-level programming language.
When ever you want to perform a set of operations based on a condition If-Else is used.
if(conditional-expression) {
//code
}
else {
//code
}
You can also use if-else for nested Ifs and If-Else-If ladder when multiple conditions are to be performed on a single variable.
Switch is an alternative to If-Else-If ladder.
switch(conditional-expression){
case value1:
// code
break; // optional
case value2:
// code
break; // optional
......
default:
code to be executed when all the above cases are not matched;
}
For loop is used to iterate a set of statements based on a condition.
for(Initialization; Condition; Increment/decrement){
//code
}
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while (condition) {
// code
}
Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.
do {
// code
} while (condition);
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity. Function gets run only when it is called.
return_type function_name(parameters);
function_name (parameters)
return_type function_name(parameters) {
// code
}