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

📄 grole.h

📁 RPG游戏源代码,里面有RPG游戏的制作流程,供大家学习如何制作RPG游戏
💻 H
字号:
//////////////////////////////////////////////////////////////////////
// GRole.h: interface for the CGRole class.
// RPGDemo框架程序	角色类
// written by 萧萧落木(Roc.j.Wood)
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_GROLE_H__84448672_C1FC_446F_AA80_8BB608118659__INCLUDED_)
#define AFX_GROLE_H__84448672_C1FC_446F_AA80_8BB608118659__INCLUDED_

#include "RPGGame.h"

class CGScene;

enum ROLESTATUS{	//角色状态
	ROLESTAT_NONE = 0,
	ROLESTAT_STAND,
	ROLESTAT_WALKING,
	ROLESTAT_WALKING_TARGET,
};

enum ROLEFLAG{			//角色类型标识
	ROLEFLAG_UNKNOWN=0,	//未知类型
	ROLEFLAG_LEADER,	//主控主角
	ROLEFLAG_FWLEADER,	//跟随主角
	ROLEFLAG_NPC,		//普通对话NPC
	ROLEFLAG_SELLER,	//可买卖的NPC,
	ROLEFLAG_ENEMY,		//敌人
	ROLEFLAG_BOSS,		//BOSS
	ROLEFLAG_SUPERBOSS	//超级BOSS
};

class CGRole		//角色控制类
{
public:
	CGRole(CGScene *pScene);
	virtual ~CGRole();

////////////////////////// CGRole接口部分 /////////////////////////////
public:
	HRESULT	LoadRole(LPCTSTR szFileName);	//装载角色设定文件
	HRESULT	RenderRole();					//渲染角色
	void	AIThinking();					//分时AI思考
	void	FinalClearup();					//结束清扫

	BOOL	CheckMouseHit(LONG lX,LONG lY) const;				//检测鼠标点选
	//***浪人修改*/
	HRESULT RenderCombatRole(LONG lX,LONG lY,POINT MousePos,BOOL Anim=FALSE);	//绘制角色战斗图像
	
////////////////////////// 角色状态控制 ///////////////////////////////
	void	SetMapPos(int mx, int my);		//设置角色的地图坐标
	void	SetDirection(int newdir);		//设置角色方向
	void	GetMapPos(int &mx, int &my) const { mx=XMPos;my=YMPos; }
	SHORT	GetLevel() const { return Level; }	//检测角色的层次信息
	SHORT	GetDirection() const { return Direction; }
	
	ROLESTATUS	GetStatus() const	{ return Status; }	//获取和设置角色状态
	void		SetStatus(ROLESTATUS newstatus)	{ Status=newstatus; }
	
	ROLEFLAG	GetFlag() const	{ return Flag; }		//获取和设置角色类型标示
	void		SetFlag(ROLEFLAG newFlag)	{ Flag=newFlag; }

	const LPCTSTR	GetRoleName() const { return szName; }
	const LPCTSTR	GetScriptFileName() const { return ScriptFile; }

	LONG	GetHP() const { return HP; }
	LONG	GetMP() const { return MP; }
	void	AddHP(LONG x) { HP+=x;if(HP>HP_MAX) HP=HP_MAX; } 
	void	DecHP(LONG x) {HP-=x;if(HP<0) HP = 0;}
	void	AddMP(LONG x) { MP+=x;if(MP>MP_MAX) MP=MP_MAX; } 
	
	LONG	GetHP_MAX() const { return HP_MAX; }
	LONG	GetMP_MAX() const { return MP_MAX; }
	
	LONG	GetEAP() const { return EAP; }
	LONG	GetEDP() const { return EDP; }
	void	AddEAP(LONG x) { EAP=x+AP; }
	void	AddEDP(LONG x) { EDP=x+DP; }
	
///////////////////////////////////////////////////////////////////////

protected:
	HRESULT	LoadGraph(LPCTSTR szFileName);	//装载图像

	SHORT	DecideMoveDirection(int x1, int y1, int x2, int y2) const;	//决定运动方向
	void	RoleWalkOneStep();		//角色行走一步
	void	CheckInput();			//主角输入控制

private:
	CGScene	*m_pScene;		//角色对应的场景

	char	szName[16];			//角色姓名
	char	ScriptFile[32];		//脚本文件
	
	ROLEFLAG	Flag;		//角色类型标示
	ROLESTATUS	Status;		//角色状态
	
	LONG	HP;				//体力	
	LONG	HP_MAX;
	LONG	MP;				//魔法
	LONG	MP_MAX;
	LONG	AP;				//攻击力
	LONG	DP;				//防御力
	LONG	DEX;			//灵敏
	LONG	EAP;			//有效攻击力
	LONG	EDP;			//有效防御力
	
	int		XMPos;			//相对于地图的坐标X(以关键点为参考)
	int		YMPos;			//相对于地图的坐标Y(以关键点为参考)
	SHORT	Level;			//角色层次信息

	CGAFDDrawSurface	m_gGraph;			//精灵图像图层表面
	
	LONG		CellWidth;		//精灵图片中分割的每块宽度
	LONG		CellHeight;		//精灵图片中分割的每块高度
	SHORT		XKPos;			//精灵图片中每块关键点坐标X
	SHORT		YKPos;			//精灵图片中每块关键点坐标Y
	RECT		InsideRECT;		//用于检测碰撞的内部矩形框
	
	SHORT		Direction;		//角度0-7 向下为0 顺时针递增
	SHORT		CurrentFrame;	//统一帧计数
	SHORT		TempFrame;		//临时
	SHORT		FrameCount;		//总帧数

	LONG		MoveDelay;
	LONG		MoveSwapFrameSpeed;
	LONG		MoveSpeed;
	SHORT		MoveGrpahLines[8];

	SHORT		FightFrames;    //战斗帧数
	SHORT		FightGrpahLine; //战斗分解帧在图像中的行数
	
	DWORD		ticktimer;		//计时器
};

typedef CGRole	*LPCGRole;

#endif // !defined(AFX_GROLE_H__84448672_C1FC_446F_AA80_8BB608118659__INCLUDED_)

⌨️ 快捷键说明

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