Created
July 3, 2017 09:17
-
-
Save madcoder2k17/f44534d21c89cd1a92209ec6372259f9 to your computer and use it in GitHub Desktop.
It is a compiler version game. The game is tictactoe™
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<stdio.h> | |
#include<conio.h> | |
#include<stdlib.h> | |
#include <windows.h> | |
int board[10] = {2,2,2,2,2,2,2,2,2,2}; | |
int turn = 1,flag = 0; | |
int player,comp; | |
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); | |
turn = 1; | |
switch (choice) | |
{ | |
case 1: | |
player = 1; | |
comp = 0; | |
player_first(); | |
break; | |
case 2: | |
player = 0; | |
comp = 1; | |
start_game(); | |
break; | |
case 3: | |
exit(1); | |
default: | |
menu(); | |
} | |
} | |
int make2() | |
{ | |
if(board[5] == 2) | |
return 5; | |
if(board[2] == 2) | |
return 2; | |
if(board[4] == 2) | |
return 4; | |
if(board[6] == 2) | |
return 6; | |
if(board[8] == 2) | |
return 8; | |
return 0; | |
} | |
int make4() | |
{ | |
if(board[1] == 2) | |
return 1; | |
if(board[3] == 2) | |
return 3; | |
if(board[7] == 2) | |
return 7; | |
if(board[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(board[i] * board[i+1] * board[i+2] == check_val) | |
{ | |
if(board[i] == 2) | |
return i; | |
if(board[i+1] == 2) | |
return i+1; | |
if(board[i+2] == 2) | |
return i+2; | |
} | |
i+=3; | |
} | |
i = 1; | |
while(i<=3)//column check | |
{ | |
if(board[i] * board[i+3] * board[i+6] == check_val) | |
{ | |
if(board[i] == 2) | |
return i; | |
if(board[i+3] == 2) | |
return i+3; | |
if(board[i+6] == 2) | |
return i+6; | |
} | |
i++; | |
} | |
if(board[1] * board[5] * board[9] == check_val) | |
{ | |
if(board[1] == 2) | |
return 1; | |
if(board[5] == 2) | |
return 5; | |
if(board[9] == 2) | |
return 9; | |
} | |
if(board[3] * board[5] * board[7] == check_val) | |
{ | |
if(board[3] == 2) | |
return 3; | |
if(board[5] == 2) | |
return 5; | |
if(board[7] == 2) | |
return 7; | |
} | |
return 0; | |
} | |
void go(int n) | |
{ | |
if(turn % 2) | |
board[n] = 3; | |
else | |
board[n] = 5; | |
turn++; | |
} | |
void player_first() | |
{ | |
int pos; | |
check_draw(); | |
draw_board(); | |
gotoxy(30,18); | |
printf("Your Turn :> "); | |
scanf("%d",&pos); | |
if(board[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(comp)) | |
{ | |
go(posswin(comp)); | |
flag = 1; | |
} | |
else if(posswin(player)) | |
go(posswin(player)); | |
else if(make2()) | |
go(make2()); | |
else | |
go(make4()); | |
draw_board(); | |
if(flag) | |
{ | |
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(board[j] == 3) | |
put_X_O('X',j); | |
else if(board[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); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment