⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 小游戏是男人就下一百层源码
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -