From ad5b8beb99aa0bc06feb7e68087a499fbb209525 Mon Sep 17 00:00:00 2001 From: Aaro Saila Date: Wed, 10 Sep 2025 22:08:34 +0300 Subject: [PATCH] working reworked game --- .gitignore | 2 +- compile.sh | 31 +++-- src/{board.c => Board.c} | 10 +- src/BoardPiece.c | 15 +++ src/Snake.c | 210 +++++++++++++++++++++++++++++++ src/food.c | 13 ++ src/headers/{board.h => Board.h} | 2 +- src/headers/BoardPiece.h | 13 ++ src/headers/Snake.h | 29 +++++ src/headers/food.h | 10 ++ src/headers/snake.h | 29 ----- src/main.c | 96 +++++++++++--- src/snake.c | 83 ------------ src/utils.c | 17 ++- target/sanke | Bin 30696 -> 47424 bytes 15 files changed, 416 insertions(+), 144 deletions(-) rename src/{board.c => Board.c} (94%) create mode 100644 src/BoardPiece.c create mode 100644 src/Snake.c create mode 100644 src/food.c rename src/headers/{board.h => Board.h} (96%) create mode 100644 src/headers/BoardPiece.h create mode 100644 src/headers/Snake.h create mode 100644 src/headers/food.h delete mode 100644 src/headers/snake.h delete mode 100644 src/snake.c diff --git a/.gitignore b/.gitignore index 0b8cb6c..5c030b8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -build/ .clangd +target/ diff --git a/compile.sh b/compile.sh index f15cf5d..1067797 100755 --- a/compile.sh +++ b/compile.sh @@ -1,7 +1,26 @@ #!/bin/sh +arg=-1 + +if [ -v 1 ]; then + arg=$1 +fi + +if [ $arg = "clean" ]; then + rm -rf ./target/* + exit +fi + +oflag="-Og" +debug_flag="-ggdb" + +if [ $arg = "release" ]; then + oflag="-O3" + debug_flag="" +fi + src="src/*.c" -flags="-std=c23 -ggdb -Og -Wall -Wextra -Werror -Wpedantic -pedantic-errors" +flags="-std=c23 $oflag $debug_flag -Wall -Wextra -Werror -Wpedantic -pedantic-errors" includes="-I src/headers" cmd="gcc $flags $includes $src -o target/sanke" @@ -9,14 +28,12 @@ cmd="gcc $flags $includes $src -o target/sanke" echo $cmd $cmd + if [ $? -gt 0 ]; then exit fi -echo - -if [ -v 1 ]; then - if [ $1 = "run" ]; then - ./target/sanke - fi +if [ $arg = "run" ]; then + echo + ./target/sanke fi diff --git a/src/board.c b/src/Board.c similarity index 94% rename from src/board.c rename to src/Board.c index 074961b..4b0733d 100644 --- a/src/board.c +++ b/src/Board.c @@ -2,8 +2,8 @@ #include #include -#include "board.h" -#include "snake.h" +#include "Board.h" +#include "Snake.h" #define MAT_INDEX(mat, w, i, j) (mat)[(j) + (w) * (i)] @@ -73,17 +73,17 @@ void board_set_square( void board_clear(Board* board) { for (size_t i = 0; i < board->height; i++) { for (size_t j = 0; j < board->width; j++) { - printf("Clearing board: i: %zu j: %zu\n", i, j); + // printf("Clearing board: i: %zu j: %zu\n", i, j); board_set_square(board, j, i, ' '); } } } void board_draw_snake(Board* board, Snake* snake) { - SnakePart part = {}; + BoardPiece part = {}; for (size_t i = 0; i < snake->length; i++) { part = snake_get_part(snake, i); - board_set_square(board, part.y, part.x, part.vis_char); + board_set_square(board, part.x, part.y, part.vis_char); } } diff --git a/src/BoardPiece.c b/src/BoardPiece.c new file mode 100644 index 0000000..7f19070 --- /dev/null +++ b/src/BoardPiece.c @@ -0,0 +1,15 @@ +#include + +#include "BoardPiece.h" + +void board_piece_print_info(BoardPiece* piece, char* name) { + printf("%s: {\n", name); + printf(" x: %d\n", piece->x); + printf(" y: %d\n", piece->y); + printf(" vis_char: %c\n", piece->vis_char); + printf("}\n"); +} + +bool pieces_collide(BoardPiece* piece1, BoardPiece* piece2) { + return piece1->x == piece2->x && piece1->y == piece2->y; +} diff --git a/src/Snake.c b/src/Snake.c new file mode 100644 index 0000000..2f4d442 --- /dev/null +++ b/src/Snake.c @@ -0,0 +1,210 @@ +#include +#include +#include + +#include "Snake.h" + +extern const char snake_vis; + +static BoardPiece* snake_get_part_ptr(const Snake* snake, const size_t index) { + if (index >= snake->max_length) { + return NULL; + } + + return snake->parts + index; +} + +BoardPiece snake_get_part(const Snake* snake, const size_t index) { + assert(index < snake->max_length); + return snake->parts[index]; +} + +Snake snake_alloc( + const int board_square_count, + const int init_x, + const int init_y, + const char init_dir + ) +{ + Snake snake = {0}; + snake.max_length = board_square_count; + snake.length = 1; + snake.dir = init_dir; + snake.parts = (BoardPiece*) malloc(sizeof(BoardPiece) * snake.max_length); + snake.parts[0] = (BoardPiece) { .x = init_x, .y = init_y, .vis_char = '&' }; + + return snake; +} + +void snake_free(Snake* snake) { + free(snake->parts); +} + +static void check_bounds(Snake* snake, const int width, const int height) { + for (size_t i = 0;i < snake->length; i++) { + BoardPiece* part = snake->parts + i; + if (part->x < 0) { + part->x = width - 2; + } else if (part->x >= width) { + part->x = 0; + } + + if (part->y < 0) { + part->y = height - 1; + } else if (part->y >= height) { + part->y = 0; + } + } +} + +void snake_move(Snake* snake, const int width, const int height) { + BoardPiece* first_part = snake_get_part_ptr(snake, 0); + int first_part_old_x = first_part->x; + int first_part_old_y = first_part->y; + + // Move first part + switch (snake->dir) { + case 'w': + first_part->y -= 1; + break; + case 'a': + first_part->x -= 2; + break; + case 's': + first_part->y += 1; + break; + case 'd': + first_part->x += 2; + break; + default: + fprintf(stderr, "ERROR: Invalid direction in snake_move: %c.\n", snake->dir); + exit(EXIT_FAILURE); + } + + // Stop here if there is only one part + BoardPiece* last_part = snake_get_part_ptr(snake, snake->length - 1); + if (last_part == first_part) { + check_bounds(snake, width, height); + return; + } + + // Move all other parts except for the second one, gets skipped if there are only 2 parts + BoardPiece* second_part = first_part + 1; + BoardPiece* prev_part = 0; + for (BoardPiece* part = last_part; part != second_part; part--) { + prev_part = part - 1; + part->x = prev_part->x; + part->y = prev_part->y; + } + + // Move second part + second_part->x = first_part_old_x; + second_part->y = first_part_old_y; + + check_bounds(snake, width, height); +} + +void snake_print_info(Snake* snake) { + printf("snake: {\n"); + printf(" parts: {\n"); + for (size_t i = 0; i < snake->length; i++) { + BoardPiece part = snake->parts[i]; + printf(" x: %d\n", part.x); + printf(" y: %d\n", part.y); + } + printf(" }\n"); + + printf(" max_length: %zu\n", snake->max_length); + printf(" length: %zu\n", snake->length); + printf(" dir: %c\n", snake->dir); + printf("}\n"); +} + +void snake_change_direction(Snake* snake, const char direction) { + snake->dir = direction; +} + +bool snake_collides(const Snake* snake, const BoardPiece* piece) { + for (size_t i = 0; i < snake->length; i++) { + BoardPiece part = snake->parts[i]; + if (part.x == piece->x && part.y == piece->y) { + return true; + } + } + + return false; +} + +bool snake_collides_with_tail(const Snake* snake) { + const BoardPiece* head = snake->parts; + for (size_t i = 1; i < snake->length; i++) { + BoardPiece part = snake->parts[i]; + if (part.x == head->x && part.y == head->y) { + return true; + } + } + + return false; +} + +void snake_add_part(Snake* snake) { + if (snake->length == snake->max_length) { + fprintf(stderr, "ERROR: Cannot add another part to snake. Would exceed max_length.\n"); + exit(EXIT_FAILURE); + } + + int x_shift; + int y_shift; + BoardPiece last_part; + char prev_part_dir; + + if (snake->length == 1) { + last_part = snake_get_part(snake, 0); + prev_part_dir = snake->dir; + } else { + last_part = snake_get_part(snake, snake->length - 1); + const BoardPiece second_to_last_part = snake_get_part(snake, snake->length - 2); + + if (second_to_last_part.y < last_part.y && second_to_last_part.x == last_part.x) { + prev_part_dir = 'w'; + } else if (second_to_last_part.x < last_part.x && second_to_last_part.y == last_part.y) { + prev_part_dir = 'a'; + } else if (second_to_last_part.y > last_part.y && second_to_last_part.x == last_part.x) { + prev_part_dir = 's'; + } else if (second_to_last_part.x > last_part.x && second_to_last_part.y == last_part.y) { + prev_part_dir = 'd'; + } else { + fprintf(stderr, "%s:%d: ERROR: Invalid direction.\n", __FILE__, __LINE__); + exit(EXIT_FAILURE); + } + } + + switch (prev_part_dir) { + case 'w': + x_shift = 0; + y_shift = 1; + break; + case 'a': + x_shift = 1; + y_shift = 0; + break; + case 's': + x_shift = 0; + y_shift = -1; + break; + case 'd': + x_shift = -1; + y_shift = 0; + break; + default: + fprintf(stderr, "%s:%d: ERROR: Invalid direction.\n", __FILE__, __LINE__); + exit(EXIT_FAILURE); + } + + snake->parts[snake->length] = (BoardPiece){ + .x = last_part.x + x_shift, + .y = last_part.y + y_shift, + .vis_char = snake_vis + }; + snake->length++; +} diff --git a/src/food.c b/src/food.c new file mode 100644 index 0000000..3fd8d7e --- /dev/null +++ b/src/food.c @@ -0,0 +1,13 @@ +#include + +#include "food.h" +#include "Board.h" +#include "BoardPiece.h" +#include "Snake.h" + +void food_new_location(Board* board, BoardPiece* food, Snake* snake) { + do { + food->x = rand() % board->width; + food->y = rand() % board->height; + } while (food->x % 2 != 0 || snake_collides(snake, food)); +} diff --git a/src/headers/board.h b/src/headers/Board.h similarity index 96% rename from src/headers/board.h rename to src/headers/Board.h index 9686d57..e08bb03 100644 --- a/src/headers/board.h +++ b/src/headers/Board.h @@ -1,7 +1,7 @@ #ifndef BOARD_H_ #define BOARD_H_ -#include "snake.h" +#include "Snake.h" typedef struct { size_t width; diff --git a/src/headers/BoardPiece.h b/src/headers/BoardPiece.h new file mode 100644 index 0000000..bae71bf --- /dev/null +++ b/src/headers/BoardPiece.h @@ -0,0 +1,13 @@ +#ifndef BOARD_PIECE_H_ +#define BOARD_PIECE_H_ + +typedef struct { + int x; + int y; + char vis_char; +} BoardPiece; + +void board_piece_print_info(BoardPiece* piece, char* name); +bool pieces_collide(BoardPiece* piece1, BoardPiece* piece2); + +#endif // BOARD_PIECE_H_ diff --git a/src/headers/Snake.h b/src/headers/Snake.h new file mode 100644 index 0000000..1e076ae --- /dev/null +++ b/src/headers/Snake.h @@ -0,0 +1,29 @@ +#ifndef SNAKE_H_ +#define SNAKE_H_ + +#include +#include "BoardPiece.h" + +typedef struct { + BoardPiece* parts; + size_t max_length; + size_t length; + char dir; +} Snake; + +BoardPiece snake_get_part(const Snake* snake, const size_t index); +Snake snake_alloc( + const int board_square_count, + const int init_x, + const int init_y, + const char init_dir + ); +void snake_free(Snake* snake); +void snake_move(Snake* snake, const int width, const int height); +void snake_print_info(Snake* snake); +void snake_change_direction(Snake* snake, const char direction); +bool snake_collides(const Snake* snake, const BoardPiece* piece); +bool snake_collides_with_tail(const Snake* snake); +void snake_add_part(Snake* snake); + +#endif // SNAKE_H_ diff --git a/src/headers/food.h b/src/headers/food.h new file mode 100644 index 0000000..0a1c839 --- /dev/null +++ b/src/headers/food.h @@ -0,0 +1,10 @@ +#ifndef FOOD_H_ +#define FOOD_H_ + +#include "BoardPiece.h" +#include "Board.h" +#include "Snake.h" + +void food_new_location(Board* board, BoardPiece* food, Snake* snake); + +#endif // FOOD_H_ diff --git a/src/headers/snake.h b/src/headers/snake.h deleted file mode 100644 index ada466c..0000000 --- a/src/headers/snake.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef SNAKE_H_ -#define SNAKE_H_ - -#include - -typedef struct { - int x; - int y; - char vis_char; -} SnakePart; - -typedef struct { - SnakePart* parts; - size_t max_length; - size_t length; - char dir; -} Snake; - -SnakePart snake_get_part(const Snake* snake, const size_t index); -Snake snake_alloc( - const int board_square_count, - const int init_x, - const int init_y, - const char init_dir - ); -void snake_free(Snake* snake); -void snake_move(Snake* snake); - -#endif // SNAKE_H_ diff --git a/src/main.c b/src/main.c index b05530d..18a78c2 100644 --- a/src/main.c +++ b/src/main.c @@ -6,55 +6,117 @@ #include #include -#include "board.h" -#include "snake.h" +#include "Board.h" +#include "Snake.h" #include "utils.h" +#include "food.h" +#include "BoardPiece.h" + +#define TERMIOS 1 +#define DEBUG 0 const char* VERSION = "1.1.9"; -const char SNAKE_VIS = '#'; +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() { - // cmd_args(argc, argv); - - // const clock_t initClock = clock(); - - // Set gamespeed - // int gameSpeed = 0; - // printf("Enter gamespeed (default: 0, max: 180): "); - // getIntOrMinusOne(&gameSpeed); - // if (gameSpeed == -1 || gameSpeed > 180) { - // gameSpeed = 0; - // } +int main(int argc, char** argv) { + cmd_args(argc, argv); + srand(time(NULL)); // Termios setup +#if TERMIOS const struct termios attr_orig = set_termios(); +#endif // TERMIOS // Game model init const int board_w = 15; const int board_h = 15; Board board = board_alloc(board_w, board_h); Snake snake = snake_alloc(board_w * board_h, 0, 0, 'd'); + BoardPiece food = { .vis_char = '$' }; + food_new_location(&board, &food, &snake); + unsigned int score = 0; // Screen init system("clear"); + int frame = 0; + int fps = 0; + + long second_start = time(NULL); + int frame_stamp = frame; + 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"); - snake_move(&snake); + + // Process input + char input = '0'; + read(STDIN_FILENO, &input, 1); + + if (isalpha(input)) { + if ( + (input == 'w' && snake.dir != 's') + || (input == 'a' && snake.dir != 'd') + || (input == 's' && snake.dir != 'w') + || (input == 'd' && snake.dir != 'a') + ) { + snake_change_direction(&snake, input); + } + } + + snake_move(&snake, board.width, board.height); 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); - sleep_ms(1000); + printf("Score: %d\n", score); + + BoardPiece snake_head = snake_get_part(&snake, 0); + + if (snake_collides_with_tail(&snake)) { + printf("GAME OVER\n"); + printf("Final score: %d\n", score); + exit(EXIT_SUCCESS); + } + + if (pieces_collide(&snake_head, &food)) { + score++; + snake_add_part(&snake); + food_new_location(&board, &food, &snake); + } + +#if DEBUG + printf("input: %c\n", input); + printf("Frame: %d\n", frame); + snake_print_info(&snake); + board_piece_print_info(&food, "Food"); +#endif // DEBUG + + frame++; + sleep_ms(150); } +#if TERMIOS tcsetattr(STDIN_FILENO, 0, &attr_orig); +#endif // TERMIOS return 0; } diff --git a/src/snake.c b/src/snake.c deleted file mode 100644 index 0325fd7..0000000 --- a/src/snake.c +++ /dev/null @@ -1,83 +0,0 @@ -#include -#include -#include - -#include "snake.h" - -static SnakePart* snake_get_part_ptr(const Snake* snake, const size_t index) { - if (index >= snake->max_length) { - return NULL; - } - - return snake->parts + index; -} - -SnakePart snake_get_part(const Snake* snake, const size_t index) { - assert(index < snake->max_length); - return snake->parts[index]; -} - -Snake snake_alloc( - const int board_square_count, - const int init_x, - const int init_y, - const char init_dir - ) -{ - Snake snake = {0}; - snake.max_length = board_square_count; - snake.length = 1; - snake.dir = init_dir; - snake.parts = (SnakePart*) malloc(sizeof(SnakePart) * snake.max_length); - snake.parts[0] = (SnakePart) { .x = init_x, .y = init_y, .vis_char = '&' }; - - return snake; -} - -void snake_free(Snake* snake) { - free(snake->parts); -} - -void snake_move(Snake* snake) { - SnakePart* first_part = snake_get_part_ptr(snake, 0); - int first_part_old_x = first_part->x; - int first_part_old_y = first_part->y; - - // Move first part - switch (snake->dir) { - case 'w': - first_part->y -= 1; - break; - case 'a': - first_part->x -= 1; - break; - case 's': - first_part->y += 1; - break; - case 'd': - first_part->x += 1; - break; - default: - fprintf(stderr, "ERROR: Invalid direction in snake_move: %c.\n", snake->dir); - exit(EXIT_FAILURE); - } - - // Stop here if there is only one part - SnakePart* last_part = snake_get_part_ptr(snake, snake->length - 1); - if (last_part == first_part) { - return; - } - - // Move all other parts except for the second one, gets skipped if there are only 2 parts - SnakePart* second_part = first_part + 1; - SnakePart* prev_part = 0; - for (SnakePart* part = last_part; part != second_part; part--) { - prev_part = part - 1; - part->x = prev_part->x; - part->y = prev_part->y; - } - - // Move second part - second_part->x = first_part_old_x; - second_part->y = first_part_old_y; -} diff --git a/src/utils.c b/src/utils.c index 61885fa..1edcab1 100644 --- a/src/utils.c +++ b/src/utils.c @@ -3,6 +3,7 @@ #include #include #include +#include #include "utils.h" @@ -23,5 +24,19 @@ void mallocError(const char* varName, const char* fileName, const char* function } void sleep_ms(const unsigned int ms) { - nanosleep(&(struct timespec){ .tv_sec = 0, .tv_nsec = ms * 1000000}, NULL); + struct timespec ts = { + .tv_sec = ms / 1000 + }; + if (ts.tv_sec == 0) { + ts.tv_nsec = ms * 1000000; + } else { + ts.tv_nsec = (ms - ts.tv_sec * 1000) * 1000000; + } + // printf("timespec: {\n"); + // printf(" tv_sec : %ld\n", ts.tv_sec); + // printf(" tv_nsec: %ld\n", ts.tv_nsec); + // printf("}\n"); + if (nanosleep(&ts, NULL) == -1) { + fprintf(stderr, "ERROR: Failed to sleep. ERRNO: %d\n", errno); + } } diff --git a/target/sanke b/target/sanke index 1a4da79562d09bdda4b09350205143125c2c2df5..edb90dbdf4a06c97c7ded9933374c687f14ec01c 100755 GIT binary patch literal 47424 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 b4SF5omgVYSfP$X*Z+%d4d?SY;2NeGg*0u9l literal 30696 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