迷宫游戏代码OpenGL

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值