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

📄 tobstacle.cpp

📁 一个另类的坦克大战源程序
💻 CPP
字号:
// TObstacle.cpp: implementation of the TObstacle class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "TObstacle.h"
#include "TBonus.h"
#include "TBullet.h"
#include "TExplode.h"
#include "TWorld.h"

EPG TObstacle::m_epg[2];

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


TObstacle::TObstacle(int x,int y,OBSTACLE nType)
:TObject(x,y,CLASS_TOBSTACLE),m_nType(nType),m_nCurrentFrame(0)
{
	SetDelayTimer(100);
	switch(m_nType)
	{
	case OBSTACLE_BOX:	//木箱
		//硬度100
		m_nHardiness = 100;	
		break;
	case OBSTACLE_END:	//邪恶源
		//硬度1000! ,非常硬
		m_nHardiness = 1000;
		break;
	}
}

TObstacle::~TObstacle()
{
}

void TObstacle::Destroy()
{
	m_epg[0].Destroy();
	m_epg[1].Destroy();
}

/////////////////////////////////////////////
//击中测试
BOOL TObstacle::HitBy(TObject * pObj)
{
	if(HitTest(pObj))
	{
		//////////////////////////////////////
		//只能被光弹击中
		if(pObj->ClassType()==CLASS_TBULLET)
		{
			TBullet * pBullet = (TBullet*)pObj;
			if(pBullet->m_nType == LIGHT)
			{
				m_nHardiness -= pBullet->m_nShield ;
				return TRUE;
			}
		}
	}
	return FALSE;
}

//////////////////////////////////////////
//移动
void TObstacle::Move()
{
	if(!IsMyTime())
		return ;

	//计算当前帧
	++m_nCurrentFrame%=m_epg[m_nType].GetFrameCount();

	if(m_nHardiness<0){
		
		//消失
		Dead();	

		if(m_nType == OBSTACLE_END)
		{
			//邪恶源被击毁,过关

			//强烈爆炸
			g_world.ExplodeLink().Add(NEW TExplode(m_nX,m_nY,
				EXPLODE_PLAYER));

			//经验值+1000
			g_world.Player(0)->m_nExper += 1000;

			//进入下一关
			g_game_status = GAME_STAGECLEAR;

		}else if(m_nType == OBSTACLE_BOX)
		{
			//产生一个随机物品
			g_world.BonusLink().Add(NEW TBonus(m_nX,m_nY,
				(BONUS)Rand(0,3)));

			//然后爆炸
			g_world.ExplodeLink().Add(NEW TExplode(m_nX,m_nY,
				EXPLODE_BOX));
		}
	}
}


///////////////////////////////////////////
//画出来
void TObstacle::Draw()
{
	POINT p;
	p.x = m_nX;
	p.y = m_nY;
	g_world.LPToDP(p);
	WGE_Surface.Blt(m_epg[m_nType],
		m_nCurrentFrame,
		p.x,p.y );
}


/////////////////////////////////////////////////////
//碰撞边框
void TObstacle::GetRect(RECT& rc)
{
	rc.left = m_nX - m_epg[m_nType].GetFrame(m_nCurrentFrame)->m_nKeyX;
	rc.top = m_nY - m_epg[m_nType].GetFrame(m_nCurrentFrame)->m_nKeyY;
	rc.bottom = rc.top + m_epg[m_nType].GetFrame(m_nCurrentFrame)->m_dwHeight ;
	rc.right = rc.left + m_epg[m_nType].GetFrame(m_nCurrentFrame)->m_dwWidth ;
}

⌨️ 快捷键说明

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