首页 openglD迷宫C实现源代码

openglD迷宫C实现源代码

举报
开通vip

openglD迷宫C实现源代码#include""#include<> #include<>#include<GL/>#include<>#include<iostream>usingnamespacestd;voiddrawwalls(void);voiddrawtop(void);voiddrawball(void);#defineIDM_APPLICATION_EXIT(101)#defineIDM_APPLICATION_TEXTURE(102)#defin...

openglD迷宫C实现源代码
#include""#include<> #include<>#include<GL/>#include<>#include<iostream>usingnamespacestd;voiddrawwalls(void);voiddrawtop(void);voiddrawball(void);#defineIDM_APPLICATION_EXIT(101)#defineIDM_APPLICATION_TEXTURE(102)#defineIDM_APPLICATION_BANK(103)#defineMAZE_HEIGHT(16)#defineMAZE_WIDTH(16)#defineSTARTING_POINT_X;#defineSTARTING_POINT_Y;#defineSTARTING_HEADING;floatplayer_x=STARTING_POINT_X;floatplayer_y=STARTING_POINT_Y;floatplayer_h=STARTING_HEADING;//player'sheadingfloatplayer_s=;//forwardspeedoftheplayerfloatplayer_m=;//speedmultiplieroftheplayerfloatplayer_t=;//player'sturning(changeinheading)floatplayer_b=;//viewpointbank(roll)staticfloattexcoordX=;intwalllist=0;intmazelist=0;intballlist=0;intstatus=1;boolsearchroute=false;boolkeystate[4]={false,false,false,false};charmazedata[MAZE_HEIGHT][MAZE_WIDTH]={ {'H','H','H','H','H','H','H','H','H','H','H','H','H','H','H','H'},{'H','','','','','','','','H','','','','','','','H'},{'H','','H','','H','H','H','','H','','H','','','','','H'},{'H','','H','H','','','H','','H','H','','H','','H','','H'},{'H','','','','','','H','','','','','','','H','','H'},{'H','','H','H','H','H','H','H','H','H','','H','H','H','','H'},{'H','','','','','','','','','','','','H','','','H'},{'H','','H','H','H','H','H','','H','H','H','','H','H','H','H'},{'H','','H','','','','H','','','','H','','','','','H'},{'H','','','','H','H','H','H','H','H','H','','','','','H'},{'H','','H','','','','H','','','','H','','','H','','H'},{'H','','H','H','H','H','H','','H','H','H','H','','H','','H'},{'H','','','','','','H','','','','','','','H','','H'},{'H','','','H','H','','H','H','H','H','','H','H','H','','H'},{'H','','','','H','','H','','','','','H','','','','H'},{'H','H','H','H','H','H','H','H','H','H','H','H','H','','H','H'},};voidmyinit(){ glClearColor,,,; glColor3f,,; glEnable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); walllist=glGenLists(2); mazelist=walllist+1; balllist=walllist+2; glNewList(walllist,GL_COMPILE); drawwalls(); glEndList(); glNewList(mazelist,GL_COMPILE); drawtop(); glEndList(); glNewList(balllist,GL_COMPILE); drawball(); glEndList();glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective,,,;glMatrixMode(GL_MODELVIEW);glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);//ê1??àí2?±?D?}boolwall(intx,inty){return(x>=0&&y>=0&&x<MAZE_WIDTH&&y<MAZE_HEIGHT&&mazedata[y][x]!='');}boolonopen(intx,inty){ if(wall(x,y)){return(mazedata[y][x]=='H'); }}voidcloseit(intx,inty){if(onopen(x,y)) {mazedata[y][x]='X'; }}boolneighbor(intx,inty,intw,int*nx,int*ny){switch(w){case0:*nx=x-1;*ny=y;break;case1:*nx=x;*ny=y+1;break;case2:*nx=x+1;*ny=y;break;case3:*nx=x;*ny=y-1;break;default: break;}returnwall(*nx,*ny);}booldiagnal(intx,inty,intw,int*nx,int*ny){switch(w){case0:*nx=x-1;*ny=y-1;break;case1:*nx=x-1;*ny=y+1;break;case2:*nx=x+1;*ny=y+1;break;case3:*nx=x+1;*ny=y-1;break;default: break;}returnwall(*nx,*ny);}voiddw(intx,inty,intp){ intw=p; closeit(x,y);do{ intx2=0; inty2=0; if(neighbor(x,y,w,&x2,&y2)){ if(onopen(x2,y2)){ dw(x2,y2,(w+3)%4); }else{ if((w+1)%4==p) { return; } } }else{ floatfx; floatfy; if(diagnal(x,y,w,&x2,&y2)&&onopen(x2,y2)){ dw(x2,y2,(w+2)%4); } texcoordX=(texcoordX<?:; fx=(float)x+((w==1||w==2)?:;fy=(float)y+((w==0||w==1)?:;glTexCoord2f(texcoordX,;glVertex3f(fx,fy,;glTexCoord2f(texcoordX,;glVertex3f(fx,fy,; } w++;w%=4; }while(w!=p);return;}voiddrawwalls(){ glEnable(GL_TEXTURE_2D);glBegin(GL_QUAD_STRIP); glColor3f,,;glVertex3f,,;glVertex3f,,;dw(0,0,0);glEnd();}voiddrawtop(){ intx,y;glBegin(GL_QUADS);for(y=0;y<MAZE_HEIGHT;y++){for(x=0;x<MAZE_WIDTH;x++){if(wall(x,y)){ mazedata[y][x]='X';glVertex3f(x+,y+,;glVertex3f(x+,y+,;glVertex3f(x+,y+,;glVertex3f(x+,y+,;}}}glEnd();}voidforward(floatpx,floatpy,floatbf){intx=((int)player_x);inty=((int)player_y);inth=0;if((px>x+&&wall(x+1,y)){px=(float)(x)+;h++;}if(py>y+&&wall(x,y+1)){py=(float)(y)+;h++;}if(px<x+bf&&wall(x-1,y)){px=(float)(x)+bf;h++;}if(py<y+bf&&wall(x,y-1)){py=(float)(y)+bf;h++;}player_x=px;player_y=py;}voiddrawball(){ glDisable(GL_TEXTURE_2D); glColor3f,,; glutSolidSphere,15,15);}voidnavmaze1(){forward(player_x+player_s*(float)sin(player_h*180),player_y+player_s*(float)cos(player_h*180),; cout<<player_x<<player_y<<endl;player_h+=player_t;player_b=3*player_b/4+player_t/4;glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glLoadIdentity();glPushMatrix(); glRotatef,,,; glRotatef(player_h,,,; glTranslatef(-player_x,-player_y,; glCallList(walllist);glPopMatrix();}voidnavmaze2(){ forward(player_x+player_m*player_s*(float)sin(player_h*180),player_y+player_m*player_s*(float)cos(player_h*180),; cout<<player_x<<player_x<<endl;player_h+=player_t;player_b=3*player_b/4+player_t/4;glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glLoadIdentity(); glOrtho,,,,,;glPushMatrix(); glRotatef,,,; glTranslatef(-MAZE_WIDTH/2,-MAZE_HEIGHT/2,; glCallList(walllist); glCallList(mazelist); glPushMatrix(); glTranslatef(player_x,player_y,; glCallList(balllist); glPopMatrix();glPopMatrix();}voidmyDisplay(){ if(status==1) { if(searchroute==true) { } elsenavmaze1(); } if(status==3) { if(searchroute==true) { } elsenavmaze2(); } glFlush(); glutSwapBuffers();}voidmyReshape(intw,inth){ glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();glMatrixMode(GL_MODELVIEW);glLoadIdentity(); glutPostRedisplay();}voidspecialKeys(intkey,intx,inty){ switch(key) { caseGLUT_KEY_LEFT: keystate[2]=true; player_t=; break; caseGLUT_KEY_RIGHT: keystate[3]=true; player_t=; break; caseGLUT_KEY_UP: keystate[0]=true; player_s=; break; caseGLUT_KEY_DOWN: keystate[1]=true; player_s=; break; default:break; }}voidkeyboard(unsignedcharkey,intx,inty){ switch(key) { case'1': status=1; break; case'3': status=3; break; default:break; } glutPostRedisplay();}voidupSpecialKeyboard(intkey,intx,inty){ switch(key) { caseGLUT_KEY_LEFT: keystate[2]=false; player_t=; break; caseGLUT_KEY_RIGHT: keystate[3]=false; player_t=; break; caseGLUT_KEY_UP: keystate[0]=false; player_s=; break; caseGLUT_KEY_DOWN: keystate[1]=false; player_s=; break; default:break; }// glutPostRedisplay();}voididle(){ if(keystate[0]||keystate[1]||keystate[2]||keystate[3])glutPostRedisplay(); else{}}//êí·?°′?üoó?í??è????D×′ì?£?è?1????D×′ì?2?ò??±???′??í?£??í?á?-??í£?í?£′?·?·¨è±μ?ê??a?úoü′óvoidmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);glutInitWindowSize(500,500);glutCreateWindow("polygonmodeler");glutDisplayFunc(myDisplay);myinit(); glutSpecialFunc(specialKeys); glutKeyboardFunc(keyboard); glutSpecialUpFunc(upSpecialKeyboard); glutIdleFunc(idle);glutMainLoop();}
本文档为【openglD迷宫C实现源代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
春眠不觉晓
暂无简介~
格式:doc
大小:11KB
软件:Word
页数:0
分类:工学
上传时间:2020-04-04
浏览量:0