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

📄 gameintro.cpp

📁 基于引擎基础上开发的三维游戏实例“恐怖之战”游戏者可以自爱三维地形上漫游
💻 CPP
字号:
// GameIntro.cpp: implementation of the CGameIntro class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MyGame.h"
#include "GameIntro.h"


#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#ifdef _WIN32
#define drand48() (((float) rand())/((float) RAND_MAX))
#define srand48(x) (srand((x)))
#endif

extern CGameSession GS;
char *message[3]={"Press SPACEBAR to Start Game","Written By PigeonStudio","2001.7.7 CopyRight(c) NUDT"};
char *TitleMessage=message[0];

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CGameIntro::CGameIntro()
{
	Title.Open("data/title.raw");
	Title.Flip();
}

CGameIntro::~CGameIntro()
{

}

void CGameIntro::Clip(Point3f &p)
{
	if(p.x() > 200-p.z() || p.y() > 200-p.z())
	{
		p.x()=(drand48()-0.5)*1000;	
		p.y()=(drand48()-0.5)*1000;	
		p.z()=-800;
	}
};


void CGameIntro::KeyDown(UINT nChar)
{
	switch(nChar)
	{
		case VK_SPACE : Game= &GS;
			GS.Init();
			GS.Reshape(ScreenW,ScreenH);
			break;
	}
}

void CGameIntro::Init(int,int)
{
	CAst3DFract::SetSharedTexture("data/ast.png");
	CMesh AstM;
	AstM.Open("data/tetra.raw");
	if(A.size()<AstNum) 
	{
		A.resize(AstNum);
		for(int i=0;i<AstNum;i++)
		{
			A[i]=new CAst3DFract(AstM,CAst::LargeSize);
			A[i]->p.x()=(drand48()-0.5)*1000;	
			A[i]->p.y()=(drand48()-0.5)*1000;	
			A[i]->p.z()=-800;
			A[i]->v.z()=200;
			A[i]->av=20+drand48()*70;
			A[i]->axis=Normalize(Point3f(drand48(),drand48(),drand48()));
		}
	}
	float lp[4]={1,1,3,0};
	glLightfv(GL_LIGHT0,GL_POSITION,lp);
	glEnable(GL_LIGHT0);
	glEnable(GL_LIGHTING);
	glDisable(GL_CULL_FACE);
	glEnable(GL_COLOR_MATERIAL);
	glEnable(GL_DEPTH_TEST);
	glEnable(GL_NORMALIZE);
	// 播放声音文件  
	if(AudioFlag) 
	{
		APlayModule(lpModule);
		ASetModuleVolume(8);
	}
}

int CGameIntro::Draw()
{
	static float angle=0;
	int nt=0;
	glLoadIdentity();
	glPushMatrix();
	glColor3f((GLfloat).7,(GLfloat).7,(GLfloat)1.);
	int sw=342; // subtitle width
	m_Utility.glPrintf(ScreenW,ScreenH,ScreenW/2,ScreenH/3,1,12, TitleMessage);
	angle+=5.0;
	glRotatef(angle,0,1,0);
	glScalef(40,40,40);
	nt+=Title.DrawDL();
	glPopMatrix();
	glPushMatrix();
	glTranslatef(0,0,-1000);
	glScalef(2000,2000,2000);
	s.Draw();
	glPopMatrix();

	for(int i=0;i<AstNum;i++)
		 nt+=A[i]->Draw();
	return nt;
}

void  CGameIntro::Reshape(int w,int h)
{
	ScreenW=w;
	ScreenH=h;
	int SpaceSize=100;
	float wr=float(w)/h;
	float hr=float(h)/w;

	if(w>h) hr=1;
	else wr=1;
	int VL = -SpaceSize*wr;
	int VR =  SpaceSize*wr;
	int VB = -SpaceSize*hr;
	int VT =  SpaceSize*hr;
	glViewport(0,0,w,h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	gluPerspective(90,1,5,1201);
	gluLookAt(0,0,200,0,0,0,0,1,0);
	glMatrixMode(GL_MODELVIEW);
}

void CGameIntro::Update(int dt)
{
	static int t=0;
	static int titind;
	t+=dt;
	if(t>2000) 
	{
		t=0;
		titind=(titind+1)%3;
		TitleMessage=message[titind];
	}
	s.Update(dt);
	for(int i=0;i<AstNum;i++)
	{
		 A[i]->Update(dt);
		 Clip(A[i]->p);
	}
}

⌨️ 快捷键说明

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