2021年opengl3D迷宫C实现源代码_第1页
2021年opengl3D迷宫C实现源代码_第2页
2021年opengl3D迷宫C实现源代码_第3页
2021年opengl3D迷宫C实现源代码_第4页
2021年opengl3D迷宫C实现源代码_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、*欧阳光明*创编2021.03.07#include stdafx.1T欧阳光明(2021.03.07)#include #include #include #include #include using namespace std;void drawwalls(void);void drawtop(void);void drawball(void);#define IDM_APPLICATION_EXIT (101)#define IDM_APPLICATION_TEXTURE (102)#define IDM_APPLICATION_BANK (103)#define MAZE_HEIGH

2、T (16)#define MAZE_WIDTH (16)#define STARTING_POINT_X (13.5f);#define STARTING_POINT_Y (1.5f);#define STARTING_HEADING (90.0f);float player_x = STARTING_POINT_X ;float player_y = STARTING_POINT_Y ;float player_h = STARTING_HEADING ; / players headingfloat player_s = O.Of; / forward speed of the play

3、erfloat player_m = l.Of; / speed multiplier of the playerfloat player_t = O.Of; / players turning (change in heading)float player_b = O.Of; / viewpoint bank (roll)static float texcoordX=0.0f;int walllist=0;int mazelist=0;int balllist=O;int status=l;bool searchroute=false;bool keystate4= false,false,

4、false,false;char mazedataMAZE_HEIGHTMAZE_WIDTH = (! TJ, ,LJ, LJ* TJ* TT TT TT TT TT TJ TT TT tTT1 LJ1 1f T_T1 1 1 I 1 T_TI I 1 1 1 TJ 1I n1门 J ,fLJI I I ITT* 1 T T TT ITT! I TJ, f 1 ITT I I I t I * ITT 1m, ,ri,h, , ,,,h bf TT, 1LJ,八八 TJ t 1 IU1 LJ, 1TJ 1 TT, 1 1 LJ, 1, h , ri, , ti, n, , n , m j,f T

5、T1 1 1 1TJ 1 1 1 tTTi 1TT 1I C1,门 J 9(TTi TJ TJ, 9l_T 勺口 1TJ1 勺口 9口 iI_T 1 TT, ,LJ, LJ, 1 LJ1 1(M, , M , M , tl , M , m M , tl(TT * 11r 1 1 TT1 1 t TT |f TT, TJ* TJ1 rj* TJ 1 TT, 9Uf ,LJ, 9 1 T_T, TT tTJ1 LJ, 1, ri, ri, n, n , ri, h , h , ri, n),f TTi ITT* 1 1 TJ 1 t TT(H, , H , ,,, H , , , , , H hf

6、 TT, 1 1 1 1 LJ, TT TT TJ TT TJ TT t 1 t 1 I 1 tTJ1 1,ti hf TTi iTJTT, TT I_T 1 TT, 1(tTJ1 TJ* TJ, 9口 1TJ I TJ TJr ,LJ, LJ1 1 TT TJ, , H, ri, ri, ri, ri, ri, , n),(T_Ti 1 t 1 l l ITT 1 I I I I T_Ti 1TT 1I 门门1,门 J ,(TT, 1 1 LJ TJ 1 TJ TJ LJ TT i ;X_T LJ, :口 TJ1 1f TTi 1 1 T_T* 1 1 U1 1 t TJ 1 tTJ1 I

7、, H, , , , tl h(TJ1 tTJ1 UP :口( TT,(LJQ LJ1 LJ,,U IJ, LJ TT1 U1 9 1TT iTJ 1 | rl,rl,rl,M,rl,M,rl,rl,rl,rl,rl,M,rl, , n , rl j,;void myinit()glClearColor(0.5f, 0.5f, 0.5f, O.Of);glColor3f( 1.0,1.0,1.0);glEnable(GL_DEPTH_TEST);glEnable(GL_TEXTURE_2D);walllist=glGenLists(2);mazelist=walllist+1;balllist

8、=walllist+2;glNewList(walllist,GL_COMPILE);drawwalls();glEndList();glNewList(mazelist,GL_COMPILE);drawtopO;glEndList();glNewList(balllist,GL_COMPILE);drawball();glEndList();glMatrixMode(GL_PROJECTION);glLoadldentityO;gluPerspective(60.0, 1.0,0.1, 60.0);glMatrixMode(GL_MODELVIEW);glHint(GL_PERSPECTIV

9、E_CORRECTION_HINT,GL_NICEST);diAi2aDI)bool wall(int x,int y) return (x=0&y=0& xMAZE_WIDTH &yMAZE_HEIGHT & mazedatayx!= );)bool onopen(int x,int y)if(wall(x,y)retum(mazedatayx=,H,);)void closeit(int x,int y) if(onopen(x,y)mazedatayx= X;bool neighbor(int x,int yjnt w,int *nx,int *ny) switch(w) case 0:

10、*nx = x-1; *ny=y; break;case 1:*nx = x;*ny二y+1; break;case 2:*nx = x+1; *ny=y; break;case 3:*nx = x;*ny=y-l; break;default:break;return wall(*nx,*ny);)bool diagnal(int y,int w,int *nx,int *ny)switch(w) case 0:*nx = x-1; *ny=y-l; break;case 1:*nx = x-1; *ny=y+l; break;case 2:*nx = x+1; *ny=y+l;

11、 break; case 3:*nx = x+1; *ny=y-l; break;default:break;return wall(*nx,*ny);void dw(int x,int y,int p) int w=p;closeit(x,y);doint x2=0;int y2=0;if(neighbor(x,y,w,&x2,&y2) if(onopen(x2,y2) dw(x2,y2,(w+3)%4);)else if(w+l)%4 =p)return ;else float fx;float fy;if(diagnal(x,y,w,&x2,&y2) & onopen(x2,y2) dw

12、(x2,y2,(w+2)%4);texcoordX=(texcoordX0.5)? 1.0f:0.0f;fx = (float)x+(w= 1II w=2)? 1 .Of :0.0f);fy = (float)y+(w=0llw=l)?1.0f:0.0f);glTexCoord2f(texcoordX,0.0f);glVertex3f(fx,fy,0.0f);glTexCoord2f(texcoordX, 1 .Of);gl Vertex3f(fx,fy, 1 .Of);)w+;w%=4;)while (w!=p);return ;)void drawwalls() glEnable(GL_T

13、EXTURE_2D);glBegin(GL_QUAD_STRIP);*欧阳光明*创编2021.03.07glColor3f(1.0,1.0J .0);glVertex3f(0.0f, O.Of, O.Of);glVertex3f(0.0f, O.Of, l.Of);dw(0,0,0);glEnd();)void drawtop() int x,y;glBegin(GL_QUADS);for(y=0;yMAZE_HEIGHT;y+) for(x=0;x x+l.Of - bf) & wall(x+l,y) px = (float)(x)+l .Of-bf;h+;)if(py y+ l.Of-bf

14、 & wall(x,y+1) py = (float)(y)+l.Of-bf;h+;)if(px x+bf & wall(x-l,y) px = (float)(x)+bf;h+;)if(py y+bf & wall(x,y-l) py = (float)(y)+bf;h+;)player_x=px;player_y=py;void drawball()*欧阳光明*创编glDisable(GL_TEXTURE_2D);glColor3f(l.0,0.0,0.0);glutSolidSphere(0.2f, 15,15);void navmaze 1 ()forward(player_x+pla

15、yer_s*(float)sin(player_h*3.14/180),player_y+player_s*(float)cos(player_h*3.14/180),0.2f); coutplayer_xplayer_yendl;player_h+=player_t;player_b = 3*player_b/4 + player_t/4;glClear(GL_COLOR_BUFFER_BIT I GL_DEPTH_BUFFER_BIT); glLoadldentityO;glPushMatrix();glRotatef(-90.0f, 1.0f,0.0f,0.0f);glRotatef(p

16、layer_h,O.Of,O.Of, 1 .Of);glTranslatef(-player_x,-player_y,-0.5f);glCallList(walllist);glPopMatrix();void navmaze2()*欧阳光明*创编2021.03.07forward(player_x+player_m*player_s*(float)sin(player_h*3.14/180),player_y+player_m*player_s*(float)cos(player_h*3.14/180),0.2f);coutplayer_xplayer_xendl;player_h+=pla

17、yer_t;player_b = 3*player_b/4 + player_t/4;glClear(GL_COLOR_BUFFER_BIT I GL_DEPTH_BUFFER_BIT); glLoadldentityO;glOrtho(-16.0,16.0,-16.0,16.0,-2.0,20.0);glPushMatrix();glRotatef(90.0f,0.0f,0.0f, 1,0f);glTranslatef(-MAZE_WIDTH /2,-MAZE_HEIGHT/2,-0.5f); glCallList(walllist);glCallList(mazelist);glPushM

18、atrix();glTranslatef(player_x,player_y,0.5f);glCallList(balllist);glPopMatrix();glPopMatrix();)void myDisplayOif(status=l)if(searchroute=true)else navmazel();)if(status=3)if(searchroute=true)else navmaze2();)glFlush();glutSwapBuffers();)void myReshape(int w, int h)glViewport(0,0,w,h);glMatrixMode(GL

19、_PROJECTION);glLoadldentityO;glMatrixMode(GL_MODELVIEW); glLoadldentityO;*欧阳光明*创编glutPostRedisplay();void specialKeys(int key,int x,int y)switch (key)case GLUT_KEY_LEFT:keystate2 = true;player_t = -2.0f;break;case GLUT_KEY_RIGHT:keystate3 = true;player_t = 2.0f;break;case GLUT_KEY_UP:key state 0 = t

20、rue;player_s = O.Olf;break;case GLUT_KEY_DOWN:keystatel = true;player_s = -O.Olf;break;default:break;void keyboard(unsigned char key,int x,int y) switch (key)case T:status=l;break;case 3:status=3;break;default:break;)glutPostRedisplayO;)void upSpecialKeyboard(int key,int x,int y)switch (key)case GLUT_KEY_LEFT:keystate2 = false;player_t = O.Of;水欧阳光明*创编break;case GLUT_KEY_RIGHT:keystate3 =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论