Professional Documents
Culture Documents
Snake Game
Snake Game
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;
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 always();
void snake(){
glClearColor(0,0,0,0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,rows,0,cols);
glutInit(&a,b);
glutInitWindowPosition(20,20);
glutInitWindowSize(600,600);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE);
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);
strcat(text,_score);
MessageBox(NULL,text,"gameover",0);
exit(0);
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);
strcat(text,_score);
MessageBox(NULL,text,"gameover",0);
exit(0);
void timer_callback(int){
glutPostRedisplay();
glutTimerFunc(1000/10,timer_callback,0);
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;
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);
}