1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
#include <stdio.h>
#include <stdlib.h>
void draw_board(int boardState[3][3]) {
for(int r = 0; r < 3; r++) {
char* line = calloc(3, 1);
for(int c = 0; c < 3; c++) {
if(boardState[c][r] == 0) {
line[c] = '-';
}
else if(boardState[c][r] == 1) {
line[c] = 'x';
}
else if(boardState[c][r] == 2) {
line[c] = 'y';
}
else {
line[c] = 'E';
}
}
printf(line);
printf("\n");
free(line);
}
}
int check_dir(int sx, int sy, int dx, int dy, int boardState[3][3]) {
int sv = boardState[sx][sy];
if(sv != 0) {
for(int i = 0; i < 2; i++) {
sx += dx;
sy += dy;
if(boardState[sx][sy] != sv) {
return 0;
}
}
return sv;
}
return 0;
}
//return 0 if no win, 1 if x win, 2 if o win
int check_win(int boardState[3][3]) {
if(boardState[1][1] != 0) {
int c = check_dir(1, 0, 0, 1, boardState);
if(c != 0) {
return c;
}
c = check_dir(0, 0, 1, 1, boardState);
if(c != 0) {
return c;
}
c = check_dir(0, 1, 1, 0, boardState);
if(c != 0) {
return c;
}
c = check_dir(0, 2, 1, -1, boardState);
if(c != 0) {
return c;
}
}
if(boardState[0][0] != 0) {
int c = check_dir(0, 0, 1, 0, boardState);
if(c != 0) {
return c;
}
c = check_dir(0, 0, 0, 1, boardState);
if(c != 0) {
return c;
}
}
if(boardState[2][2] != 0) {
int c = check_dir(2, 2, -1, 0, boardState);
if(c != 0) {
return c;
}
c = check_dir(2, 2, 0, -1, boardState);
if(c != 0) {
return c;
}
}
return 0;
}
int* user_input_pos() {
int* ip = malloc(2 * sizeof(int));
printf("Enter X coordinate");
scanf("%d", &ip[0]);
printf("Enter Y coordinate");
scanf("%d", &ip[1]);
return ip;
}
void clr_scr()
{
system("@cls||clear");
}
int main() {
int board[3][3] = { { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } };
while(1) {
clr_scr();
draw_board(board);
int* tl = user_input_pos();
board[tl[0] - 1][3 - tl[1]] = 1;
free(tl);
if(check_win(board) != 0) {
printf("Someone won!");
break;
}
}
return 0;
}
|