#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;
}
迷宫游戏代码OpenGL
最新推荐文章于 2021-05-24 17:50:50 发布