资源简介
闲来无事用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 Shader导入
- OpenGL透视投影小程序源码
- OpenGL纹理贴图.jpg格式图片小程序源码
- QT5.7+OPENGL画正方体
- OpenGL实现多边形扫描转换的扫描线算
- OpenGL鼠标点选平移物体
- 基于opengl es 的显示gif的
- DirectX简单的贪吃蛇.rar
- OpenGL编程指南(第八版)中文高清晰
- OpenGL精美房屋,落雪其上
- OpenGL光照,多种情况下的建立
- vlc opengl播放视频
- Opengl写的3d人物模型
- OPENGL学习 3D小雪人
- opengl动态云彩的模拟
- nvidia-opengl-rdp 英伟达显卡 rdp 远程桌面
- OpenGL模型视图矩阵演示
- 基于VC_的OpenGL三维动画仿真及场景漫
- OpenGL仿微信视频聊天
- OpenGL预览摄像头
- OpenGl 会走路的机器人
- opengl 做的很漂亮的一棵树,用分形算
- 3ds模型导入opengl,实现旋转平移缩放
- opengl中点画圆法
- opengl编程指南第7版源代码
- 3D酷炫屏幕保护程序OpenGL
- C51单片机点阵贪吃蛇代码16*16点阵和
- 高级贪吃蛇
- OpenGL文件.zip
- qt做一个贪吃蛇小游戏
评论
共有 条评论