还剩5页未读,继续阅读
文本内容:
・n#include stdafxh”#include stdio.h#include stdlib.husing namespacestd;void drawwallsvoid;#include GL/glut.h void drawtopvoid;void drawballvoid;#include math.h#include iostream#d㊀fine IDM_APPLICATION_EXIT101#ci㊀fin㊀工DM_APPL工CAT工ON_TEXTURE102#define IDM_APPLICATION_BANK103#define MAZE_HEIGHT16#define MAZE_WIDTH16#define STARTING_POINT_X
13.5f;#define STARTING_POINT_Y1,5f;float player_x=STARTING_POINT_X;#define STARTING_HEADING
90.Of;float player_y=STARTING_POINT_Y;1float player_h=STARTING HEADING;//player sleadingO.Of;float player_s=forward speedof theplayerl.Of;float player_m=speed multiplierof theplayer changeO.Of;float player_t=player1s turningin headingO.Of;float player_b=viewpoint bankrollstatic floattexcoordX=
0.Of;int walllist=0;int mazelist=0;int balllist=0;int status=l;bool s㊀archroute=fals㊀;bool keystate
[4]={false,false,false false};fchar mazedata[MAZE_HEIGHT][MAZE_WIDTH]={,},fILJTfTITII IIIIIITITLJ»IIIIIITI TII»ILJI1JL1,,,,,,,,11,,,,,,,11jffIuf!1IUI!I!TJ1ITJIfTJ!I TIuIIIITJ!I!I!I!I!ITJ»11口,,口,,n,n,n,,ti,,n,,,,,ti,fIUT»1IUIIUIIII»,口,»»IU»口,»»»LJIII1口,»ILJ»1[tl,,,tl,,乜,,ti,,tl,fILJ!»»II»IIIIIILJI»I!I»IIIIfI!,口,IfILJ»111,,,,,,:1,,,,,,,11,,11J,,,{H一—H―H一H-H一H-H一H—H—一H-H一H--H},fIUT»»I»I1IIIIIITITI»!»I11ILTI!I»IILJI111,,,,,,,,,,,,11Iff工1JfJITJ11»!U*u»»LJIInT!TJII fIuITuIILJ\!1口,,口,ti,ti,n,M,,口,口,口,,一HIHJH-H},,{H——H———LH一一一LH一———一口},f!U»»»IVIITU!fLJ»TUfITJ!!TJIITJT!rjIIITITT!!ITJIItH,,,,H,H,H,H,H,H,H,,,,,旦,{Hj JH—一一一H一—J IHJ-JH—一H{HJ-H—H—HIHJ JHIHJH-H—JH-H},fILJT»I\T»ITI!IIU!IITI»II\ITITTLJII IILJ»111,,,,,,-t-L,,,,,,,-LI,,11j,fITJT I»ILJTIUI!!IUITLTTIU»U»»TTLJIITJTITJI!IITJI1ttl,,,tl,H,,H,,H,tl,H,rn]f{H————H—一H—一———H一—一IH},,—H—H},;void myinitglClearColor
0.5f,
0.5f
0.5f,
0.Of;zglColor3f
1.0,
1.0,
1.0;glEnableGL_DEPTH_TEST;glEnableGL_TEXTURE_2D;walllist=glGenLists2;;ma ze1i st=walllist+1balllist=walllist+2;glNewListwalllist GL_COMPILE;zdrawwalls;glEndList;glNewListmazelist,GL_COMPILE;drawtop;glEndList;glNewListballlist,GL_COMPILE;drawball;glEndList;glMatrixModeGL_PROJECTION;glLoadldentity;gluPerspective
60.0,
1.0,
0.1,
60.0;glMatrixModeGL_MODELVIEW;12glHintGL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST;//E IffiAi»±aDIbool wallint x,int y{return x=0y=0xMAZE_WIDTHyMAZE_HEIGHTmazedata[y]1[x]!=*;bool onopenint x,int y{if wallx,y{return maz㊀data[y][x]==,H1;}void closeitint x,int y{if onopenx,y1!mazedata[y][x]=X;bool neighborint x,int y,int wint*nx,int*ny{switchw{case0:z*nx=x-1;*ny=y;break;*nx=x;*ny=y+l;break;*nx=x+1;*ny=y;break;*nx=x;*ny=y-l;break;default:break;return wall*nx,*ny;}bool diagnalint x,int y,int w,int*nx,int*ny{switchw{cas㊀0:*nx=x-1;*ny=y-l;break;*nx=x-1;*ny=y+l;break;*nx=x+1;*ny=y+l;break;*nx=x+1;*ny=y-l;break;default:break;return wall*nx,*ny;}void dwint x,int y,int p{int w=p;closeitx,y;do{int x2=0;int y2=0;ifnaighborx,y,w,x2,y2{if onopenx2,y2{dwx2y2,w+3%4;r㊀Is㊀{ifw+1%4==p{return;}else{float fx;float fy;ifdiagnalx,y,w,x2y2onopen x2,y2{dwx2,y2,w+2%4;ztexcoordX=texcoordX
0.
51.Of:
0.Of;fx=floatx+w==l||w==
21.Of:
0.Of;fy=floaty+w==0||w==l
1.Of:
0.Of;glTexCoord2ftexcoordX,
0.Of;glVertex3ffx,fy,
0.Of;glTexCoord2ftexcoordX,
1.Of;glVertex3ffx,fy,
1.Of;w++;w%=4;}while w!=p;return;}void drawwalls{glEnableGL_TEXTURE_2D;glBeginGL_QUAD_STRIP;glColor3f
1.0,
1.0,
1.0;glVertex3f
0.Of,
0.Of,
0.Of;glVertex3f
0.Of,
0.Of,
1.Of;dw0,0,0;glEnd;}voiddrawtop{int x,y;glBeginGL_QUADS;fory=O;yMAZE_HEIGHT;y++{forx=0;xMAZE_WIDTH;x++{ifwallx,y{1mazedata[y][x]=*X;glVertex3fx+
0.Of,y+
0.Of,
1.Of;glVertex3fx+
1.Of,y+
0.Of,
1.Of;glVertex3fx+
1.Of,y+
1.Of,
1.Of;glVertex3fx+
0.Of,y+
1.Of,
1.Of;}glEnd;}void forwardfloatpx,float py,float bfint x=intplayer_x;int y=intplayer_y;int h=0;ifpx x+
1.Of-bfwallx+1,y px=float x+
1.Of-bf;h++;if pyy+
1.Of-bfwallx,y+1py=floaty+
1.Of-bf;h++;ifpx x+bfwallx-1,y{px=float x+bf;h++;ifpy y+bfwallx,y-1{py=floaty+bf;h++;player_x=px;player_y=py;}void drawballglDisableGL_TEXTURE_2D;glColor3f
1.0,
0.0,
0.0;glutSolidSphere
0.2f,15,15;}void navmazelforwardplayer_x+player_s*floatsinplayer_h*
3.14/180,player_y+player_s*floatcosplayer_h*
3.14/180,
0.2f;coutplayer_xplayer_yendl;play㊀r_h+=play㊀r_t;player_b=3*player_b/4+player_t/4;glClearGL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT;glLoadldentity;glPushMatrix;glRotatef-
90.0f,
1.0f,
0.0f,
0.0f;glRotatefplayer_h,
0.Of,
0.Of,
1.Of;glTranslatef-player_x,-player_y-
0.5f;AglCallList walllist;glPopMatrix;void navmaze2forwardplayer_x+player_m*player_s*floatsinplayer_h*
3.14/180,player_y+player_m*player_s*floatcosplayer_h*
3.14/180,
0.2f;coutplayer_xplayer_xendl;player_h+=player_t;play㊀r_b=3*player_b/4+player_t/4;glClearGL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT;glLoadldentity;glOrtho-
16.0,
16.0,-
16.0,
16.0,-
2.0,
20.0;glPushMatrix;glRotat㊀f
90.0f,
0.0f,
0.0f,
1.0f;glTranslatef-MAZE_WIDTH/2,-MAZE_HE工GHT/2,-
0.5f;glCallList walllist;glCallListmazelist;glPushMatrix;glTranslatefplayer_x,player_y,
0.5f;glCallList balllist;glPopMatrix;glPopMatrix;void myDisplayifstatus==lif searchroute==trueelse navmazel;if status==3if searchroute==trueelse navmaze2;glFlush;glutSwapBuffers;}void myReshapeintw,int hglViewport0,0,w,h;glMatrixModeGL_PROJECTION;glLoadldentity;glMatrixModeGL_MODELVIEW;glLoadldentity;glutPostRedisplay;void specialKeysintkey,intxint yzswitch keycase GLUT_KEY_LEFT:keystate
[2]=true;player_t=-
2.Of;break;case GLUT_KEY_RIGHT:keystate
[3]=true;player_t=
2.Of;break;case GLUT_KEY_UP:keystate
[0]=true;player_s=
0.Olf;break;case GLUT_KEY_DOWN:k㊀ystat㊀
[1]=true;player_s=-
0.Olf;break;default:break;void keyboardunsignedchar key,intx,int yswitchkey11case1:status=l;break;11case3:status=3;break;default:break;glutPostRedisplay;void upSpecialKeyboardintkey,intx,int yswitch keycase GLUT_KEY_LEFT:keystate
[2]=false;player_t=
0.Of;break;case GLUT_KEY_RIGHT:keystate
[3]=false;player_t=
0.Of;break;caseGLUT_KEY_UP:keystate
[0]=false;player_s=
0.Of;break;caseGLUT_KEY_DOWN:keystate
[1]=false;player_s=
0.Of;break;default:break;//glutPostRedisplay;}void idleifkeystate
[0]||keystate
[1]I|keystate
[2]||keystate
[3]glutPostRedisplay;㊀Is㊀{}z o1z2z}//EI-A°Mu6^f^0Ee£OiDx ii£-iEQ QiOIBxI-1»O»O±O0,»«IM£-i^I»a»-AaeIz ao z£OIj£t••-E±paEQi IuU6void mainintargc,char**argvglutlnitargc,argv;glutlnitDisplayMode GLUT_DOUBLE|GLUT_RGB;glutInitWindowSize500,500;glutCreateWindowpolygon modeler;glutDisplayFuncmyDisplay;myinit;glutSpecialFuncspecialKeys;glutKeyboardFunckeyboard;glutSpecialUpFuncupSpecialKeyboard;glutldleFuncidle;glutMainLoop;。