📄 main.c
字号:
#include "head.h"
#include<stdio.h>
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
GLfloat x, y,z;
GLfloat a=0.0, b=20, c=0.0;
GLfloat step=5;
GLfloat x_position[20],y_position[20];
GLfloat y_step=1,x_step=1;
GLfloat x_size=20.0;
GLfloat y_size=10.0;
Board boards[NUMOFBOARDS]; //板的队列
GLint index_highest = 0;
GLint index_lowest = 0;
GLint ranX, ranY,ranType;
GLbyte drawed = 1; //判断是否已加入队列, 是否产生下一个随机位置
Man man;
int d;
int begin = 0;
int floors = 0;
//顶端尖形
void triangle(void)
{
glBindTexture(GL_TEXTURE_2D, textures[0]);
glFrontFace(GL_CW);
z=0.0;
y=90.0;
glBegin(GL_TRIANGLES);
for(x=-140;x<100;x+=10)
{
glNormal3f(0.f, 0.f, 1.f);
glTexCoord2f(0.f, 1.f);
glVertex3f(x, y, z);
glTexCoord2f(1.f, 1.f);
glVertex3f(x + step, y -2*step, z);
glTexCoord2f(1.f, 0.f);
glVertex3f(x +2*step, y+2*step, z);
}
glEnd();
}
void change_size(GLsizei w, GLsizei h)
{
GLfloat aspect;
if(h==0)
h=1;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
aspect=(GLfloat)w/(GLfloat)h;
if(w<=h)
glOrtho(-100.0, 100.0, -100.0/aspect, 100.0/aspect, 1.0, -1.0);
else
glOrtho(-100.0*aspect, 100.0*aspect, -100, 100, 1.0, -1.0);
glMatrixMode(GL_MODELVIEW);
// glLoadIdentity();
}
void ini(void)
{
//计算第一块板
index_highest = 0;
index_lowest = 0;
ranX = rand()%((DISWIDTH - BLENGTH - 2*EMPTYWID)*10)/10 - (WIDTH/2.0 - LEFTE - EMPTYWID - BLENGTH/2.0);
// ranY = rand()%((MAXGAP - MINGAP)*10)/10 + MINGAP; //和上一个板的距离
ranType = rand()%(NUMOFTYPES);
boards[index_lowest].x = ranX;
boards[index_lowest].y = -(HEIGHT/2 - BOTTOM + BHEIGHT/2);
// boards[index_lowest].type = ranType;
boards[index_lowest].type = 0;
index_lowest = 1;
//设置人
man.MANHEI = man.MANWID = 15.0;
man.x = boards[index_lowest-1].x;
// man.y = boards[index_lowest-1].y + BHEIGHT /2.0 + man.MANHEI /2.0;
man.y = boards[index_lowest-1].y + BHEIGHT /2.0 + man.MANHEI /2.0+10;
man.vx = 0.0;
man.vy = 0.0;
man.animState = MANBEGIN;
// man.state = 0;
man.state = 1;
man.onboard = index_lowest -1;
man.ondown = 0;
man.walkspeed = 3;
man.hp = 10;
floors = 0;
}
void setupRC(void)
{
int i;
GLubyte * p_bytes;
GLint i_width, i_height, i_components;
GLenum e_format;
glGenTextures(texture_store, textures);
for(i = 0; i < texture_store; i++)
{
glBindTexture(GL_TEXTURE_2D, textures[i]); // bind one texture
p_bytes = gltLoadTGA(Tfiles[i], &i_width, &i_height,
&i_components, &e_format); // load file
glTexImage2D(GL_TEXTURE_2D, 0, i_components, i_width,
i_height, 0, e_format, GL_UNSIGNED_BYTE, p_bytes); // load the texture
gluBuild2DMipmaps(GL_TEXTURE_2D, i_components, i_width,
i_height, e_format, GL_UNSIGNED_BYTE, p_bytes); // build mip map
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // linearity filter
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); // linearity mip map
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); // texture rounds model
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
free(p_bytes); // free the space
}
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); // color of texture * color of graph
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_NORMALIZE);
// glClearColor(0.0, 0.0, 0.0, 1.0);
ini();
}
void background(void)
{
glEnable(GL_TEXTURE_2D);
triangle();
glBindTexture(GL_TEXTURE_2D, textures[0]);
glFrontFace(GL_CW);
glBegin(GL_QUADS);
z = 0;
for(x = -140; x <100; x += 10)
for(y = 90; y < 100; y += 10)
{
glNormal3f(0.f, 0.f, 1.f);
glTexCoord2f(0.f, 1.f);
glVertex3f(x, y + 10, z);
glTexCoord2f(1.f, 1.f);
glVertex3f(x + 10, y + 10, z);
glTexCoord2f(1.f, 0.f);
glVertex3f(x + 10, y, z);
glTexCoord2f(0.f, 0.f);
glVertex3f(x, y, z);
}
glEnd();
glBindTexture(GL_TEXTURE_2D, textures[0]);
glFrontFace(GL_CW);
glBegin(GL_QUADS);
z = 0;
for(x = -140; x <100; x += 10)
for(y = -100; y < -90; y += 10)
{
glNormal3f(0.f, 0.f, 1.f);
glTexCoord2f(0.f, 1.f);
glVertex3f(x, y + 10, z);
glTexCoord2f(1.f, 1.f);
glVertex3f(x + 10, y + 10, z);
glTexCoord2f(1.f, 0.f);
glVertex3f(x + 10, y, z);
glTexCoord2f(0.f, 0.f);
glVertex3f(x, y, z);
}
glEnd();
glBindTexture(GL_TEXTURE_2D, textures[0]);
glFrontFace(GL_CW);
glBegin(GL_QUADS);
z = 0;
for(x = -140; x <-130; x += 10)
for(y = -100; y < 100; y += 10)
{
glNormal3f(0.f, 0.f, 1.f);
glTexCoord2f(0.f, 1.f);
glVertex3f(x, y + 10, z);
glTexCoord2f(1.f, 1.f);
glVertex3f(x + 10, y + 10, z);
glTexCoord2f(1.f, 0.f);
glVertex3f(x + 10, y, z);
glTexCoord2f(0.f, 0.f);
glVertex3f(x, y, z);
}
glEnd();
glBindTexture(GL_TEXTURE_2D, textures[0]);
glFrontFace(GL_CW);
glBegin(GL_QUADS);
z = 0;
for(x = 100; x <140; x += 10)
for(y = -100; y < 100; y += 10)
{
glNormal3f(0.f, 0.f, 1.f);
glTexCoord2f(0.f, 1.f);
glVertex3f(x, y + 10, z);
glTexCoord2f(1.f, 1.f);
glVertex3f(x + 10, y + 10, z);
glTexCoord2f(1.f, 0.f);
glVertex3f(x + 10, y, z);
glTexCoord2f(0.f, 0.f);
glVertex3f(x, y, z);
}
glEnd();
glDisable(GL_TEXTURE_2D);
}
void drawboard(Board board)
{
glEnable(GL_TEXTURE_2D);
//glBindTexture(GL_TEXTURE_2D, textures[board.type + BOARDBEGIN]); //TODO:不同类型的板贴图不同,用board.type判断
glBindTexture(GL_TEXTURE_2D, textures[board.type + BOARDBEGIN]);
glFrontFace(GL_CW);
glBegin(GL_QUADS);
glNormal3f(0.f, 0.f, 1.f);
glTexCoord2f(1.f,0.f);
glVertex3f(board.x-BLENGTH/2.0, board.y-BHEIGHT/2.0, 0.0);
glTexCoord2f(1.f, 1.f);
glVertex3f(board.x-BLENGTH/2.0, board.y+BHEIGHT/2.0, 0.0);
glTexCoord2f(0.f, 1.f);
glVertex3f(board.x+BLENGTH/2.0, board.y+BHEIGHT/2.0, 0.0);
glTexCoord2f(0.f, 0.f);
glVertex3f(board.x+BLENGTH/2.0, board.y-BHEIGHT/2.0, 0.0);
glEnd();
// glRectf(board.x - BLENGTH/2.0, board.y - BHEIGHT/2.0, board.x + BLENGTH/2.0, board.y + BHEIGHT/2.0);
glDisable(GL_TEXTURE_2D);
}
void drawhealth(void)
{
glEnable(GL_TEXTURE_2D);
// glBindTexture(GL_TEXTURE_2D, textures[15]);
if(man.hp < 0)
man.hp = 0;
glBindTexture(GL_TEXTURE_2D, textures[man.hp + 13]);
// printf("%d\n",man.hp);
glFrontFace(GL_CW);
glBegin(GL_QUADS);
glNormal3f(0.f, 0.f, 1.f);
glTexCoord2f(0.f,0.f);
glVertex3f(110, 0.0, 0.0);
glTexCoord2f(0.f, 1.f);
glVertex3f(110,50, 0.0);
glTexCoord2f(1.f, 1.f);
glVertex3f(115,50, 0.0);
glTexCoord2f(1.f, 0.f);
glVertex3f(115,0, 0.0);
glEnd();
// glRectf(board.x - BLENGTH/2.0, board.y - BHEIGHT/2.0, board.x + BLENGTH/2.0, board.y + BHEIGHT/2.0);
// glRectf(110, 0, 115, 50);
glDisable(GL_TEXTURE_2D);
}
void drawfloors(void)
{
int i ,nf = floors;
int digits[4];
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textures[34]); //显示“第”
glFrontFace(GL_CW);
glBegin(GL_QUADS);
glNormal3f(0.f, 0.f, 1.f);
glTexCoord2f(0.f,0.f);
glVertex3f(108, -20.0, 0.0);
glTexCoord2f(0.f, 1.f);
glVertex3f(108,-8, 0.0);
glTexCoord2f(1.f, 1.f);
glVertex3f(120 ,-8, 0.0);
glTexCoord2f(1.f, 0.f);
glVertex3f(120 ,-20, 0.0);
glEnd();
glBindTexture(GL_TEXTURE_2D, textures[35]); //显示“层”
glFrontFace(GL_CW);
glBegin(GL_QUADS);
glNormal3f(0.f, 0.f, 1.f);
glTexCoord2f(0.f,0.f);
glVertex3f(108, -45.0, 0.0);
glTexCoord2f(0.f, 1.f);
glVertex3f(108,-33, 0.0);
glTexCoord2f(1.f, 1.f);
glVertex3f(120 ,-33, 0.0);
glTexCoord2f(1.f, 0.f);
glVertex3f(120 ,-45, 0.0);
glEnd();
if(nf == 0)
{
i = 0;
// glBindTexture(GL_TEXTURE_2D, textures[15]);
glBindTexture(GL_TEXTURE_2D, textures[24 + 0]);
glFrontFace(GL_CW);
glBegin(GL_QUADS);
glNormal3f(0.f, 0.f, 1.f);
glTexCoord2f(0.f,0.f);
glVertex3f(122 - i *7, -30.0, 0.0);
glTexCoord2f(0.f, 1.f);
glVertex3f(122 - i * 7,-23, 0.0);
glTexCoord2f(1.f, 1.f);
glVertex3f(127 ,-23, 0.0);
glTexCoord2f(1.f, 0.f);
glVertex3f(127 - i * 7,-30, 0.0);
glEnd();
}
for(i = 0 ; i < 4 ; ++i)
{
if(nf == 0)
break;
else
{
digits[i] = nf%10;
nf /=10;
// glBindTexture(GL_TEXTURE_2D, textures[15]);
glBindTexture(GL_TEXTURE_2D, textures[24 + digits[i]]);
glFrontFace(GL_CW);
glBegin(GL_QUADS);
glNormal3f(0.f, 0.f, 1.f);
glTexCoord2f(0.f,0.f);
glVertex3f(122 - i *7, -30.0, 0.0);
glTexCoord2f(0.f, 1.f);
glVertex3f(122 - i * 7,-23, 0.0);
glTexCoord2f(1.f, 1.f);
glVertex3f(127 - i *7,-23, 0.0);
glTexCoord2f(1.f, 0.f);
glVertex3f(127 - i * 7,-30, 0.0);
glEnd();
}
}
for( ; i < 4 ; ++i )
{
glBindTexture(GL_TEXTURE_2D, textures[24]);
glFrontFace(GL_CW);
glBegin(GL_QUADS);
glNormal3f(0.f, 0.f, 1.f);
glTexCoord2f(0.f,0.f);
glVertex3f(122 - i *7, -30.0, 0.0);
glTexCoord2f(0.f, 1.f);
glVertex3f(122 - i * 7,-23, 0.0);
glTexCoord2f(1.f, 1.f);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -