资源简介
闲来无事用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
- 上一篇:网络在线考试系统UML图
- 下一篇:班级信息管理系统(源代码)
相关资源
- OpenGL参考手册
- 贪吃蛇源代码.fla
- MFC程序-碰撞的小球
- Qt Creator opengl实现四元数鼠标控制轨迹
- OpenGL文档,api大全,可直接查询函数
- opengl轮廓字体源代码
- 贪吃蛇游戏设计(汇编语言)
- MFC读三维模型obj文件
- 利用OpenGL写毛笔字算法
- MFC中OpenGL面和体的绘制以及动画效果
- 基于OPENGL的光线跟踪源代码368758
- VC 实现三维旋转(源码)
- 自编用openGL实现3D分形树,分形山
- OpenGL球形贴图自旋程序
- OpenGL导入贴图的Texture类
- 计算机图形学(openGL)代码
- 用OpenGL开发的机械臂运动仿真程序(
- OpenGL-3D坦克模拟
- OPENGL实现世界上最小的3D游戏
- Scratch 贪吃蛇 素材及代码
- Scratch 贪吃蛇 小游戏源码
- Scratch 好玩的贪吃蛇1.0
- Scratch 贪吃蛇.sb3 小游戏源码
- VS2012OpenGL配置所需要的全部libdllh文件
- VC2005开发工具实现数据手套抓取移动
- 基于OpenGL的仿蝗虫机器人三维动态仿
- 图形学 - OpenGL实现3种三维茶壶显示源
- opengl程序-会跳舞的骷髅
- opengl实现三维网格光顺Laplacian算法
- opengl——爆炸
评论
共有 条评论