• 大小: 496KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: 其他
  • 标签: 贪吃蛇  opengl  vc2005  

资源简介

闲来无事用opengl做了一个贪吃蛇来玩,感觉还不错传上来和大家分享。不过由于时间关系没有注释,还望见谅。程序运行后用方向键控制小蛇,鼠标右键调节难度。

资源截图

代码片段和文件信息

#include“gl/glut.h“
#include
#include
using namespace std;
vector x;
vector y;
int point_x point_y;
int direction = GLUT_KEY_RIGHT;
int level = 150;
void restart()
{
x.clear();
y.clear();
int i;
for(i = 0; i < 30; i++)
{
x.push_back(30 - i);
y.push_back(75);
}
direction = GLUT_KEY_RIGHT;
}
void menu(int input)
{
level = input;
glutPostRedisplay();
}
double random(double start double end)
{
    return start+(end-start)*rand()/(RAND_MAX + 1.0);
}
void createpoint()
{
int i;
bool state = true;
while(1)
{
point_x = random(0200);
point_y = random(0150);
for(i = 0; i < x.size(); i++)
{
if( (x[i] == point_x) && (y[i] == point_y) )
{
state = false;
break;
}
}
if(state == true)
break;
}
}
void move()
{
int i;
for(i = x.size() - 1; i > 0; i--)
{
x[i] = x[i - 1]; 
y[i] = y[i - 1];
}
}
void special(int key int x int y)
{
if( (key != direction) && (abs(key - direction) != 2) )
direction = key;
}
void init(void)
{
glClearColor(1.01.01.00.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0200.00.0150.0);
}
void display(void)
{
int i;
if( (x[0] < 0) || (x[0] > 200) || (y[0] < 0) || (y[0] > 150) )
restart();
for( i = 1; i < x.size(); i++)
{
if( (x[0] == x[i]) && (y[0] == y[i]) )
{
restart();
break;
}
}
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.01.00.0);
glPointSize(5);
for(i = 0; i < x.size(); i++)
{
glBegin(GL_POINTS);
glVertex2i(x[i] y[i]);
glEnd();
}
if( (x[0] == point_x) && (y[0] == point_y) )
{
x.push_back(x[0]);
y.push_back(y[0]);
createpoint();
}
glBegin(GL_POINTS);
glVertex2i(point_x point_y);
glEnd();
glFlush();
}
void timer(int i)
{

move();
switch(direction)
{
case GLUT_KEY_RIGHT: ::x[0]++; break;
case GLUT_KEY_UP: ::y[0]++; break;
case GLUT_KEY_LEFT: ::x[0]--; break;
case GLUT_KEY_DOWN: ::y[0]--; break;
}
glutTimerFunc(leveltimer1);
glutPostRedisplay();
}

int main(int argc char** argv)
{
int i;
for(i = 0; i < 30; i++)
{
x.push_back(30 - i);
y.push_back(75);
}
glutInit(&argc argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(50 100);
glutInitWindowSize(400 300);
glutCreateWindow(“贪吃蛇“);
init();
glutCreateMenu(menu);
glutAddMenuEntry(“低级“ 150);
glutAddMenuEntry(“中级“ 100);
glutAddMenuEntry(“高级“ 50);
glutAttachMenu(GLUT_RIGHT_BUTTON);
createpoint();
glutDisplayFunc(display);
glutSpecialFunc(special);
glutTimerFunc(leveltimer1);
glutMainLoop();
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      86016  2011-02-26 22:17  snake\debug\snake.exe

     文件     455708  2011-02-26 22:17  snake\debug\snake.ilk

     文件     429056  2011-02-26 22:17  snake\debug\snake.pdb

     文件       5356  2011-02-26 22:17  snake\snake\Debug\BuildLog.htm

     文件     140519  2011-02-26 22:17  snake\snake\Debug\main.obj

     文件         65  2011-02-26 22:17  snake\snake\Debug\mt.dep

     文件        387  2011-02-26 22:17  snake\snake\Debug\snake.exe.intermediate.manifest

     文件     134144  2011-02-26 22:17  snake\snake\Debug\vc80.idb

     文件     110592  2011-02-26 22:17  snake\snake\Debug\vc80.pdb

     文件       2648  2011-02-26 22:17  snake\snake\main.cpp

     文件       3706  2011-02-23 21:20  snake\snake\snake.vcproj

     文件       1407  2011-04-27 15:30  snake\snake\snake.vcproj.gz-PC.gz.user

     文件    2034688  2011-04-27 15:30  snake\snake.ncb

     文件        880  2011-02-23 21:03  snake\snake.sln

    ..A..H.      9728  2011-04-27 15:30  snake\snake.suo

     目录          0  2011-02-26 22:17  snake\snake\Debug

     目录          0  2011-02-26 22:17  snake\debug

     目录          0  2011-02-26 22:17  snake\snake

     目录          0  2011-02-26 22:14  snake

----------- ---------  ---------- -----  ----

              3414900                    19


评论

共有 条评论