summaryrefslogtreecommitdiff
path: root/ttt.c
blob: dd7907f71f513a74f230b1bf81aca31bf440aa29 (plain)
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
108
109
110
111
112
113
114
115
116
117
118
#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 is_full(int boardState[3][3]) {
	//if all squares full, return 1
	//else return 0
	
}
int is_drawn(int boardState[3][3]) {
	//checks if board is full and if no win is on the board
	//returns 1 if so, else 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 clear_screen()
{
    system("@cls||clear");
}
int main() {
	int board[3][3] = { { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } };
	while(1) {
		clear_screen();
		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!");
			printf('\n');
			break;
		}
	}
	return 0;
}