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

📄 aerocraft.cpp

📁 用C++开发的一个人工神经网络小游戏
💻 CPP
字号:
// Aerocraft.cpp: implementation of the CAerocraft class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "EludeObstacle.h"
#include "Aerocraft.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

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

extern int g_WindowsWidth;
extern int g_WindowsHeight;
extern double PI;
extern double g_GRAVITY;
extern double g_TimeElapsed;
extern double g_SCALING_FACTOR;
extern double g_JetAcceleration;
extern double g_AerocraftSize;

extern int ifShowDirection;

CAerocraft::CAerocraft(int cxClient,int cyClient,double rot)
{
}

CAerocraft::CAerocraft()
{
	
}

CAerocraft::~CAerocraft()
{	

}

void CAerocraft::init(int x,int y,double dRotation,double dScale)
{
	m_iJetDirection = 1;
	m_dRotation = 0;
	m_dScale = 1;
	for(int i = 0;i < 30;i++)
	{
		m_tempSPAerocraft[i] = SPAerocraft[i];
	}
	m_vVelocity = 0;
	m_vPos.x = x;
	m_vPos.y = y;
	rotation(dRotation);
	Scale(dScale);
	//重新计算飞行器的新位置
	updateThePosition();
}

void CAerocraft::rotation(double dRotation)
{
	m_dRotation += dRotation;
	if (m_dRotation > 2*PI)
	{
		m_dRotation -= 2*PI;
	}
	C2DMatrix matTransform;
	matTransform.Rotate(-dRotation);
	//把m_tempSPAerocraft里面所储存的外形改变。
	matTransform.TransformSPoints(m_tempSPAerocraft,m_tempSPAerocraft);
}

void CAerocraft::Scale(double dScale)
{
	m_dScale *= dScale;
	C2DMatrix matTransform;
	matTransform.Scale(dScale,dScale);
	//把m_tempSPAerocraft里面所储存的外形改变。
	matTransform.TransformSPoints(m_tempSPAerocraft,m_tempSPAerocraft);
}


void CAerocraft::WorldTransform()
{
	//create a transformation matrix
	C2DMatrix matTransform;
	
	//scale
	matTransform.Scale(m_dScale, m_dScale);

	//rotate -  remember, because the mapping mode is set so that the y
  //axis is pointing up, the rotation is reversed.
	matTransform.Rotate(-m_dRotation);

	//and translate
	matTransform.Translate(m_vPos.x, m_vPos.y);
	
  //now transform the ships vertices
  matTransform.TransformSPoints(m_tempSPAerocraft,m_tempSPAerocraft);

}


//使飞船按照m_vPos向量到达指定的地方。
void CAerocraft::updateThePosition()
{
	updateTheVector();
	C2DMatrix matTransform;
	matTransform.Translate(m_vPos.x, m_vPos.y);
	//matTransform.TransformSPoints(m_tempSPAerocraft,m_SP);
}

//用速度更新飞船的位置向量
void CAerocraft::updateTheVector()
{
	//update the lander's position
	m_vPos += m_vVelocity * g_TimeElapsed * g_SCALING_FACTOR;
}

//因重力而改变的速度
void CAerocraft::updateTheVelocity1()
{
	//now add in the gravity vector
	m_vVelocity.y += g_GRAVITY * g_TimeElapsed;
}

//因推进力而改变的速度
void CAerocraft::updateTheVelocity2()
{
	m_vVelocity.y -= g_JetAcceleration * g_TimeElapsed;
	/*
	m_vVelocity.x += -g_JetAcceleration * g_TimeElapsed * sin(m_dRotation);
	m_vVelocity.y += -g_JetAcceleration * g_TimeElapsed * cos(m_dRotation);
	*/
}

void CAerocraft::updateTheVelocity3()
{
	m_vVelocity.y += g_JetAcceleration * g_TimeElapsed;
	/*
	m_vVelocity.x += g_JetAcceleration * g_TimeElapsed * sin(m_dRotation);
	m_vVelocity.y += g_JetAcceleration * g_TimeElapsed * cos(m_dRotation);
	*/
}

void CAerocraft::updateTheVelocity4()
{
	m_vVelocity.x -= g_JetAcceleration * g_TimeElapsed;
	/*
	m_vVelocity.x += -g_JetAcceleration * g_TimeElapsed * cos(m_dRotation);
	m_vVelocity.y += -g_JetAcceleration * g_TimeElapsed * sin(m_dRotation);
	*/
}

void CAerocraft::updateTheVelocity5()
{
	m_vVelocity.x += g_JetAcceleration * g_TimeElapsed;
	/*
	m_vVelocity.x += g_JetAcceleration * g_TimeElapsed * cos(m_dRotation);
	m_vVelocity.y += g_JetAcceleration * g_TimeElapsed * sin(m_dRotation);
	*/
}

void CAerocraft::showTheAerocraft(CDC *pDC)
{
	/*
	CPen pen,pen2,*p_pen;
	pen.CreatePen(PS_SOLID,2,RGB(220,220,220));
	p_pen = pDC->SelectObject(&pen);
	pDC->MoveTo(m_SP[0].x,m_SP[0].y);
	for(int i = 1;i < 25;i++)
	{
		pDC->LineTo(m_SP[i].x,m_SP[i].y);
	}
	

	pen2.CreatePen(PS_SOLID,2,RGB(241,219,141));
	pDC->SelectObject(&pen2);
	showTheJet(pDC);

	pDC->SelectObject(p_pen);
	pen.DeleteObject();
	

	CPen pen;
	pen.CreatePen(PS_SOLID,2,RGB(241,219,141));
	pDC->SelectObject(&pen);
	showTheJet(pDC);



	CDC ImageDC;
	CBitmap ForeBMP;
	BITMAP bm;
	ForeBMP.LoadBitmap(IDB_BITMAP3);
	ForeBMP.GetBitmap(&bm);
	ImageDC.CreateCompatibleDC(pDC);
	ImageDC.SelectObject(&ForeBMP);
	
	double size = g_AerocraftSize * 6;
	TransparentBlt(pDC->GetSafeHdc(),m_vPos.x - size,m_vPos.y - size,size*2,size*2,ImageDC.GetSafeHdc(),0,0,bm.bmWidth-2,bm.bmHeight,RGB(0xff,0xff,0xff));
	
	ImageDC.DeleteDC();
	*/
}

void CAerocraft::showTheJet(CDC *pDC,int drawX)
{
	int i;
	if(m_iJetDirection == 2)
	{
		pDC->MoveTo(jet[0].x * m_dScale + drawX,jet[0].y * m_dScale + m_vPos.y);
		for(i = 1;i < 5;i++)
		{
			pDC->LineTo(jet[i].x * m_dScale + drawX,jet[i].y * m_dScale + m_vPos.y);
		}
	}
	if(m_iJetDirection == 3)
	{
		pDC->MoveTo(-jet[0].x * m_dScale + drawX,-jet[0].y * m_dScale + m_vPos.y);
		for(i = 1;i < 5;i++)
		{
			pDC->LineTo(-jet[i].x * m_dScale + drawX,-jet[i].y * m_dScale + m_vPos.y);
		}
	}
	if(m_iJetDirection == 4)
	{
		pDC->MoveTo(jet[0].y * m_dScale + drawX , jet[0].x * m_dScale + m_vPos.y);
		for(i = 1;i < 5;i++)
		{
			pDC->LineTo(jet[i].y * m_dScale + drawX , jet[i].x * m_dScale + m_vPos.y);
		}
	}
	if(m_iJetDirection == 5)
	{		
		pDC->MoveTo(-jet[0].y * m_dScale + drawX , -jet[0].x * m_dScale + m_vPos.y);
		for(i = 1;i < 5;i++)
		{
			pDC->LineTo(-jet[i].y * m_dScale + drawX , -jet[i].x * m_dScale + m_vPos.y);
		}
	}


	if(ifShowDirection == 0)
	{
		int centerX = g_WindowsWidth * 3/4;
		int centerY = g_WindowsHeight / 2;
		CPen pen,pen2,*p_pen;
		pen.CreatePen(PS_SOLID,2,RGB(255,255,128));
		p_pen = pDC->SelectObject(&pen);
		
		
		if(m_iJetDirection == 2)
		{		
			pDC->MoveTo(0 + centerX,-40 + centerY);
			pDC->LineTo(10 + centerX,-30 + centerY);
			pDC->LineTo(5 + centerX,-30 + centerY);
			pDC->LineTo(5 + centerX,-10 + centerY);
			pDC->LineTo(-5 + centerX,-10 + centerY);
			pDC->LineTo(-5 + centerX,-30 + centerY);
			pDC->LineTo(-10 + centerX,-30 + centerY);
			pDC->LineTo(0 + centerX,-40 + centerY);
		}
		else if(m_iJetDirection == 3)
		{		
			pDC->MoveTo(0 + centerX,40 + centerY);
			pDC->LineTo(10 + centerX,30 + centerY);
			pDC->LineTo(5 + centerX,30 + centerY);
			pDC->LineTo(5 + centerX,10 + centerY);
			pDC->LineTo(-5 + centerX,10 + centerY);
			pDC->LineTo(-5 + centerX,30 + centerY);
			pDC->LineTo(-10 + centerX,30 + centerY);
			pDC->LineTo(0 + centerX,40 + centerY);
		}
		else if(m_iJetDirection == 4)
		{		
			pDC->MoveTo(-40 + centerX,0 + centerY);
			pDC->LineTo(-30 + centerX,10 + centerY);
			pDC->LineTo(-30 + centerX,5 + centerY);
			pDC->LineTo(-10 + centerX,5 + centerY);
			pDC->LineTo(-10 + centerX,-5 + centerY);
			pDC->LineTo(-30 + centerX,-5 + centerY);
			pDC->LineTo(-30 + centerX,-10 + centerY);
			pDC->LineTo(-40 + centerX,0 + centerY);
		}
		else if(m_iJetDirection == 5)
		{		
			pDC->MoveTo(40 + centerX,0 + centerY);
			pDC->LineTo(30 + centerX,10 + centerY);
			pDC->LineTo(30 + centerX,5 + centerY);
			pDC->LineTo(10 + centerX,5 + centerY);
			pDC->LineTo(10 + centerX,-5 + centerY);
			pDC->LineTo(30 + centerX,-5 + centerY);
			pDC->LineTo(30 + centerX,-10 + centerY);
			pDC->LineTo(40 + centerX,0 + centerY);
		}
		
		
		//用虚线画出箭头
		pen2.CreatePen(PS_DOT,1,RGB(255,255,0));
		p_pen = pDC->SelectObject(&pen2);
		if(m_iJetDirection != 2)
		{		
			pDC->MoveTo(0 + centerX,-40 + centerY);
			pDC->LineTo(10 + centerX,-30 + centerY);
			pDC->LineTo(5 + centerX,-30 + centerY);
			pDC->LineTo(5 + centerX,-10 + centerY);
			pDC->LineTo(-5 + centerX,-10 + centerY);
			pDC->LineTo(-5 + centerX,-30 + centerY);
			pDC->LineTo(-10 + centerX,-30 + centerY);
			pDC->LineTo(0 + centerX,-40 + centerY);
		}
		if(m_iJetDirection != 3)
		{		
			pDC->MoveTo(0 + centerX,40 + centerY);
			pDC->LineTo(10 + centerX,30 + centerY);
			pDC->LineTo(5 + centerX,30 + centerY);
			pDC->LineTo(5 + centerX,10 + centerY);
			pDC->LineTo(-5 + centerX,10 + centerY);
			pDC->LineTo(-5 + centerX,30 + centerY);
			pDC->LineTo(-10 + centerX,30 + centerY);
			pDC->LineTo(0 + centerX,40 + centerY);
		}
		if(m_iJetDirection != 4)
		{		
			pDC->MoveTo(-40 + centerX,0 + centerY);
			pDC->LineTo(-30 + centerX,10 + centerY);
			pDC->LineTo(-30 + centerX,5 + centerY);
			pDC->LineTo(-10 + centerX,5 + centerY);
			pDC->LineTo(-10 + centerX,-5 + centerY);
			pDC->LineTo(-30 + centerX,-5 + centerY);
			pDC->LineTo(-30 + centerX,-10 + centerY);
			pDC->LineTo(-40 + centerX,0 + centerY);
		}
		if(m_iJetDirection != 5)
		{		
			pDC->MoveTo(40 + centerX,0 + centerY);
			pDC->LineTo(30 + centerX,10 + centerY);
			pDC->LineTo(30 + centerX,5 + centerY);
			pDC->LineTo(10 + centerX,5 + centerY);
			pDC->LineTo(10 + centerX,-5 + centerY);
			pDC->LineTo(30 + centerX,-5 + centerY);
			pDC->LineTo(30 + centerX,-10 + centerY);
			pDC->LineTo(40 + centerX,0 + centerY);
		}
	}
	
}

⌨️ 快捷键说明

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