From 1d93b6696cbcf268d0e035e3837a3188f001e3bc Mon Sep 17 00:00:00 2001 From: Kai Stevenson Date: Mon, 21 Nov 2022 11:23:46 -0800 Subject: init --- ttt.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 ttt.c diff --git a/ttt.c b/ttt.c new file mode 100644 index 0000000..3701d9a --- /dev/null +++ b/ttt.c @@ -0,0 +1,107 @@ +#include +#include +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; +} -- cgit v1.3.1