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

📄 main.c

📁 小游戏是男人就下一百层源码
💻 C
📖 第 1 页 / 共 2 页
字号:
			glVertex3f(127 - i *7,-23, 0.0);

			glTexCoord2f(1.f, 0.f);
			glVertex3f(127 - i * 7,-30, 0.0);

			glEnd();
		
	}


	glDisable(GL_TEXTURE_2D);
//	printf("%d\n",floors);
}
void drawman(void)
{
	glEnable(GL_TEXTURE_2D);
	glBindTexture(GL_TEXTURE_2D, textures[man.animState]); // 显示不同贴图texture[var]
//	glBindTexture(GL_TEXTURE_2D, textures[5]);
//	glFrontFace(GL_CW);
//	glNormal3f(0.f, 0.f, 1.f);
	
	glFrontFace(GL_CW);
	glBegin(GL_QUADS);
	
	glNormal3f(0.f, 0.f, 1.f);
	glTexCoord2f(0.f,0.f);
    glVertex3f(man.x-man.MANWID /2.0, man.y-man.MANHEI /2.0, 0.0);
	glTexCoord2f(0.0f, 1.0f);
	glVertex3f(man.x-man.MANWID /2.0, man.y+man.MANHEI /2.0, 0.0);
	glTexCoord2f(1.f, 1.f);
	glVertex3f(man.x+man.MANWID /2.0, man.y+man.MANHEI /2.0, 0.0);
	glTexCoord2f(1.0f, 0.0f);
	glVertex3f(man.x+man.MANWID /2.0, man.y-man.MANHEI /2.0, 0.0);

	glEnd();	
//	glRectf(man.x - man.MANWID/2.0, man.y - man.MANHEI/2.0, man.x + man.MANWID/2.0, man.y + man.MANHEI/2.0);
	glDisable(GL_TEXTURE_2D);
}
void renderscene(void)
{
	int i;
	glClear (GL_COLOR_BUFFER_BIT);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity (); /* clear the matrix */
/*测试
	glEnable(GL_TEXTURE_2D);
	glBindTexture(GL_TEXTURE_2D, textures[man.animState]);
	glFrontFace(GL_CW);
	glNormal3f(0.f, 0.f, 1.f);

	glRectf(-(140 - 10), 0, -(140 - 10 - 20),20);
*/
	for(i = index_highest; i != index_lowest  ; i = (i +1)%NUMOFBOARDS) // 从highest到lowest-1
		drawboard(boards[i]);
	drawman();
	background();  //画背景
	drawhealth();
	drawfloors();
	glutSwapBuffers();
}

void TimerFunction(int value)
{
	//	a+=x_step;
	//	b+=y_step;
	static int n, t,f;
	int i;
	if(begin)
	{
		//更新板的数组,产生新板,去掉旧板,板的速度为1
		for(i = index_highest; i != index_lowest  ; i = (i +1)%NUMOFBOARDS) //每个板往上移
		{
			boards[i].y +=x_step;
			if(boards[i].y > UPBOUND)
				index_highest = (index_highest + 1)% NUMOFBOARDS; //消失最高的板
		}
		if(drawed)    //产生下一个板的位置和类型
		{
			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);
			drawed = 0;
		}
		if(index_lowest == ((index_highest +NUMOFBOARDS) -1)%NUMOFBOARDS)    //满了
			;
		else												//加一个
		{
			if(boards[((index_lowest +NUMOFBOARDS) -1)%NUMOFBOARDS].y + (HEIGHT/2 - 10) >=ranY)
			{
				boards[index_lowest].x = ranX;
				boards[index_lowest].y = -(HEIGHT/2 - BOTTOM + BHEIGHT/2);
				boards[index_lowest].type = ranType;
				index_lowest = (index_lowest + 1) %NUMOFBOARDS;
				drawed = 1;
			}
		}

		//
		if(man.y >= UPBOUND - man.MANHEI/2.0)//人碰到顶
		{
			man.hp -= 3;
			man.state = 1;
			man.ondown = 1;
			man.animState = MANBEGIN;
			man.vy = -1;
			man.y +=man.vy;
		}
		if(man.state == 0)  //在板上
		{
			if(man.x > boards[man.onboard].x - BLENGTH/2.0 - man.MANWID/2.0
				&&man.x < boards[man.onboard].x + BLENGTH/2.0 + man.MANWID/2.0)
				//		if(man.x > boards[man.onboard].x - BLENGTH/2.0 
				//			&&man.x < boards[man.onboard].x + BLENGTH/2.0 )
			{

				man.y = boards[man.onboard].y + BHEIGHT/2.0 + man.MANHEI/2.0;
				if(man.walk == 0)
					man.animState = MANBEGIN;
				else if(man.walk == 1)  //左走
				{
					++t;
					if(t >= 3)//人物动画快慢调整
					{
						man.animState = (man.animState-(MANBEGIN + 1) + 1)%2 + MANBEGIN+1;		//TODO:更换人物贴图
						t = 0;
					}


				}
				else if(man.walk == 2) //右走
				{
					++t;
					if(t >= 3)// 人物动画快慢调整
					{
						man.animState = (man.animState -(MANBEGIN + 3)+ 1)%2 +MANBEGIN + 3;
						t = 0;
					}
					//				man.x += man.walkspeed;
					//				man.vx = man.walkspeed;
					//				man.walk = 0;
				}
				if(boards[man.onboard].type == 3) //滑下
				{
					++n;
					if(n >= 10)
					{
						man.state = 1;
						man.ondown = 1;
						n = 0;
					}
				}
				if(boards[man.onboard].type == 1&& man.hp <= 0) //带刺
				{
					man.state = 1;
					man.ondown = 1;
				}
			}
			else
			{
				man.state = 1;
			}
		}
		else if (man.state == 1) //在空中
		{
			for(i = man.onboard; i != index_lowest  ; i = (i +1)%NUMOFBOARDS) 
			{
				if(man.x > boards[i].x - BLENGTH/2.0 - man.MANWID/2.0
					&&man.x < boards[i].x + BLENGTH/2.0 + man.MANWID/2.0
					&&man.y > boards[i].y - (MINGAP - BHEIGHT/2.0 - man.MANHEI/2.0)*0.7
					&&man.y <= boards[i].y + BHEIGHT/2.0 + man.MANHEI/2.0)
					break;
			}
			if( man.ondown || i == index_lowest ||man.hp <= 0)//没踩到
			{
				
				if(man.x <= -(WIDTH/2.0 - LEFTE - man.MANWID/2.0))
				{
					man.x = -(WIDTH/2.0 - LEFTE - man.MANWID /2.0);
					man.vx *= -1;
				}
				else if(man.x >= (WIDTH/2.0 - RIGHTE - man.MANWID/2.0))
				{
					man.x = WIDTH/2.0 - RIGHTE - man.MANWID/2.0;
					man.vx *= -1;
				}
				if(man.y < -(HEIGHT/2.0 - BOTTOM))	
					man.hp = 0;
				man.x += man.vx;
				man.y += man.vy;
				if(man.y < boards[i].y - (MINGAP - BHEIGHT/2.0 - man.MANHEI/2.0))
					man.ondown = 0;
				if(man.hp <= 0)
				{
					man.vx = 0;
					man.animState = MANBEGIN;
				}
				else
				{
					if(man.walk == 0)
						man.vx *= 0.8;
					else if(man.walk == 1)
					{
						man.vx = -man.walkspeed;
						man.animState = MANBEGIN + 1;
						//				man.walk = 0;
					}
					else if(man.walk ==2)
					{
						man.vx = man.walkspeed;
						man.animState = MANBEGIN + 3;
						//				man.walk = 0;
					}
					
				}
				man.vy += -0.3;  //加速度
			}
			else						//踩到一块板
			{
				d++;
				if(boards[i].type == 0) //普通板
				{
					man.state =0;  //到板上
					man.animState = MANBEGIN;
					man.vx = 0;
					man.vy = -0.5;
					man.onboard = i;
					man.y =boards[i].y + BHEIGHT/2.0 + man.MANHEI/2.0;
					++man.hp;
					if(man.hp >10)
						man.hp = 10;
				}

				else if(boards[i].type ==1) //带刺
				{ 
					man.state =0;  //到板上
					man.animState = MANBEGIN;
					man.vx = 0;
					man.vy = -0.5;
					man.onboard = i;
					man.y =boards[i].y + BHEIGHT/2.0 + man.MANHEI/2.0;
					//man.hp ++;//TODO:
					man.hp -=3;
				}
				else if(boards[i].type ==2) //弹起
				{
					//	man.state =0;  //到板上
					man.animState = MANBEGIN;
					man.vx = 0;
					man.vy = 4;
					man.y += man.vy;
					man.onboard = i;
					//	man.y =boards[i].y + BHEIGHT/2.0 + man.MANHEI/2.0;
					++man.hp;
					if(man.hp >10)
						man.hp = 10;
				}
				else if(boards[i].type ==3) //滑下
				{
					man.state =0;  //到板上
					man.animState = MANBEGIN;
					man.vx = 0;
					man.vy = -0.5;
					man.onboard = i;
					man.y =boards[i].y + BHEIGHT/2.0 + man.MANHEI/2.0;
					++man.hp;
					if(man.hp >10)
						man.hp = 10;

				}

			}
		}
		
		/////////计算层数//////////////
		++f;
		if(f >= HEIGHT/2.0 - BOTTOM + UPBOUND && man.hp > 0)
		{
			++floors;
			f = 0;
		}
		glutPostRedisplay();
	}
	glutTimerFunc(30, TimerFunction, 1);

}
void KeyPressFunc(unsigned char key, int x, int y)
{
    switch (key)
    {
    case 'b':
	case 'B':
		begin ^= 1;
		break;
    case 'r':
	case 'R':
		begin = 0;
		ini();
		break;
	case 27 : /* ESC */
        exit(0);
    }
 // Refresh the Window
    glutPostRedisplay();
}

void SpecialKeys(int key, int x, int y)
{
    switch (key)
    {
    case GLUT_KEY_LEFT:
		man.walk = 1;
		if(man.state == 0)
		{
			if(man.x <= -(WIDTH/2.0 - LEFTE - man.MANWID/2.0))
			{
				man.x = -(WIDTH/2.0 - LEFTE - man.MANWID/2.0);
			}
			else
				man.x -= man.walkspeed;
			man.vx = -man.walkspeed*0.6;
		}
        break;
    case GLUT_KEY_RIGHT:
		man.walk = 2;
		if(man.state == 0)
		{
			if(man.x >= (WIDTH/2.0 - RIGHTE - man.MANWID/2.0))
			{
				man.x = WIDTH/2.0 - RIGHTE - man.MANWID/2.0;
			}
			else 
				man.x += man.walkspeed;
			man.vx = man.walkspeed*0.6;
		}
        break;
    case GLUT_KEY_UP:
        break;
    case GLUT_KEY_DOWN:
        break;
	case GLUT_KEY_F1:
        break;
	case GLUT_KEY_F2:
        break;
	case GLUT_KEY_F3:
        break;
	case GLUT_KEY_F4:
        break;
	default:
        break;
    }
	// Refresh the Window
    glutPostRedisplay();
}
void releaseKey(int key, int x, int y) {
	switch (key)
    {
    case GLUT_KEY_LEFT:
		man.walk = 0;
        break;
    case GLUT_KEY_RIGHT:
		man.walk = 0;
        break;
    case GLUT_KEY_UP:
        break;
    case GLUT_KEY_DOWN:
        break;
	case GLUT_KEY_F1:
        break;
	case GLUT_KEY_F2:
        break;
	case GLUT_KEY_F3:
        break;
	case GLUT_KEY_F4:
        break;
	default:
        break;
    }
	// Refresh the Window
    glutPostRedisplay();
}
int main(int argc, char **argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
	glutInitWindowSize(400, 300);
//	glutInitWindowPosition(500, 500);
	glutCreateWindow("是男人就下一百层");
	glutReshapeFunc(change_size);
	glutDisplayFunc(renderscene);
	glutTimerFunc(30,TimerFunction, 1);
	setupRC();
	glutKeyboardFunc(KeyPressFunc);
	glutSpecialFunc(SpecialKeys);
	glutSpecialUpFunc(releaseKey);
	glutMainLoop();

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -