#include#include#include#include#includeintx,y;intkey=GLUT_KEY_RIGHT;intsnake[100][2];intlen=5;voidmyDisplay(void)
{
glClear( GL_COLOR_BUFFER_BIT );
glColor3f(1.0f,1.0f,1.0f);for(inti=0; i
{
glRecti( snake[i][0], snake[i][1], snake[i][0]+1, snake[i][1]+1);
}
glColor3f(1.0f,0.0f,0.0f);
glRecti( x, y, x+1, y+1);
glutSwapBuffers();
}intHit(intx,inty )
{inti;for( i=0; i
{if( snake[i][0]==x&&snake[i][1]==y )
{return1;
}
}return0;
}intEat(inta,intb )
{if( a==x&&y==b )
{do{
x=rand()%64;
y=rand()%48;
}while( Hit(x,y) );return1;
}return0;
}voidAdd(inta,intb )
{
snake[len][0]=a;
snake[len][1]=b;++len;
}voidMove(intx,inty )
{inti;for( i=0; i
{
snake[i][0]=snake[i+1][0];
snake[i][1]=snake[i+1][1];
}
snake[len-1][0]=x;
snake[len-1][1]=y;
}voidStep(void)
{switch( key )
{caseGLUT_KEY_RIGHT:if( Hit( snake[len-1][0]+1, snake[len-1][1] )==1)
{
exit(0);
}elseif( Eat( snake[len-1][0]+1, snake[len-1][1] ) )
{
Add( snake[len-1][0]+1, snake[len-1][1] );
}else{
Move( snake[len-1][0]+1, snake[len-1][1] );
}break;caseGLUT_KEY_LEFT:if( Hit( snake[len-1][0]-1, snake[len-1][1] )==1)
{
exit(0);
}elseif( Eat( snake[len-1][0]-1, snake[len-1][1] ) )
{
Add( snake[len-1][0]-1, snake[len-1][1] );
}else{
Move( snake[len-1][0]-1, snake[len-1][1] );
}break;caseGLUT_KEY_UP:if( Hit( snake[len-1][0], snake[len-1][1]+1)==1)
{
exit(0);
}elseif( Eat( snake[len-1][0], snake[len-1][1]+1) )
{
Add( snake[len-1][0], snake[len-1][1]+1);
}else{
Move( snake[len-1][0], snake[len-1][1]+1);
}break;caseGLUT_KEY_DOWN:if( Hit( snake[len-1][0], snake[len-1][1]-1)==1)
{
exit(0);
}elseif( Eat( snake[len-1][0], snake[len-1][1]-1) )
{
Add( snake[len-1][0], snake[len-1][1]-1);
}else{
Move( snake[len-1][0], snake[len-1][1]-1);
}break;default:break;
}
}voidmyKey(intk,intnot_use,intnot_use1 )
{switch( k )
{caseGLUT_KEY_DOWN:if( key!=GLUT_KEY_UP )
{
key=k;
Step();
}break;caseGLUT_KEY_UP:if( key!=GLUT_KEY_DOWN )
{
key=k;
Step();
}break;caseGLUT_KEY_LEFT:if( key!=GLUT_KEY_RIGHT )
{
key=k;
Step();
}break;caseGLUT_KEY_RIGHT:if( key!=GLUT_KEY_LEFT )
{
key=k;
Step();
}break;default:break;
}
glutPostRedisplay();
}voidInit(void)
{inti;for( i=0; i
{
snake[i][0]=i;
snake[i][1]=0;
}
srand( GetTickCount() );do{
x=rand()%64;
y=rand()%48;
}while( Hit(x,y) );
}intmain(intargc,char*argv[] )
{
Init();
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE);
glutInitWindowPosition(100,100);
glutInitWindowSize(640,480);
glutCreateWindow("第一个OpenGL程序");
glutSpecialFunc(&myKey );
glutDisplayFunc(&myDisplay);
gluOrtho2D(0,64,0,48);
glutMainLoop();return0;
}