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

📄 object.h

📁 Visual C++ 游戏开发与设计实例 源代码(所有)
💻 H
字号:

#ifndef _ASIDER_TANK_ALPHA3_OBJECT_H_
#define _ASIDER_TANK_ALPHA3_OBJECT_H_

#define BULLET_MAXCHANG			4
#define MAXSPEEDONICE			8
#define MAXTANKSPEED			8
#define DEFTANKSPEED			4
#define DEFBULLETSPEED			12

#define DEFBULLETWIDTH			16
#define DEFBULLETHEIGHT			16

#define OBJSTAT_UNUSED			0
#define	OBJSTAT_BORN			0x010000
#define	OBJSTAT_LIVE			0x020000
#define	OBJSTAT_DIE				0x040000
#define	OBJSTAT_CADAVER			0x080000

#define EQUIP_SHIP				0x0001
#define EQUIP_ICE				0x0002

struct TANKCMD {
	unsigned int	cmd;
	bool			fire;
};

//-----------------------------------------------------------------------------
// Type enumeration
//-----------------------------------------------------------------------------
enum	ObjectType { OBJTYPE_NONE, OBJTYPE_TANK, OBJTYPE_BULLET,
					 OBJTYPE_BLOCK, OBJTYPE_BASE, OBJTYPE_EFFECT,
					 OBJTYPE_FOOD };
enum	PropertyType { PROTYPE_NONE };
enum	EffectType { EFFECT_NONE, EFFECT_TANKBOOM, EFFECT_BULLETBOOM };
enum	DirectionType { DIR_NONE, DIR_RIGHT, DIR_DOWN, DIR_UP, DIR_LEFT, DIR_MAX };
enum	TeamType { TEAM_HOME, TEAM_ENEMY, TEAM_NEUTRAL };
enum	LocateIndex { LOC_BLOCK_NONE, LOC_BLOCK_BRICK0, LOC_BLOCK_IRON0,
					LOC_BLOCK_RIVER0, LOC_BLOCK_RIVER1, LOC_BLOCK_RIVER2,
					LOC_BLOCK_GRASS0, LOC_BLOCK_ICE0,
					LOC_OBJECT_TANK0, LOC_OBJECT_TANK1, LOC_OBJECT_BULLET0
				};
enum	FoodType { FOOD_SHIP, FOOD_KEEPBASE, FOOD_POWERUP, FOOD_BLOODUP,
					FOOD_SPEEDUP, FOOD_MAX };

//-----------------------------------------------------------------------------
// Classes defined in this header file 
//-----------------------------------------------------------------------------
class	CObject;
class	CMobileObject;
class	CProperty;

class	CObjBase;
class	CObjBlock;
class	CObjFood;

class	CObjTank;
class	CObjBullet;
class	CObjEffect;


//-----------------------------------------------------------------------------
// Name: class CObject
// Desc: Base Class of all the objects which can change its appearance
//		or position, or just its values of properties
//-----------------------------------------------------------------------------
class CObject
{
protected:
	DWORD		m_dwObjType;
	DWORD		m_dwObjStat;
	int			m_nStatCounter;

	int			m_nLeft;
	int			m_nTop;
	int			m_nWidth;
	int			m_nHeight;
	
	DWORD		m_dwFrameType;
	int			m_nTotalFrame;
	int			m_nCurrentFrame;
	DWORD		m_dwLastTime;
	DWORD		m_dwPersistTime;

public:
	CObject();
	~CObject();

	// Access functions
	DWORD		GetType()				{ return m_dwObjType; }
	DWORD		GetStat()				{ return m_dwObjStat; }
	void		SetStat( DWORD s )		{ m_dwObjStat = s; }
	int			GetLeft()				{ return m_nLeft; }
	int			GetTop()				{ return m_nTop; }
	void		SetPos( int l, int t )	{ m_nLeft = l; m_nTop = t; }
	void		SetOffset( int h, int v )	{ m_nLeft += h;	m_nTop += v; }

	int			GetWidth()				{ return m_nWidth; }
	int			GetHeight()				{ return m_nHeight; }
	RECT		GetRect();	
	
	DWORD		GetFrameType()			{ return m_dwFrameType; }
	int			GetFrameCurrent()		{ return m_nCurrentFrame; }
	int			GetFrameTotal()			{ return m_nTotalFrame; }
	void		SetTotalFrame( int t )	{ m_nTotalFrame = t; }

    // Status functions
	
    // Creation/destruction methods

	// Object methods
	void		NextFrame( DWORD nowtime );
//	bool		TestNextFrame()			{ return ++m_nCurrentFrame < m_nTotalFrame; }
};


//-----------------------------------------------------------------------------
// Name: class CMobileObject
// Desc: Base Class of all the objects which can move
//-----------------------------------------------------------------------------
class CMobileObject : public CObject
{
protected:
	int			m_nMoveStep;

public:
	UINT		m_uiDirection;
	UINT		m_uiTeamType;

public:
	CMobileObject();
	~CMobileObject();

	// Access functions
	int			GetStep()			{ return m_nMoveStep; }
	void		SetStep( int s )	{ m_nMoveStep = s; }	

	RECT		GetNextRect();
	RECT		GetNextRectStep( int step );
	POINT		GetDirectionUnit();

};


//-----------------------------------------------------------------------------
// Name: class CProperty
// Desc: Base Class of all the properties whose value may be changed
//-----------------------------------------------------------------------------
class CProperty
{
protected:
	int			m_nDefaultValue;
	int			m_nCurrentValue;
	int			m_nMaxValue;
	int			m_nMinValue;

public:
	CProperty();
	~CProperty();

	// Access functions

    // Status functions
	bool		IsZero()		{ return m_nCurrentValue == 0; }
	bool		IsMin()			{ return m_nCurrentValue == m_nMinValue; }
  
    // Creation/destruction methods
	void		CreateProperty( int def, int max, int min );
    
	// Object methods
	int			GetPercent( int total )	{ return total*m_nCurrentValue/m_nMaxValue; }
	void		Add( int step );
	bool		Minus( int step );
};


//-----------------------------------------------------------------------------
// Name: class CObjTank
// Desc: Class of Tank object
//-----------------------------------------------------------------------------
class CObjTank : public CMobileObject
{
	bool			m_bHome;
	bool			m_bBoom;
	int				m_nIndex;
	bool			m_bHaveBullet;
	
public:
	bool			m_bMoving;
	bool			m_bOnIce;
	int				m_nIceStep;
	UINT			m_uiIceDir;
	DWORD			m_dwEquip;

	CProperty		m_prtBlood;
	int				m_nAttack;

public:
	CObjTank();
	~CObjTank();

	// Status functions
	bool		IsHomeTeam()				{ return m_bHome; }
	bool		HaveBullet()				{ return m_bHaveBullet; }

	// Access functions
	int			GetBloodPercent(int total)	{ return m_prtBlood.GetPercent(total); }	
	void		NextStat();
	void		SetBullet()					{ m_bHaveBullet = true; }
	void		RemoveBullet()				{ m_bHaveBullet = false; }
	int			GetIndex()					{ return m_nIndex; }
	void		Hited( int attack );

  
    // Creation/destruction methods
	void		CreateTank( int left, int top, bool bHome );
    
	// Methods
	RECT		GetNextRectOnIce();
	POINT		GetDirUnitOnIce();
};


//-----------------------------------------------------------------------------
// Name: class CObjBullet
// Desc: Base Class of all bullet objects which have expecial effects
//-----------------------------------------------------------------------------
class CObjBullet : public CMobileObject
{
	bool			m_bHome;
	int				m_nAttack;
	CObjTank		*m_obkTank;

public:
	CObjBullet();
	~CObjBullet();

	// Status functions
	bool		IsHomeTeam()					{ return m_bHome; }

	// Access functions
	void		NextStat();
	int			GetAttack()						{ return m_nAttack; }
  
    // Creation/destruction methods
	void		CreateBullet( CObjTank *ptk );
    
	// Methods
	void		Hit( CObjTank *ptk ); 
	void		Hit( CObjBullet *pblt );
	void		Rebound()						{ m_uiDirection = 5 - m_uiDirection; }
};

//-----------------------------------------------------------------------------
// Name: class CObjBullet
// Desc: Base Class of all bullet objects which have expecial effects
//-----------------------------------------------------------------------------
class CObjEffect : public CMobileObject
{
	DWORD		m_dwEffect;
	int			m_nAttack;

public:
	CObjEffect();
	~CObjEffect();

	// Access functions
	DWORD		GetEffect()			{ return m_dwEffect; }

    // Creation/destruction methods
	void		CreateEffect( CObject *pobj );
    
	// Methods
};

//-----------------------------------------------------------------------------
// Name: class CObjBase
// Desc: Class of a team's base
//-----------------------------------------------------------------------------
class CObjBase : public CMobileObject
{
	bool		m_bHome;

public:
	CProperty	m_ptyBlood;

public:
	CObjBase();
	~CObjBase();

	// Status functions
	bool		IsHomeTeam()			{ return m_bHome; }

	// Access functions
	RECT		GetSurroundRect();

    // Creation/destruction methods
    void		CreateBase( int x, int y, bool bHome );

	// Methods
};


//-----------------------------------------------------------------------------
// Name: class CObjBase
// Desc: Class of a team's base
//-----------------------------------------------------------------------------
class CObjBlock : public CObject
{
	int			m_nbx;
	int			m_nby;
	int			m_nLand;

public:
	CObjBlock();
	~CObjBlock();

	// Access functions
	int			GetBx()			{ return m_nbx; }
	int			GetBy()			{ return m_nby; }
	int			GetLand()		{ return m_nLand; }

    // Creation/destruction methods
	void		CreateObjBlock( int x, int y, int land );
    
	// Methods
};


//-----------------------------------------------------------------------------
// Name: class CObjBase
// Desc: Class of a team's base
//-----------------------------------------------------------------------------
class CObjFood : public CObject
{
	bool		m_bExsit;
	bool		m_bPresent;
	DWORD		m_dwType;

public:
	CObjFood();
	~CObjFood();

	// Access functions
	void		SetPresent( bool p )	{ m_bPresent = p; }		
	void		SetExsit( bool e )		{ m_bExsit = e; }		
	bool		IsPresent()				{ return m_bPresent; }
	bool		IsExsit()				{ return m_bExsit; }
	DWORD		GetFoodType()			{ return m_dwType; }

    // Creation/destruction methods
	void		CreateFood( DWORD type, int left, int top );
    
	// Methods
	RECT		GetPermitRect();
	void		Benefit( CObjTank *ptk );
};


#endif	// _ASIDER_TANK_ALPHA3_OBJECT_H_

⌨️ 快捷键说明

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