資源簡介
閑來無事用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? {
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? {
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? {
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圖
- 下一篇:班級信息管理系統(源代碼)
評論
共有 條評論