Skip to content

Tick tack toe #36

Description

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include <windows.h>

int b[10] = {2,2,2,2,2,2,2,2,2,2};
int t = 1,f = 0;
int p,c;

void menu();
void go(int n);
void start_game();
void check_draw();
void draw_board();
void player_first();
void put_X_O(char ch,int pos);
COORD coord= {0,0}; // this is global variable
//center of axis is set to the top left cornor of the screen
void gotoxy(int x,int y)
{
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

void main()
{
system("cls");
menu();
getch();

}

void menu()
{
int choice;
system("cls");
printf("\n--------MENU--------");
printf("\n1 : Play with X");
printf("\n2 : Play with O");
printf("\n3 : Exit");
printf("\nEnter your choice:>");
scanf("%d",&choice);
t = 1;
switch (choice)
{
case 1:
p = 1;
c = 0;
player_first();
break;
case 2:
p = 0;
c = 1;
start_game();
break;
case 3:
exit(1);
default:
menu();
}
}

int make2()
{
if(b[5] == 2)
return 5;
if(b[2] == 2)
return 2;
if(b[4] == 2)
return 4;
if(b[6] == 2)
return 6;
if(b[8] == 2)
return 8;
return 0;
}

int make4()
{
if(b[1] == 2)
return 1;
if(b[3] == 2)
return 3;
if(b[7] == 2)
return 7;
if(b[9] == 2)
return 9;
return 0;
}

int posswin(int p)
{
// p==1 then X p==0 then O
int i;
int check_val,pos;

if(p == 1)
    check_val = 18;
else
    check_val = 50;

i = 1;
while(i<=9)//row check
{
    if(b[i] * b[i+1] * b[i+2] == check_val)
    {
        if(b[i] == 2)
            return i;
        if(b[i+1] == 2)
            return i+1;
        if(b[i+2] == 2)
            return i+2;
    }
    i+=3;
}

i = 1;
while(i<=3)//column check
{
    if(b[i] * b[i+3] * b[i+6] == check_val)
    {
        if(b[i] == 2)
            return i;
        if(b[i+3] == 2)
            return i+3;
        if(b[i+6] == 2)
            return i+6;
    }
    i++;
}

if(b[1] * b[5] * b[9] == check_val)
{
    if(b[1] == 2)
        return 1;
    if(b[5] == 2)
        return 5;
    if(b[9] == 2)
        return 9;
}

if(b[3] * b[5] * b[7] == check_val)
{
    if(b[3] == 2)
        return 3;
    if(b[5] == 2)
        return 5;
    if(b[7] == 2)
        return 7;
}
return 0;

}

void go(int n)
{
if(t % 2)
b[n] = 3;
else
b[n] = 5;
turn++;
}

void player_first()
{
int pos;

check_draw();
draw_board();
gotoxy(30,18);
printf("Your Turn :> ");
scanf("%d",&pos);

if(b[pos] != 2)
    player_first();

if(pos == posswin(player))
{
    go(pos);
    draw_board();
    gotoxy(30,20);
    //textcolor(128+RED);
    printf("Player Wins");
    getch();
    exit(0);
}

go(pos);
draw_board();
start_game();

}

void start_game()
{
// p==1 then X p==0 then O
if(posswin(c))
{
go(posswin(c));
f = 1;
}
else if(posswin(p))
go(posswin(p));
else if(make2())
go(make2());
else
go(make4());
draw_board();

if(f)
{
    gotoxy(30,20);
    //textcolor(128+RED);
    printf("Computer wins");
    getch();
}
else
    player_first();

}

void check_draw()
{
if(turn > 9)
{
gotoxy(30,20);
//textcolor(128+RED);
printf("Game Draw");
getch();
exit(0);
}
}

void draw_board()
{
int j;

for(j=9; j<17; j++)
{
    gotoxy(35,j);
    printf("|       |");
}
gotoxy(28,11);
printf("-----------------------");
gotoxy(28,14);
printf("-----------------------");

for(j=1; j<10; j++)
{
    if(b[j] == 3)
        put_X_O('X',j);
    else if(b[j] == 5)
        put_X_O('O',j);
}

}

void put_X_O(char ch,int pos)
{
int m;
int x = 31, y = 10;

m = pos;

if(m > 3)
{
    while(m > 3)
    {
        y += 3;
        m -= 3;
    }
}
if(pos % 3 == 0)
    x += 16;
else
{
    pos %= 3;
    pos--;
    while(pos)
    {
        x+=8;
        pos--;
    }
}
gotoxy(x,y);
printf("%c",ch);

}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions