0% found this document useful (0 votes)
516 views6 pages

Snake Game in C

This document contains code for a snake game written in C. It defines macros, game data structures, and functions for initializing the game, processing user input, updating game physics, drawing the screen, and running the game engine in a loop. Key functions include initializing the snake's starting position and direction, drawing the snake's body and score on screen, moving the snake's head and tail based on input, checking for collisions, and adding/removing food items.

Uploaded by

mr_thakur
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
516 views6 pages

Snake Game in C

This document contains code for a snake game written in C. It defines macros, game data structures, and functions for initializing the game, processing user input, updating game physics, drawing the screen, and running the game engine in a loop. Key functions include initializing the snake's starting position and direction, drawing the snake's body and score on screen, moving the snake's head and tail based on input, checking for collisions, and adding/removing food items.

Uploaded by

mr_thakur
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 6

#include <graphics.h> #include <stdio.

h> // Macros #define LEFT 1 #define RIGHT 2 #define UP 3 #define DOWN 4 //Game Data int score; //Keeps the count of game score int gamedelay;//Lower the game delay faster is the game speed. struct Snake_Data { int length; int head_x; // Stores Head X Coordinate int head_y; // Stores Head Y Coordinate int head_dir; // Stores Head Direction int tail_x; // Stores Tail X Coordinat int tail_y; // Stores Tail Y Coordinat int tail_dir; // Stores Tail Direction int bend_x [1000]; //Stores X Bend Coordinate Declare it big enough to accomodat e maximum bends int bend_y [1000]; int bend_dir [1000]; // Stores Bend direction when tail reaches that X Coordinat e } Snake; // Declares a variable of the structure // User - Defined functions int randomvalue (int starting, int ending) // Return a random int value between end and starting parameters { static int previous = 0; int answer; if (previous <0) previous = 0; int difference = starting - ending; time_t t; srand((unsigned) time(&t)); for (int i = 0; i <previous;i++) rand (); answer = (rand () % difference); previous++; return answer; } void gamephysics () { static int foodcount = 0;//Keep Count of food int futurex, futurey, futurepixel; int i; char scorestring [100]; if (foodcount < 500) //Adds a food if no food is present and upto maximum 500 fo od { int valid = 0; int foodx; int foody;

while (!valid) { foodx = randomvalue (15,1003); foody = randomvalue (15,695); if (getpixel (foodx,foody)!= 15) { putpixel (foodx,foody,2); foodcount++; valid = 1; } } } //Boundary Collision Check if (Snake.head_x <= 10 Snake.head_x >= 1008 ad_y >= 700) { outtextxy (499,345, "Game Over"); delay (3000); exit (1); } Snake.head_y <= 10 Snake.he

//Get future value of head in int variable futurex and futurey and calculate the logic futurex = Snake.head_x; futurey = Snake.head_y; if (Snake.head_dir == LEFT) { futurex --; } if (Snake.head_dir == RIGHT) { futurex ++; } if (Snake.head_dir == UP) { futurey --; } if (Snake.head_dir == DOWN) { futurey ++; } futurepixel = getpixel(futurex,futurey); if (futurepixel == 2)//Food Eaten { foodcount --; //Reduce count score++; //Increase Score setcolor (0);//Rewrite Score setfillstyle (0,0); bar (11,701,1007, 735); setcolor (4); sprintf (scorestring, "Score : %d", score); outtextxy (20,710, scorestring); //Increase the size of snake by 100 pixel you can put as much as you want if (Snake.tail_dir == UP) {

for (i = 0; i<101;i++) putpixel (Snake.tail_x,Snake.tail_y+i,15); Snake.tail_y +=100; } if (Snake.tail_dir == DOWN) { for (i = 0; i<101;i++) putpixel (Snake.tail_x,Snake.tail_y-i,15); Snake.tail_y -=100; } if (Snake.tail_dir == LEFT) { for (i = 0; i<101;i++) putpixel (Snake.tail_x+i,Snake.tail_y,15); Snake.tail_x +=100; printf ("LEFT"); } if (Snake.tail_dir == RIGHT) { for (i = 0; i<101;i++) putpixel (Snake.tail_x-i,Snake.tail_y,15); Snake.tail_x -=100; printf ("RIGHT"); } } if (futurepixel == 15) { outtextxy (499,345, "Game Over"); delay (3000); exit (1); } }

void userinput () //Process User Input and maps it into game { static int i = 0; if ( i > 1000) i = 0; // Makes the bend array a circular queue static int j = 0; if ( j > 1000) j = 0; char input; if (kbhit ()) { input = getch (); //Change Respective Return value to our MACRO Direction Code Value if (input == 80) input = DOWN; if (input == 72) input = UP; if (input == 75) input = LEFT; if (input == 77) input = RIGHT;

//Change head direction based on logic if (input == LEFT && Snake.head_dir != RIGHT && Snake.head_dir != LEFT)

{ Snake.head_dir = LEFT; Snake.bend_x [i] = Snake.head_x; Snake.bend_y [i] = Snake.head_y; Snake.bend_dir [i] = LEFT; i++; } if (input == RIGHT && Snake.head_dir != LEFT && Snake.head_dir != RIGHT) { Snake.head_dir = RIGHT; Snake.bend_x [i] = Snake.head_x; Snake.bend_y [i] = Snake.head_y; Snake.bend_dir [i] = RIGHT; i++; } if (input == UP && Snake.head_dir != DOWN && Snake.head_dir != UP) { Snake.head_dir = UP; Snake.bend_x [i] = Snake.head_x; Snake.bend_y [i] = Snake.head_y; Snake.bend_dir [i] = UP; i++; } if (input == DOWN && Snake.head_dir != UP && Snake.head_dir != DOWN) { Snake.head_dir = DOWN; Snake.bend_x [i] = Snake.head_x; Snake.bend_y [i] = Snake.head_y; Snake.bend_dir [i] = DOWN; i++; } } //Code to change the y direction at respective time if (Snake.tail_x == Snake.bend_x [j] && Snake.tail_y == Snake.bend_y [j]) { Snake.tail_dir = Snake.bend_dir [j]; j++; } } void movesnake () { //Move the Head if (Snake.head_dir { Snake.head_x --; } if (Snake.head_dir { Snake.head_x ++; } if (Snake.head_dir { Snake.head_y --; } if (Snake.head_dir

== LEFT)

== RIGHT)

== UP)

== DOWN)

{ Snake.head_y ++; } putpixel (Snake.head_x, Snake.head_y,15); //Move the Tail putpixel (Snake.tail_x, Snake.tail_y,0); if (Snake.tail_dir == LEFT) { Snake.tail_x --; } if (Snake.tail_dir == RIGHT) { Snake.tail_x ++; } if (Snake.tail_dir == UP) { Snake.tail_y --; } if (Snake.tail_dir == DOWN) { Snake.tail_y ++; } } void gameengine ()//Soul of our game. { while (1) { movesnake (); userinput (); gamephysics (); delay (5); } } void initscreen ( ) //Draws Intial Screen. { int i; char scorestring [100]; //Draw Boundary setcolor (4); line (10,10,10,700); line (1008,10,1008,700); line (10,700,1008,700); line (10,10,1008,10); //Write Score on scree sprintf (scorestring, "Score : %d", score); outtextxy (20,710, scorestring); //Draw Intial Snake Body for (int i = Snake.length; i>0;i--) //This part should be redesigned for change of code of intial values { putpixel (Snake.head_x-i,Snake.head_y,15); } }

void initgamedata ( ) //Snakes starting coordinate if you modify any one make su re also modify dependent values { int i; Snake.length = 100; Snake.head_x = 200; Snake.head_y = 200; Snake.head_dir = RIGHT; Snake.tail_x = Snake.head_x- Snake.length; Snake.tail_y = Snake.head_y; Snake.tail_dir = Snake.head_dir; for (int i = 0; i <1000;i++) // There is no bend initally { Snake.bend_x[i] = 0; Snake.bend_dir[i] = 0; } score = 0; gamedelay = 1000; // Should be change according to game speed need. } // Main Function int main () { initwindow(1018, 736,"Snake 1.0"); // Create the Snake Window with value is opti mize for mode 1024 * 768 initgamedata (); initscreen (); gameengine (); return 0; }

You might also like