Skip to content
Snippets Groups Projects
Select Git revision
1 result Searching

CMakeLists.txt

Blame
  • snake.c 1.10 KiB
    #include "snake.h"
    
    // center position
    void InitSnake(Snake *snake) {
        snake->length = 1;
        snake->segments[0].x = (SCREEN_WIDTH / CELL_SIZE) / 2;
        snake->segments[0].y = (SCREEN_HEIGHT / CELL_SIZE) / 2;
        snake->direction.x = 1; 
        snake->direction.y = 0;
    }
    
    // direction
    void UpdateSnake(Snake *snake) {
        // Move body segments behind head so the snake is in one piece 
        for (int i = snake->length - 1; i > 0; i--) {
            snake->segments[i] = snake->segments[i - 1];
        }
        
        // current direction
        snake->segments[0].x += snake->direction.x;
        snake->segments[0].y += snake->direction.y;
    }
    
    // collision
    bool CheckCollision(Snake *snake) {
        // Wall 
        if (snake->segments[0].x < 0 || 
            snake->segments[0].x >= SCREEN_WIDTH / CELL_SIZE ||
            snake->segments[0].y < 0 || 
            snake->segments[0].y >= SCREEN_HEIGHT / CELL_SIZE)
            return true;
    
        // Self 
        for (int i = 1; i < snake->length; i++) {
            if (snake->segments[i].x == snake->segments[0].x &&
                snake->segments[i].y == snake->segments[0].y)
                return true;
        }
        return false;
    }