summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ttt.c107
1 files changed, 107 insertions, 0 deletions
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 <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;
+}