Skip to content

Tick tack toe #36

Open
Open
@ghost

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);

}

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