2021年opengl3D迷宫C实现源代码.docx

上传人:scccc 文档编号:12488733 上传时间:2021-12-04 格式:DOCX 页数:18 大小:60.45KB
返回 下载 相关 举报
2021年opengl3D迷宫C实现源代码.docx_第1页
第1页 / 共18页
2021年opengl3D迷宫C实现源代码.docx_第2页
第2页 / 共18页
2021年opengl3D迷宫C实现源代码.docx_第3页
第3页 / 共18页
2021年opengl3D迷宫C实现源代码.docx_第4页
第4页 / 共18页
2021年opengl3D迷宫C实现源代码.docx_第5页
第5页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《2021年opengl3D迷宫C实现源代码.docx》由会员分享,可在线阅读,更多相关《2021年opengl3D迷宫C实现源代码.docx(18页珍藏版)》请在三一文库上搜索。

1、*欧阳光明*创编2021.03.07#include "stdafx.1T欧阳光明(2021.03.07)#include <stdio.h>#include <stdlib.h>#include <GL/glut.h>#include <math.h>#include <iostream>using namespace std;void drawwalls(void);void drawtop(void);void drawball(void);#define IDM_APPLICATION_EXIT (101)#defi

2、ne IDM_APPLICATION_TEXTURE (102)#define IDM_APPLICATION_BANK (103)#define MAZE_HEIGHT (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 = ST

3、ARTING_HEADING ; / player's heading水欧阳光明*创编2021.03.07*欧阳光明*创编2021.03.07float player_s = O.Of; / forward speed of the playerfloat player_m = l.Of; / speed multiplier of the playerfloat player_t = O.Of; / player's turning (change in heading)float player_b = O.Of; / viewpoint bank (roll)static

4、float texcoordX=0.0f;int walllist=0;int mazelist=0;int balllist=O;int status=l;bool searchroute=false;bool keystate4= false,false,false,false;char mazedataMAZE_HEIGHTMAZE_WIDTH = (!» TJ, ,LJ, 'LJ* 'TJ* »TT» »TT» »TT« »TT» »TT» »TJ&#

5、171; »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

6、 1 IU1 LJ, » » 1TJ» 1 TT, 1 1 LJ, 1, h , ri, , ti, n, , n , m j,f »TT1 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,

7、 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« &

8、#187; 1 t « »TT»(H, , H , ,,, H , , , , , H hf »TT, 1 1 1 1 »LJ, »TT« »TT» »TJ« »TT» »TJ» »TT« t 1 t 1 I 1 tTJ1 1,ti hf »TTi » iTJ'»TT, »» »TT» » « » «I_T&#

9、187; 1 TT, 1水欧阳光明*创编2021.03.07(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 »

10、;TJ» »TJ» »LJ« »TT» » i ;X_T LJ, :口 » ' TJ1 1f »TTi 1 » 1 »T_T* 1 1 U1 1 t » »TJ» » « 1 tTJ1 I , H, , , , tl h(»TJ1 tTJ1 'UP :口( TT,(LJQ LJ1 »LJ,,U »IJ, «LJ« TT1 U1 » 9 1TT»

11、; 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=walllist+2;glNewList(walllist,GL_COMPILE);drawwalls();glEndLis

12、t();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_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);diAi2»±aDI)bool wall(int

13、 x,int y) return (x>=0&&y>=0&& x<MAZE_WIDTH &&y<MAZE_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) sw

14、itch(w) case 0:*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 x.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

15、= x+1; *ny=y+l; 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 ;*欧阳光明*创编2021.03.07else float fx;float fy;if(

16、diagnal(x,y,w,&x2,&y2) && onopen(x2,y2) dw(x2,y2,(w+2)%4);texcoordX=(texcoordX<0.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);

17、)w+;w%=4;)while (w!=p);return ;)void drawwalls() glEnable(GL_TEXTURE_2D);glBegin(GL_QUAD_STRIP);*欧阳光明*创编2021.03.07*欧阳光明*创编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;y<MAZE_HEIGHT;y+

18、) for(x=0;x<MAZE_WIDTH;x+) if(wall(x,y) mazedatayx= X;glVertex3f(x+0.0f ,y+O.Of ,1.0f);glVertex3f(x+l .Of ,y+O.Of, 1 .Of);glVertex3f(x+1 .Of ,y+ l.Of, l.Of);glVertex3f(x+0.0f ,y+ l.Of, l.Of);glEnd();void forward(float px,float py,float bf) 水欧阳光明*创编2021.03.072021.03.07*欧阳光明*创编int x = (int)player_x

19、);int y = (int)player_y);int h=0;if(px> x+l.Of - bf) && wall(x+l,y) px = (float)(x)+l .Of-bf;h+;)if(py> y+ l.Of-bf && 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+

20、;)player_x=px;player_y=py;void drawball()*欧阳光明*创编2021.03.07*欧阳光明*创编2021.03.07glDisable(GL_TEXTURE_2D);glColor3f(l.0,0.0,0.0);glutSolidSphere(0.2f, 15,15);void navmaze 1 ()forward(player_x+player_s*(float)sin(player_h*3.14/180),player_y+player_s*(float)cos(player_h*3.14/180),0.2f); cout«player_x

21、«player_y«endl;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(player_h,O.Of,O.Of, 1 .Of);glTranslatef(-player_x,-player_y,-0.5f);glCallList(walllist);glPo

22、pMatrix();void navmaze2()水欧阳光明*创编2021.03.07*欧阳光明*创编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);cout«player_x«player_x«endl;player_h+=player_t;player_b = 3*player_b/4 + player_t/4;glClear(GL_C

23、OLOR_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);glPushMatrix();glTranslatef(player_x,player_y,0.5f);glCallList

24、(balllist);glPopMatrix();glPopMatrix();)void myDisplayOif(status=l)水欧阳光明*创编2021.03.07*欧阳光明*创编2021.03.07if(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_PROJECTION);glLoad

25、ldentityO;glMatrixMode(GL_MODELVIEW); glLoadldentityO;*欧阳光明*创编水欧阳光明*创编2021.03.07glutPostRedisplay();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 = tr

26、ue;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

27、_KEY_LEFT:keystate2 = false;player_t = O.Of;水欧阳光明*创编*欧阳光明*创编2021.03.07break;case GLUT_KEY_RIGHT:keystate3 = false;player_t = O.Of;break;case GLUT_KEY_UP:keystateO = false;player_s = O.Of;break;case GLUT_KEY_DOWN:keystatel = false;player_s = O.Of;break;default:break;/glutPostRedisplayO;void idle()if(

28、keystateOllkeystate 1 IIkeystate2IIkeystate3) glutPostRedisplayO;else)/EI- A° zl4uo6%i0EedlDx 弟£-« 珈吸zB2»O»O±O0/»«I14£-i%i»a»-A«I£OIi£i-l6-E±pafiQaIu°Uo*欧阳光明*创编2021.03.07*欧阳光明*创编2021.03.07void main(int argc, char* argv)g

29、lutlnit(&argc 卫 rgv);glutlnitDisplayMode (GLUT_DOUBLE I GLUT_RGB);glutInitWindowSize(500, 500);glutCreateWindow(Hpolygon modeler");glutDisplayFunc(myDisplay);myinit ();glutSpecialFunc(specialKeys); glutKeyboardFunc(keyboard); glutSpecialUpFunc(upSpecialKeyboard); glutldleFunc(idle);glutMainLoop();水欧阳光明*创编2021.03.07

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1