Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

#include<gl/glut.

h>

#include<stdlib.h>

#define rows 40

#define cols 40

#define up 1

#define down -1

#define left -2

#define right 2

int snake_length=5;

int snake_direction=right;

int posx[60]={20 ,19,18,17,16};

bool gameover=false;

int score=0;

bool food=true;

int foodx,foody;

int posy[60]={20,20,20,20,20};

int gridx,gridy;

void drawgrid();

void draw_call();

void snakegame();

void timer_callback(int);

void specialkey(int choice,int x,int y);

void drawfood(int &foodx,int &foody);

//void always();
void snake(){

glClearColor(0,0,0,0);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0,rows,0,cols);

int main(int a,char**b){

glutInit(&a,b);

glutInitWindowPosition(20,20);

glutInitWindowSize(600,600);

glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE);

glutCreateWindow(" launch snake game");

snake();

glutDisplayFunc(draw_call);

glutTimerFunc(1000/10,timer_callback,0);

glutSpecialFunc(specialkey);

glutMainLoop();

void draw_call(){

glClear(GL_COLOR_BUFFER_BIT);

drawgrid();

snakegame();

drawfood( foodx,foody);

//timer_callback(int);

glutSwapBuffers();
}

void drawgrid(){

gridx=rows;

gridy=cols;

for(int x=0;x<gridx;x++){

for(int y=0;y<gridy;y++){

if(x==0||y==0||x==gridx-1||y==gridy-1){

glLineWidth(2);

glColor3f(1,0,1);

else{

glLineWidth(1);

glColor3f(0,1.999,1.089);

glBegin(GL_LINE_LOOP);

glVertex2d(x,y);

glVertex2d(x+1,y);

glVertex2d(x+1,y+1);

glVertex2d(x,y+1);

glEnd();
}

}}

void snakegame(){

for(int i=snake_length;i>0;i--){

posx[i]=posx[i-1];

posy[i]=posy[i-1];

if(snake_direction==up)

posy[0]++;

else if(snake_direction==down)

posy[0]--;

else if(snake_direction==right)

posx[0]++;

else if(snake_direction==left)

posx[0]--;

for(int i=0;i<snake_length;i++){

if(i==0)

glColor3f(0,1,0);

else

glColor3f(1,0,0);

glRectd(posx[i],posy[i],posx[i]+1,posy[i]+1);

//check

if(posx[0]==0||posy[0]==0||posx[0]==gridx-1||posy[0]==gridy-1){
gameover=true;

if(gameover==true){

char _score[10];

itoa(score,_score,10);

//score =int value,destination character,base name 10 =decimal

char text[30]="your score is ";

strcat(text,_score);

MessageBox(NULL,text,"gameover",0);

exit(0);

// t check the food is eaten by snake or not

if( posx[0]==foodx&&posy[0]==foody)

score++;

snake_length++;

if(snake_length==60)

snake_length=60;

food=true;

for(int i=1;i<60;i++){

if(posx[0]==posx[i]&&posy[0]==posy[i])

{
char _score[10];

itoa(score,_score,10);

//score =int value,destination character,base name 10 =decimal

char text[30]="your score is ";

strcat(text,_score);

MessageBox(NULL,text,"gameover",0);

exit(0);

void timer_callback(int){

glutPostRedisplay();

glutTimerFunc(1000/10,timer_callback,0);

void specialkey(int choice,int x,int y){

switch(choice){

case GLUT_KEY_DOWN:

if(snake_direction!=up)

snake_direction=down;

break;

case GLUT_KEY_UP:

if(snake_direction!=down)
snake_direction=up;

break;

case GLUT_KEY_LEFT:

if(snake_direction!=right)

snake_direction=left;

break;

case GLUT_KEY_RIGHT:

if(snake_direction!=left)

snake_direction=right;

break;

void drawfood(int &foodx,int &foody){

if(food==true)

int max_x=gridx-2;

int max_y=gridy-2;

int min_=1;

foodx=min_+rand()%(max_x-min_);

foody=min_+rand()%(max_y-min_);

food=false;

glPointSize(5);

glColor3f(1,0,0);

glRectd(foodx,foody,foodx+1,foody+1);
}

You might also like