#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 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; }