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

📄 invasion.cpp

📁 类似小蜜蜂的游戏,但是已经3D化了,斑竹给我开通吧,我已经上传了5个了.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		glPrint(400, y, byTemp, 0);
		sprintf(byTemp, "%d",  Highscore[i].iScore);
		glPrint(500, y, byTemp, 0);
	}
}

int DrawGLScene(GLvoid)									// Here's Where We Do All The Drawing
{
	float fTemp;

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	// Clear Screen And Depth Buffer
	if(bProgramStart)
	{
		SwapBuffers(hDC);
		return 0;
	}
	glDisable(GL_LIGHTING);
	glEnable(GL_TEXTURE_2D);
	glDisable(GL_DEPTH_TEST);
	glDisable(GL_BLEND);
	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
	glLoadIdentity();									// Reset The Current Modelview Matrix
	// Draw the background:
	glColor4ub(255,255,255,128);
	glTranslatef(0.0f, 0.0f, -30.0f);
	glMatrixMode(GL_TEXTURE_2D);
	glRotatef(180.0f*float(cos(g_fBackgroundRot/10.0f)),0.0f,0.0f,1.0f);
	glTranslatef((3.0f*float(cos(g_fBackgroundRot)))+(2.1f*float(sin(g_fBackgroundRot*1.4f))),(2.8f*float(sin(g_fBackgroundRot)))+(1.3f*float(sin(g_fBackgroundRot*1.4f))),0.0f);
	glRotatef(10.0f*float(sin(g_fBackgroundRot*1.2f)),1.0f,0.0f,0.0f);
	glMatrixMode(GL_MODELVIEW);
	glCallList(background_list);
	glEnable(GL_CULL_FACE);
	glColor4f(1.0f,1.0f,1.0f, 1.0f);
	glScalef(fPlanetZScale, fPlanetZScale, fPlanetZScale);
	glEnable(GL_DEPTH_TEST);
	glDisable(GL_TEXTURE_2D);
	pPlanet->pChild[1]->Draw(FALSE, FALSE, FALSE);
	glEnable(GL_TEXTURE_2D);
	glEnable(GL_BLEND);
	glColor4f(1.0f,1.0f,1.0f, 0.3f);
	glBindTexture(GL_TEXTURE_2D, GameTexture[5].iOpenGLID);
	pPlanet->pChild[1]->Draw(FALSE, TRUE, FALSE);
	glDisable(GL_BLEND);
	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND);
	if(pPlayer.byLives == -1 || pPlayer.byLives == 0 || pPlayer.byLives == 1)
		pPlanet->pChild[2]->Draw(FALSE, TRUE, FALSE);
	if(pPlayer.byLives == -1 || pPlayer.byLives == 0)
		pPlanet->pChild[3]->Draw(FALSE, TRUE, FALSE);
	glClear(GL_DEPTH_BUFFER_BIT);
	//
	if(!bGameIntro)
	{ // We Are In The Game
		glEnable(GL_DEPTH_TEST);
		/////////////////////////////////////////////////////////////////
		// Dislay The View Data
	/*	sprintf(byTemp, "XRos: %f", fXRot);
		glPrint(320, 100, byTemp, 0);
		sprintf(byTemp, "ZPos: %f", fZPos);
		glPrint(320, 130, byTemp, 0);
		sprintf(byTemp, "PlayerYPos: %f", pPlayer.fPos[Y]);
		glPrint(320, 160, byTemp, 0);*/
		/////////////////////////////////////////////////////////////////
		glEnableLighting();
		ActivateShotLights();
		// Outlines
		glLoadIdentity();
		glTranslatef(-pPlayer.fPos[X], pPlayer.fPos[Y], fZPos);
		glRotatef(fXRot, 1.0f, 0.0f, 0.0f);
		glPushMatrix();
		glLineWidth(3.f);
		glColor3f(1.0f, 1.0f, 1.0f);
		glColor4f(1.0f, 1.0f, 1.0f, 0.8f);
		glBegin(GL_LINES);
			glVertex3f(0.0f, 0.0f, 0.0f);
			glVertex3f(0.0f, SPACE_HEIGHT, 0.0f);
			glVertex3f(SPACE_WIDTH, 0.0f, 0.0f);
			glVertex3f(SPACE_WIDTH, SPACE_HEIGHT, 0.0f);
		glEnd();	
		// Draw Actors
		glDisable(GL_BLEND);
		glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND);		
		DrawShot();    // Draw The Shots
		DrawAlien();   // Draw The Aliens
		if(pPlayer.bShield)
		{
			glEnable(GL_BLEND);
			glColor4f(0.0f, 0.0f, 1.0f, 0.95f);
			glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
			glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
			glEnable(GL_TEXTURE_GEN_S);
			glEnable(GL_TEXTURE_GEN_T);
		}
		DrawPlayer();  // Draw The Player
		glPopMatrix();

		// Wormhole
		glEnable(GL_TEXTURE_2D);
		glEnable(GL_BLEND);
		glDisable(GL_CULL_FACE);
		glDisable(GL_LIGHTING);
		fTemp = fWormholeHitPoints/100;
		glColor4f(1.0f-fTemp, fTemp, fTemp, 0.8f);
		glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
		glBindTexture(GL_TEXTURE_2D, GameTexture[byWormholeAni[byWormholeAniStep]].iOpenGLID);
		glDepthMask(FALSE);
		glDisable(GL_TEXTURE_GEN_S);
		glDisable(GL_TEXTURE_GEN_T);
		glBegin(GL_QUADS);
			// Left bottom
			glNormal3f( 0.0f, 0.0f, 1.0f);
			glTexCoord2f(0.99f, 0.01f); glVertex3f(0.0f, SPACE_HEIGHT, 0.0f);
			glTexCoord2f(0.99f, 0.99f); glVertex3f(SPACE_WIDTH/2, SPACE_HEIGHT, 0.0f);
			glTexCoord2f(0.01f, 0.99f); glVertex3f(SPACE_WIDTH/2, SPACE_HEIGHT, 40.0f);
			glTexCoord2f(0.01f, 0.01f); glVertex3f(0.0f, SPACE_HEIGHT, 40.0f);
			// Right bottom
			glNormal3f( 0.0f, 0.0f, 1.0f);
			glTexCoord2f(0.99f, 0.99f); glVertex3f(SPACE_WIDTH/2, SPACE_HEIGHT, 0.0f);
			glTexCoord2f(0.01f, 0.99f); glVertex3f(SPACE_WIDTH, SPACE_HEIGHT, 0.0f);
			glTexCoord2f(0.01f, 0.01f); glVertex3f(SPACE_WIDTH, SPACE_HEIGHT, 40.0f);
			glTexCoord2f(0.99f, 0.01f); glVertex3f(SPACE_WIDTH/2, SPACE_HEIGHT, 40.0f);
			// Left Top
			glNormal3f( 0.0f, 0.0f, 1.0f);
			glTexCoord2f(0.99f, 0.01f); glVertex3f(0.0f, SPACE_HEIGHT, 0.0f);
			glTexCoord2f(0.01f, 0.01f); glVertex3f(0.0f, SPACE_HEIGHT, -40.0f);
			glTexCoord2f(0.01f, 0.99f); glVertex3f(SPACE_WIDTH/2, SPACE_HEIGHT, -40.0f);
			glTexCoord2f(0.99f, 0.99f); glVertex3f(SPACE_WIDTH/2, SPACE_HEIGHT, 0.0f);
			// Right Top
			glNormal3f( 0.0f, 0.0f, 1.0f);
			glTexCoord2f(0.99f, 0.99f); glVertex3f(SPACE_WIDTH/2, SPACE_HEIGHT, 0.0f);
			glTexCoord2f(0.99f, 0.01f); glVertex3f(SPACE_WIDTH/2, SPACE_HEIGHT, -40.0f);
			glTexCoord2f(0.01f, 0.01f); glVertex3f(SPACE_WIDTH, SPACE_HEIGHT, -40.0f);
			glTexCoord2f(0.01f, 0.99f); glVertex3f(SPACE_WIDTH, SPACE_HEIGHT, 0.0f);
		glEnd();
		glEnable(GL_CULL_FACE);
		glDepthMask(TRUE);

		// Show The Players Lives
		glEnable(GL_BLEND);
		glColor3f(0.0f, 0.0f, 1.0f);
		glColor4f(0.0f, 0.0f, 1.0f, 0.95f);
		glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
		glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
		glEnable(GL_TEXTURE_GEN_S);
		glEnable(GL_TEXTURE_GEN_T);
		if(pPlayer.byLives != -1)
		{
			glBindTexture(GL_TEXTURE_2D, GameTexture[6].iOpenGLID);
			glLoadIdentity();
			glTranslatef(-45.0f, 35.0f, -100.0f);
			glRotatef(fRot[X], 1.0f, 0.0f, 0.0f);
			glRotatef(fRot[Y], 0.0f, 1.0f, 0.0f);
			glRotatef(fRot[Z], 0.0f, 0.0f, 1.0f);
			pShip->pChild[0]->Draw(TRUE, TRUE, FALSE);
			// Display Players Power:
			glLoadIdentity();
			glTranslatef(7.0f, 5.0f, -15.0f);
			glRotatef(90, 0.0f, 1.0f, 0.0f);
			glRotatef(45, 1.0f, 0.0f, 0.0f);
			glRotatef(45, 0.0f, 0.0f, 1.0f);
			glScalef(pPlayer.fPower/pPlayer.fMaxPower, pPlayer.fPower/pPlayer.fMaxPower, pPlayer.fPower/pPlayer.fMaxPower);
			pPower->Draw(TRUE, FALSE, FALSE);
			glDisable(GL_BLEND);
		}
		DrawObjects(); // Draw The Objects

		glDisable(GL_TEXTURE_GEN_S);
		glDisable(GL_TEXTURE_GEN_T);
		glEnable(GL_BLEND);
		// Draw Texts
		glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
		glEnable(GL_TEXTURE_2D);
		glColor4f(1.0f,1.0f,1.0f, 0.8f);
		// Display The Level Name
		glPrint(10, 465, pLevel->byName, 0);
		if(pPlayer.byLives != -1)
		{
			// Show player lives:
			sprintf(byTemp, "* %d", pPlayer.byLives);
			glPrint(130, 430, byTemp, 0);
			// Display Players Power
			sprintf(byTemp, "P: %.3f", pPlayer.fPower);
			glPrint(520, 420, byTemp, 0);
			// Display highscore
			sprintf(byTemp, "%d", iScore);
			glPrint(400, 10, byTemp, 0);
		}
		if(Config.bShowFPS)
		{
			// Display FPS
			sprintf(byTemp, "FPS: %d", g_iFps);
			glPrint(0, 10, byTemp, 0);
		}

		// Draw The Highscore
		if(bPlayerEnteringHighScore)
			DrawPlayersHighscore();	
	}
	else
	{ // We Are In The Game Intro
		// Wormhole
		glLoadIdentity();
		glTranslatef(0.0f, 0.0f, -2.5f);
		glEnable(GL_TEXTURE_2D);
		glEnable(GL_BLEND);
		glColor4f(1.0f, 1.0f, 1.0f, 0.8f);
		glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
		glBindTexture(GL_TEXTURE_2D, GameTexture[byWormholeAni[byWormholeAniStep]].iOpenGLID);
		glDepthMask(FALSE);
		glBegin(GL_QUADS);
			// Left bottom
			glNormal3f( 0.0f, 0.0f, 1.0f);
			glTexCoord2f(0.01f, 0.01f); glVertex3f(-1.0f, -1.0f, 0.0f);
			glTexCoord2f(0.01f, 0.99f); glVertex3f(0.0f, -1.0f, 0.0f);
			glTexCoord2f(0.99f, 0.99f); glVertex3f(0.0f, 0.0f, 0.0f);
			glTexCoord2f(0.99f, 0.01f); glVertex3f(-1.0f, 0.0f, 0.0f);
			// Right bottom
			glNormal3f( 0.0f, 0.0f, 1.0f);
			glTexCoord2f(0.99f, 0.01f); glVertex3f(0.0f, -1.0f, 0.0f);
			glTexCoord2f(0.01f, 0.01f); glVertex3f(1.0f, -1.0f, 0.0f);
			glTexCoord2f(0.01f, 0.99f); glVertex3f(1.0f, 0.0f, 0.0f);
			glTexCoord2f(0.99f, 0.99f); glVertex3f(0.0f, 0.0f, 0.0f);
			// Left Top
			glNormal3f( 0.0f, 0.0f, 1.0f);
			glTexCoord2f(0.99f, 0.01f); glVertex3f(-1.0f, 0.0f, 0.0f);
			glTexCoord2f(0.99f, 0.99f); glVertex3f(0.0f, 0.0f, 0.0f);
			glTexCoord2f(0.01f, 0.99f); glVertex3f(0.0f, 1.0f, 0.0f);
			glTexCoord2f(0.01f, 0.01f); glVertex3f(-1.0f, 1.0f, 0.0f);
			// Right Top
			glNormal3f( 0.0f, 0.0f, 1.0f);
			glTexCoord2f(0.99f, 0.99f); glVertex3f(0.0f, 0.0f, 0.0f);
			glTexCoord2f(0.01f, 0.99f); glVertex3f(1.0f, 0.0f, 0.0f);
			glTexCoord2f(0.01f, 0.01f); glVertex3f(1.0f, 1.0f, 0.0f);
			glTexCoord2f(0.99f, 0.01f); glVertex3f(0.0f, 1.0f, 0.0f);
		glEnd();
		// Draw Title
		glLoadIdentity();
		glTranslatef(0.0f, 1.0f, -6.0f);
		glBindTexture(GL_TEXTURE_2D, GameTexture[13].iOpenGLID);
		glBegin(GL_QUADS);
			glTexCoord2f(0.01f, 0.01f);
			glVertex3f(-3.0f, -1.0f, 0.0f);
			glTexCoord2f(0.99f, 0.01f);
			glVertex3f(-1.0f, -1.0f, 0.0f);
			glTexCoord2f(0.99f, 0.99f);
			glVertex3f(-1.0f, 1.0f, 0.0f);
			glTexCoord2f(0.01f, 0.99f);
			glVertex3f(-3.0f, 1.0f, 0.0f);
		glEnd();
		glBindTexture(GL_TEXTURE_2D, GameTexture[14].iOpenGLID);
		glBegin(GL_QUADS);
			glTexCoord2f(0.01f, 0.01f);
			glVertex3f(-1.0f, -1.0f, 0.0f);
			glTexCoord2f(0.99f, 0.01f);
			glVertex3f(1.0f, -1.0f, 0.0f);
			glTexCoord2f(0.99f, 0.99f);
			glVertex3f(1.0f, 1.0f, 0.0f);
			glTexCoord2f(0.01f, 0.99f);
			glVertex3f(-1.0f, 1.0f, 0.0f);
		glEnd();
		glBindTexture(GL_TEXTURE_2D, GameTexture[15].iOpenGLID);
		glBegin(GL_QUADS);
			glTexCoord2f(0.01f, 0.01f);
			glVertex3f(1.0f, -1.0f, 0.0f);
			glTexCoord2f(0.99f, 0.01f);
			glVertex3f(3.0f, -1.0f, 0.0f);
			glTexCoord2f(0.99f, 0.99f);
			glVertex3f(3.0f, 1.0f, 0.0f);
			glTexCoord2f(0.01f, 0.99f);
			glVertex3f(1.0f, 1.0f, 0.0f);
		glEnd();
		glDepthMask(TRUE);
		// Draw Some Objects On The Screen
		glDisable(GL_BLEND);
		glEnable(GL_DEPTH_TEST);
		glEnable(GL_LIGHTING);
		if(LEVELS == EASTER_EGG_LEVELS)
		{
			glDisable(GL_TEXTURE_2D);
			glLoadIdentity();
			glTranslatef(0.0f, 0.0f, -20.0f);
			glRotatef(fRot[X], 1.0f, 0.0f, 0.0f);
			glRotatef(fRot[Y], 0.0f, 1.0f, 0.0f);
			glRotatef(fRot[Z], 0.0f, 0.0f, 1.0f);
			pAlien5->Draw(TRUE, FALSE, FALSE);
			glEnable(GL_TEXTURE_2D);
		}
		else
		{
			glBindTexture(GL_TEXTURE_2D, GameTexture[5].iOpenGLID);
			glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND);
			glLoadIdentity();
			glTranslatef(-30.0f, 20.0f, -70.0f);
			glRotatef(fRot[X], 1.0f, 0.0f, 0.0f);
			glRotatef(fRot[Y], 0.0f, 1.0f, 0.0f);
			glRotatef(fRot[Z], 0.0f, 0.0f, 1.0f);
			pAlien1->Draw(TRUE, TRUE, FALSE);
			glLoadIdentity();
			glTranslatef(30.0f, 20.0f, -70.0f);
			glRotatef(fRot[X], 1.0f, 0.0f, 0.0f);
			glRotatef(fRot[Y], 0.0f, 1.0f, 0.0f);
			glRotatef(fRot[Z], 0.0f, 0.0f, 1.0f);
			pAlien2->Draw(TRUE, TRUE, FALSE);
			glLoadIdentity();
			glTranslatef(-30.0f, 0.0f, -70.0f);
			glRotatef(fRot[X], 1.0f, 0.0f, 0.0f);
			glRotatef(fRot[Y], 0.0f, 1.0f, 0.0f);
			glRotatef(fRot[Z], 0.0f, 0.0f, 1.0f);
			pAlien3->Draw(TRUE, TRUE, FALSE);
			glLoadIdentity();
			glTranslatef(30.0f, 0.0f, -70.0f);
			glRotatef(fRot[X], 1.0f, 0.0f, 0.0f);
			glRotatef(fRot[Y], 0.0f, 1.0f, 0.0f);
			glRotatef(fRot[Z], 0.0f, 0.0f, 1.0f);
			pAlien4->Draw(TRUE, TRUE, FALSE);
			glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
		}
		// Draw Texts
		glEnable(GL_BLEND);
		if(bShowHighscore)
			DrawPlayersHighscore();
		glColor4f(1.0f, 1.0f, 1.0f, 0.95f);
		if(bAnyKeyMessage)
			glPrint(200, 450, "Press Any Key To Start", 0);
		else
			if(LEVELS == EASTER_EGG_LEVELS)
				glPrint(220, 420, "Or Any Moorhuhn", 0);
		// Credits
		glColor4f(0.7f, 0.7f, 0.7f, 0.95f);
		glPrint(5, 50, "Invasion is a AblazeSpace project (www.ablazespace.de)", 0);
		glPrint(130, 40, "Programmed & Designed by Christian Ofenberg", 0);
		glPrint(170, 30, "Music by Mike Spang", 0);
		glPrint(10, 20, "Thank's to NeHe (nehe.gamedev.net)", 0);
		glPrint(150, 10, "and the Blender (www.blender.nl) crew", 0);
	}	
	SwapBuffers(hDC);									// Swap Buffers (Double Buffering)
	DeactivateShotLights();
	return TRUE;										// Everything Went OK
}

GLvoid KillGLWindow(GLvoid)								// Properly Kill The Window
{
	ASStopMidi();
	DestroySounds();
	glDisableClientState(GL_COLOR_ARRAY);
	glDisableClientState(GL_VERTEX_ARRAY);
	glDisableClientState(GL_NORMAL_ARRAY);
	if (Config.bFullScreen)										// Are We In Fullscreen Mode?
	{
		ChangeDisplaySettings(NULL,0);					// If So Switch Back To The Desktop
		ShowMouseCursor(TRUE);								// Show Mouse Pointer
	}

	KillFont();											// Kill The Font
	DestroyGLTextures();
	glDeleteLists(background_list, NUM_LISTS);
	if (hRC)											// Do We Have A Rendering Context?
	{
		if (!wglMakeCurrent(NULL,NULL))					// Are We Able To Release The DC And RC Contexts?
		{
			MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
		}

		if (!wglDeleteContext(hRC))						// Are We Able To Delete The RC?
		{
			MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
		}
		hRC=NULL;										// Set RC To NULL
	}

	if (hDC && !ReleaseDC(hWnd,hDC))					// Are We Able To Release The DC
	{
		MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
		hDC=NULL;										// Set DC To NULL
	}

	if (hWnd && !DestroyWindow(hWnd))					// Are We Able To Destroy The Window?
	{
		MessageBox(NULL,"Could Not Release hWnd.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
		hWnd=NULL;										// Set hWnd To NULL
	}

	if (!UnregisterClass("OpenGL",hInstance))			// Are We Able To Unregister Class
	{
		MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
		hInstance=NULL;									// Set hInstance To NULL
	}

}

/*	This Code Creates Our OpenGL Window.  Parameters Are:					*
 *	title			- Title To Appear At The Top Of The Window				*
 *	width			- Width Of The GL Window Or Fullscreen Mode				*
 *	height			- Height Of The GL Window Or Fullscreen Mode			*
 *	bits			- Number Of Bits To Use For Color (8/16/24/32)			*
 *	fullscreenflag	- Use Fullscreen Mode (TRUE) Or Windowed Mode (FALSE)	*/
 
BOOL CreateGLWindow(char* title, int width, int height, int bits, BOOL *fullscreen)
{

⌨️ 快捷键说明

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