📄 tobstacle.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 + -