#include <windows.h> // Must have for Windows platform builds //#include "gl\glee.h" // OpenGL Extension ¡°autoloader¡± #include <gl\gl.h> // Microsoft OpenGL headers (version 1.1 by themselves) #include <gl\glu.h> // OpenGL Utilities #include "gl\glut.h" // Glut (Free-Glut on Windows) #include <time.h> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define Eas 20 #define Mid 30 #define Dif 50 double x1=0.9f,y2=-0.9f; int HP=100,X=19,Y=19; int map[20][20]; void drawCNString(const char* str) { int len, i; wchar_t* wstring; HDC hDC = wglGetCurrentDC(); //»ñÈ¡ÏÔʾÉ豸 GLuint list = glGenLists(1); //ÉêÇë1¸öÏÔʾÁбí //¼ÆËã×Ö·ûµÄ¸öÊý //Èç¹ûÊÇË«×Ö½Ú×Ö·ûµÄ£¨±ÈÈçÖÐÎÄ×Ö·û£©£¬Á½¸ö×Ö½Ú²ÅËãÒ»¸ö×Ö·û //·ñÔòÒ»¸ö×Ö½ÚËãÒ»¸ö×Ö·û len = 0; for(i=0; str[i]!='\0'; ++i) { if( IsDBCSLeadByte(str[i]) ) ++i; ++len; } // ½«»ìºÏ×Ö·ûת»¯Îª¿í×Ö·û wstring = (wchar_t*)malloc((len+1) * sizeof(wchar_t)); MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str, -1, wstring, len); wstring[len] = L'\0';// Ö»ÊÇתÒå·û,Ëü±¾ÉíµÄÀàÐÍÊÇwchar_t // Öð¸öÊä³ö×Ö·û for(i=0; i<len; ++i) { wglUseFontBitmapsW(hDC, wstring[i], 1, list); glCallList(list); } // »ØÊÕËùÓÐÁÙʱ×ÊÔ´ free(wstring); glDeleteLists(list, 1); } void RenderScene(void) { if(map[X][Y]==2) { map[X][Y]=0; HP-=2; } else if(map[X][Y]==3) exit(0); glClear(GL_COLOR_BUFFER_BIT); //glRotatef(1.0f, 1.0f, 0.0f, 0.0f); //glRotatef(1.0f, 0.0f, 1.0f, 0.0f); glPushMatrix(); glColor3f(1.0,1.0,1.0); glBegin(GL_POLYGON); glVertex2f(x1,y2); glVertex2f(x1+0.1f,y2); glVertex2f(x1+0.1f,y2-0.1f); glVertex2f(x1,y2-0.1f); glEnd(); int tmp1=0,tmp2=0; for(double i=-1.0f; i<=1.0f; i+=0.1f) { tmp1=0; for(double j=1.0f; j>=-1.0f; j-=0.1f) { if(map[tmp1][tmp2]==1) { glColor3f(0.6f,0.4f,0.12f); glBegin(GL_POLYGON); glVertex2f(i,j); glVertex2f(i+0.1f,j); glVertex2f(i+0.1f,j-0.1f); glVertex2f(i,j-0.1f); glEnd(); } if(map[tmp1][tmp2]==2) { glColor3f(0.0f,1.0f,0.0f); glBegin(GL_POLYGON); glVertex2f(i,j); glVertex2f(i+0.1f,j); glVertex2f(i+0.1f,j-0.1f); glVertex2f(i,j-0.1f); glEnd(); } if(map[tmp1][tmp2]==3) { glColor3f(0.25f,0.25f,0.25f); glBegin(GL_POLYGON); glVertex2f(i,j); glVertex2f(i+0.1f,j); glVertex2f(i+0.1f,j-0.1f); glVertex2f(i,j-0.1f); glEnd(); } tmp1++; } tmp2++; } glColor3f(1.0,1.0,1.0); wglUseFontBitmaps(wglGetCurrentDC(),0,256,1000);//Éú³É256¸ö×Ö·ûµÄÏÔʾÁбí glListBase(1000); //ºÍÇ°Ò»Óï¾äÖеÄ1000¶ÔÓ¦ glRasterPos2f(-1.0f,0.9f); //Ö¸¶¨×Ö·û´®ÏÔʾµÄλÖà drawCNString("Ѫ:"); char A[6]; sprintf(A,"%6d",HP); glCallLists(6,GL_UNSIGNED_BYTE,A) ; glPopMatrix(); glutSwapBuffers(); } void processNormalKeys(unsigned char key,int x,int y) { if(key=='a'&&x1>-1.0f &&map[X][Y-1]!=1) { x1-=0.1f; Y--; } if(key=='s'&&y2>-0.9f &&map[X+1][Y]!=1) { y2-=0.1f; X++; } if(key=='d'&&x1<0.9f &&map[X][Y+1]!=1) { x1+=0.1f; Y++; } if(key=='w'&&y2<1.0f &&map[X-1][Y]!=1) { y2+=0.1f; X--; } } void abc() { RenderScene(); } void SetupRC(void) { glClearColor(0.0f, 0.0f, 1.0f, 1.0f); glColor3f(1.0f, 1.0f, 1.0f); } int queue[Dif+10]; int main(int argc, char* argv[]) { memset(map,-1,sizeof(map)); srand(time(NULL)); int a=19,b=19; for(int i=0; i<Dif; i++) { map[a][b]=rand()%2; if(map[a][b]==1) map[a][b]=2; while(1) { int x=rand()%3; if(x==0) { if(a==0)continue; if(map[a-1][b]==-1) { a--; break; } } else if(x==1) { if(b==0)continue; if(map[a][b-1]==-1) { b--; break; } } else if(x==2) { if(a==19)continue; if(map[a+1][b]==-1) { a++; break; } } if(a==0||b==0) break; } //system("start"); } map[a][b]=3; for(int i=0; i<20; i++) for(int j=0; j<20; j++) if(map[i][j]==-1&&!(i==19&&j==19)) map[i][j]=rand()%3; //system("start"); glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); glutCreateWindow("ħËþ"); glutDisplayFunc(RenderScene); glutIdleFunc(abc); glutKeyboardFunc(processNormalKeys); SetupRC(); glutMainLoop(); return 0; }