Parcourir la source

added commandline arguments and deleted target

Aaro Saila il y a 1 an
Parent
commit
8b8160dcd7
6 fichiers modifiés avec 107 ajouts et 73 suppressions
  1. 1 1
      .gitignore
  2. 84 0
      src/args.c
  3. 12 0
      src/headers/args.h
  4. 10 70
      src/main.c
  5. 0 2
      src/term.c
  6. BIN
      target/sanke

+ 1 - 1
.gitignore

@@ -1,2 +1,2 @@
 .clangd
-target/
+target

+ 84 - 0
src/args.c

@@ -0,0 +1,84 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "args.h"
+
+extern char* version;
+
+static void handle_version() {
+  printf("Sanke version %s\n", version);
+  exit(0);
+}
+
+static void set_width(Arguments* args, char* width_str) {
+  printf("width_str: %s\n", width_str);
+  int width = atoi(width_str);
+  if (width < 10) {
+    printf("Width must be between 10 and 50. Was %d.\n", width);
+    exit(0);
+  }
+
+  args->width = width;
+}
+
+static void set_height(Arguments* args, char* height_str) {
+  int height = atoi(height_str);
+  if (height < 10) {
+    printf("Width must be between 10 and 50. Was %d.\n", height);
+    exit(0);
+  }
+
+  args->height = height;
+}
+
+static void set_speed(Arguments* args, char* speed_str) {
+  int squares_per_second = atoi(speed_str);
+  if (squares_per_second < 1 || squares_per_second > 1000) {
+    printf("Speed must be between 1 and 1000. Was %d.\n", squares_per_second);
+    exit(0);
+  }
+
+  args->sleep_ms = 1000 / squares_per_second;
+}
+
+Arguments cmd_args(int argc, char** argv) {
+  Arguments args = {
+    .width = 15,
+    .height = 15,
+    .sleep_ms = 150
+  };
+
+  for (int i = 1; i < argc; i++) {
+    if (
+        strcmp(argv[i], "--version") == 0
+        || strcmp(argv[i], "-v") == 0
+        )
+    {
+      handle_version();
+
+    } else if (
+        strcmp(argv[i], "--width") == 0
+        || strcmp(argv[i], "-w") == 0
+        )
+    {
+      set_width(&args, argv[i + 1]);
+
+    } else if (
+        strcmp(argv[i], "--height") == 0
+        || strcmp(argv[i], "-h") == 0
+        )
+    {
+      set_height(&args, argv[i + 1]);
+
+    } else if (
+        strcmp(argv[i], "--speed") == 0
+        || strcmp(argv[i], "-s") == 0
+        )
+    {
+      set_speed(&args, argv[i + 1]);
+    }
+  }
+
+  return args;
+}

+ 12 - 0
src/headers/args.h

@@ -0,0 +1,12 @@
+#ifndef ARGS_H_
+#define ARGS_H_
+
+typedef struct {
+  int width;
+  int height;
+  int sleep_ms;
+} Arguments;
+
+Arguments cmd_args(int argc, char** argv);
+
+#endif // ARGS_H_

+ 10 - 70
src/main.c

@@ -3,7 +3,6 @@
 #include <termios.h>
 #include <stdlib.h>
 #include <ctype.h>
-#include <string.h>
 #include <time.h>
 
 #include "Board.h"
@@ -11,21 +10,19 @@
 #include "utils.h"
 #include "food.h"
 #include "BoardPiece.h"
+#include "args.h"
 
 #define TERMIOS 1
 #define DEBUG 0
 
-const char* VERSION = "1.1.9";
+const char* version = "1.1.9";
 
 const char snake_vis = '#';
 
-void cmd_args(int argc, char** argv);
-void empty_stdin_buffer();
-void get_int_or_minus_one(int* dst);
 struct termios set_termios();
 
 int main(int argc, char** argv) {
-  cmd_args(argc, argv);
+  Arguments args = cmd_args(argc, argv);
 
   srand(time(NULL));
 
@@ -35,8 +32,8 @@ int main(int argc, char** argv) {
 #endif // TERMIOS
 
   // Game model init
-  const int board_w = 15;
-  const int board_h = 15;
+  const int board_w = args.width;
+  const int board_h = args.height;
   Board board = board_alloc(board_w, board_h);
   Snake snake = snake_alloc(board_w * board_h, 0, 0, 'd');
   BoardPiece food = { .vis_char = '$' };
@@ -46,24 +43,11 @@ int main(int argc, char** argv) {
   // Screen init
   system("clear");
 
-  int frame = 0;
-  int fps = 0;
-
-  long second_start = time(NULL);
-  int frame_stamp = frame;
+#if DEBUG
+  long long frame = 0;
+#endif // DEBUG
 
   while (true) {
-    long second_check = time(NULL);
-    long elapsed_time = second_check - second_start;
-    if (elapsed_time >= 1) {
-      fps = frame - frame_stamp;
-      if (elapsed_time > 1) {
-        fps /= 2;
-      }
-      frame_stamp = frame;
-      second_start = time(NULL);
-    }
-
     system("clear");
 
     // Process input
@@ -85,7 +69,6 @@ int main(int argc, char** argv) {
     board_clear(&board);
     board_draw_snake(&board, &snake);
     board_set_square(&board, food.x, food.y, food.vis_char);
-    printf("FPS: %d\n", fps);
     print_board(&board);
     printf("Score: %d\n", score);
 
@@ -93,7 +76,6 @@ int main(int argc, char** argv) {
 
     if (snake_collides_with_tail(&snake)) {
       printf("GAME OVER\n");
-      printf("Final score: %d\n", score);
       exit(EXIT_SUCCESS);
     }
 
@@ -108,10 +90,10 @@ int main(int argc, char** argv) {
     printf("Frame: %d\n", frame);
     snake_print_info(&snake);
     board_piece_print_info(&food, "Food");
+    frame++;
 #endif // DEBUG
 
-    frame++;
-    sleep_ms(150);
+    sleep_ms(args.sleep_ms);
   }
 
 #if TERMIOS
@@ -121,48 +103,6 @@ int main(int argc, char** argv) {
   return 0;
 }
 
-void cmd_args(int argc, char** argv) {
-  if (argc == 1) {
-    return;
-  }
-
-  if (
-      strcmp(argv[1], "--version") == 0
-      || strcmp(argv[1], "-v") == 0
-      )
-  {
-    printf("Sanke version %s\n", VERSION);
-    exit(0);
-  }
-}
-
-void empty_stdin_buffer() {
-  char ch;
-  while ((ch = getchar()) != '\n');
-}
-
-void get_int_or_minus_one(int* dst) {
-  char iBuf[100];
-  char num[100];
-  size_t i = 0;
-
-  fgets(iBuf, 100, stdin);
-
-  while (!isdigit(iBuf[i])) {
-    if (iBuf[i] == '\0') {
-      *dst = -1;
-      return;
-    }
-    i++;
-  }
-
-  for (int j = 0; i < strlen(iBuf); i++, j++) {
-    num[j] = iBuf[i];
-  }
-
-  *dst = atoi(num);
-}
-
 struct termios set_termios() {
   struct termios attr;
 

+ 0 - 2
src/term.c

@@ -1,2 +0,0 @@
-#include <termios.h>
-

BIN
target/sanke