I'm new to C programming and this is my first project,can you guys point out if there are any mistakes??
Code:
#include <stdio.h>
#include <time.h>
char square[10] = { 'o', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
int choice,stts=0;
int end_turn,choice_ai=0;
int r;
void board();
void pc();
void user();
void srand();
void win();
int rand();
int system();
int level_error=1;
void pc_easy();
void pc_hard();
void level_select();
char level;
int main()
{
level_select();
while(stts==0) //loop while the game has not won or lost
{
board();//draw board
user(); //human player turn
win(); //check win
if (level=='1')
{
pc_easy();//easy computer player
}
else if (level=='2')
{
pc_hard(); //hard computer player
}
board(); //draw board
win(); //check win
}
}
void level_select()
{
printf("\n----TIC-TAC-TOE-----------------------------------------------------------------\n\nchoose level\n\n1.easy\n2.hard\n");
while (level_error==1)
{
scanf("%c",&level);
if (level=='1' || level=='2')
{
level_error=0;
}
else
{
printf("\ninvalid selection\n\n");
printf("choose level\n1.easy\n2.hard\n");
}
}
}
void win() //conditions to win
{
if (square[1] == square[2] && square[2] == square[3])
{
stts=1;
if(square[1] == 'X' && square[2] == 'X' && square[3]=='X')
{
printf("you win\n");
}
else
printf("you loose\n");
}
else if (square[4] == square[5] && square[5] == square[6])
{
stts=1;
if(square[4] == 'X' && square[5] == 'X' && square[6]=='X')
{
printf("you win\n");
}
else
printf("you loose\n");
}
else if (square[7] == square[8] && square[8] == square[9])
{
stts=1;
if(square[7] == 'X' && square[8] == 'X' && square[9]=='X')
{
printf("you win\n");
}
else
printf("you loose\n");
}
else if (square[1] == square[4] && square[4] == square[7])
{
stts=1;
if(square[1] == 'X' && square[4] == 'X' && square[7]=='X')
{
printf("you win\n");
}
else
printf("you loose\n");
}
else if (square[2] == square[5] && square[5] == square[8])
{
stts=1;
if(square[2] == 'X' && square[5] == 'X' && square[8]=='X')
{
printf("you win\n");
}
else
printf("you loose\n");
}
else if (square[3] == square[6] && square[6] == square[9])
{
stts=1;
if(square[3] == 'X' && square[6] == 'X' && square[9]=='X')
{
printf("you win\n");
}
else
printf("you loose\n");
}
else if (square[1] == square[5] && square[5] == square[9])
{
stts=1;
if(square[1] == 'X' && square[5] == 'X' && square[9]=='X')
{
printf("you win\n");
}
else
printf("you loose\n");
}
else if (square[3] == square[5] && square[5] == square[7])
{
stts=1;
if(square[3] == 'X' && square[5] == 'X' && square[7]=='X')
{
printf("you win\n");
}
else
printf("you loose\n");
}
//condition to draw
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')
{
printf("draw\n");
stts=2;
}
else //else play on
stts=0;
}
void user() //human player input
{
while (end_turn==0) //loop until the turn ends
{
printf("Your Move\n");
scanf("%d",&choice); //get input
if (choice<10 && choice>0) //checks if the number is between 1-9
{
if (square[choice]=='X' || square[choice]=='O') //check if the square is taken or not
{
printf("invalid move\n"); //if taken print invalid move
end_turn=0; // turn do not end(go back to the input stage)
}
else
{
square[choice]='X'; //if the choice is available,assign X to the chosen square
end_turn=1; //end turn
}
}
else
{
printf("invalid Move\n\n"); // if the choice is out of range,print invalid and re-enter
}
}
board();
}
void pc_easy() //computer player moves
{
srand((unsigned)time(NULL)); // to get random numbers
while (end_turn==1) //loop while the turn ends
{
r=rand();
choice_ai=(r % 9)+1; //random choice of the computer player
if (square[choice_ai]=='X' || square[choice_ai]=='O') //checks if the choice is taken
{
end_turn=1; // if taken choose again
}
else
{
square[choice_ai]='O'; //if not taken assign O to the chosen square
end_turn=0 ;//end turn
}
}
}
void pc_hard() //computer player moves
{
srand((unsigned)time(NULL)); // to get random numbers
//winning moves
//first row
if (square[1]=='O' && square[2]=='O' && square[3]=='3')
{
square[3]='O';
end_turn=0;
}
else if (square[2]=='O' && square[3]=='O' && square[1]=='1')
{
square[1]='O';
end_turn=0;
}
else if (square[1]=='O' && square[3]=='O' && square[2]=='2')
{
square[2]='O';
end_turn=0;
}
//first column
else if (square[1]=='O' && square[4]=='O' && square[7]=='7')
{
square[7]='O';
end_turn=0;
}
else if (square[1]=='O' && square[7]=='O' && square[4]=='4')
{
square[4]='O';
end_turn=0;
}
else if (square[4]=='O' && square[7]=='O' && square[1]=='1')
{
square[1]='O';
end_turn=0;
}
//second row
else if (square[4]=='O' && square[5]=='O' && square[6]=='6')
{
square[6]='O';
end_turn=0;
}
else if (square[4]=='O' && square[6]=='O' && square[5]=='5')
{
square[5]='O';
end_turn=0;
}
else if (square[5]=='O' && square[6]=='O' && square[4]=='4')
{
square[4]='O';
end_turn=0;
}
//second column
else if (square[2]=='O' && square[5]=='O' && square[8]=='8')
{
square[8]='O';
end_turn=0;
}
else if (square[2]=='O' && square[8]=='O' && square[5]=='5')
{
square[5]='O';
end_turn=0;
}
else if (square[8]=='O' && square[5]=='O' && square[2]=='2')
{
square[2]='O';
end_turn=0;
}
//third column
else if (square[3]=='O' && square[6]=='O' && square[9]=='9')
{
square[9]='O';
end_turn=0;
}
else if (square[3]=='O' && square[9]=='O' && square[6]=='6')
{
square[6]='O';
end_turn=0;
}
else if (square[9]=='O' && square[6]=='O' && square[3]=='3')
{
square[3]='O';
end_turn=0;
}
//third row
else if (square[9]=='O' && square[8]=='O' && square[7]=='7')
{
square[7]='O';
end_turn=0;
}
else if (square[9]=='O' && square[7]=='O' && square[8]=='8')
{
square[8]='O';
end_turn=0;
}
else if (square[8]=='O' && square[7]=='O' && square[9]=='9')
{
square[9]='O';
end_turn=0;
}
//across
else if (square[1]=='O' && square[5]=='O' && square[9]=='9')
{
square[9]='O';
end_turn=0;
}
else if (square[1]=='O' && square[9]=='O' && square[5]=='5')
{
square[5]='O';
end_turn=0;
}
else if (square[5]=='O' && square[9]=='O' && square[1]=='3')
{
square[1]='O';
end_turn=0;
}
//across 2
else if (square[3]=='O' && square[5]=='O' && square[7]=='7')
{
square[7]='O';
end_turn=0;
}
else if (square[3]=='O' && square[7]=='O' && square[5]=='5')
{
square[5]='O';
end_turn=0;
}
else if (square[7]=='O' && square[5]=='O' && square[3]=='3')
{
square[3]='O';
end_turn=0;
}
//defence
//first row
if (square[1]=='X' && square[2]=='X' && square[3]=='3')
{
square[3]='O';
end_turn=0;
}
else if (square[2]=='X' && square[3]=='X' && square[1]=='1')
{
square[1]='O';
end_turn=0;
}
else if (square[1]=='X' && square[3]=='X' && square[2]=='2')
{
square[2]='O';
end_turn=0;
}
//first column
else if (square[1]=='X' && square[4]=='X' && square[7]=='7')
{
square[7]='O';
end_turn=0;
}
else if (square[1]=='X' && square[7]=='X' && square[4]=='4')
{
square[4]='O';
end_turn=0;
}
else if (square[4]=='X' && square[7]=='X' && square[1]=='1')
{
square[1]='O';
end_turn=0;
}
//second row
else if (square[4]=='X' && square[5]=='X' && square[6]=='6')
{
square[6]='O';
end_turn=0;
}
else if (square[4]=='X' && square[6]=='X' && square[5]=='5')
{
square[5]='O';
end_turn=0;
}
else if (square[5]=='X' && square[6]=='X' && square[4]=='4')
{
square[4]='O';
end_turn=0;
}
//second column
else if (square[2]=='X' && square[5]=='X' && square[8]=='8')
{
square[8]='O';
end_turn=0;
}
else if (square[2]=='X' && square[8]=='X' && square[5]=='5')
{
square[5]='O';
end_turn=0;
}
else if (square[8]=='X' && square[5]=='X' && square[2]=='2')
{
square[2]='O';
end_turn=0;
}
//third column
else if (square[3]=='X' && square[6]=='X' && square[9]=='9')
{
square[9]='O';
end_turn=0;
}
else if (square[3]=='X' && square[9]=='X' && square[6]=='6')
{
square[6]='O';
end_turn=0;
}
else if (square[9]=='X' && square[6]=='X' && square[3]=='3')
{
square[3]='O';
end_turn=0;
}
//third row
else if (square[9]=='X' && square[8]=='X' && square[7]=='7')
{
square[7]='O';
end_turn=0;
}
else if (square[9]=='X' && square[7]=='X' && square[8]=='8')
{
square[8]='O';
end_turn=0;
}
else if (square[8]=='X' && square[7]=='X' && square[9]=='9')
{
square[9]='O';
end_turn=0;
}
//across
else if (square[1]=='X' && square[5]=='X' && square[9]=='9')
{
square[9]='O';
end_turn=0;
}
else if (square[1]=='X' && square[9]=='X' && square[5]=='5')
{
square[5]='O';
end_turn=0;
}
else if (square[5]=='X' && square[9]=='X' && square[1]=='3')
{
square[1]='O';
end_turn=0;
}
//across 2
else if (square[3]=='X' && square[5]=='X' && square[7]=='7')
{
square[7]='O';
end_turn=0;
}
else if (square[3]=='X' && square[7]=='X' && square[5]=='5')
{
square[5]='O';
end_turn=0;
}
else if (square[7]=='X' && square[5]=='X' && square[3]=='3')
{
square[3]='O';
end_turn=0;
}
else
{
while (end_turn==1) //loop while the turn ends
{
r=rand();
choice_ai=(r % 9)+1; //random choice of the computer player
if (square[choice_ai]=='X' || square[choice_ai]=='O') //checks if the choice is taken
{
end_turn=1; // if taken choose again
}
else
{
square[choice_ai]='O'; //if not taken assign O to the chosen square
end_turn=0 ;//end turn
}
}
}
}
void board() //drawing the board.
{
system("cls");//clear screen
printf("\n----TIC-TAC-TOE-----------------------------------------------------------------\n");
printf("\nPLAYER : X\nCOMPUTER : O\n\n");
if(level=='1')
printf("DIFFICULTY = EASY\n\n\n");
else if (level=='2')
printf("DIFFICULTY = HARD\n\n\n");
printf(" | | \n");
printf(" %c | %c | %c \n", square[1], square[2], square[3]);
printf("_____|_____|_____\n");
printf(" | | \n");
printf(" %c | %c | %c \n", square[4], square[5], square[6]);
printf("_____|_____|_____\n");
printf(" | | \n");
printf(" %c | %c | %c \n", square[7], square[8], square[9]);
printf(" | | \n\n");
}