Skip to content
Snippets Groups Projects
Select Git revision
  • 92ab12277081a102d3cdd5303d565aee8a0962ca
  • master default protected
  • 0.19.X
  • discrete
  • 0.18.X
  • ignore_lambda_to_diff_errors
  • 0.17.X
  • authors-update
  • 0.16.X
  • 0.15.X
  • 0.14.X
  • debian
  • 0.13.X
  • 0.12.X
  • 0.11.X
  • 0.10.X
  • 0.9.X
  • 0.6.X
  • 0.7.X
  • 0.8.X
  • 0.19.1
  • 0.19.0
  • 0.19b2
  • 0.19b1
  • 0.19-branching
  • 0.18.2
  • 0.18.1
  • 0.18
  • 0.18rc2
  • 0.18rc1
  • 0.18rc
  • 0.17.1-1
  • 0.17.1
  • debian/0.17.0-4
  • debian/0.17.0-3
  • debian/0.17.0-1
  • 0.17
  • debian/0.17.0_b1+git14-g4e6829c-1
  • debian/0.17.0_b1-1
  • 0.17b1
40 results

index.rst

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