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

📄 crole.h

📁 一个个人开发的rpg游戏<亚特兰蒂斯传奇>的源码
💻 H
字号:
//角色类
//作者:吴振华(kylinx)(中国科大01级11系)
//E-mail:game-diy@163.com
//创建于:2003/6/16 by Kylinx
//首次修改于:2003/6/18 by kylinx
//修改内容:角色属性中加上“性格”属性(kidney),适用于敌人在战斗时候的策略
//第二次修改于:2003/6/23 by Kylinx
//修改内容:角色属性中加上dwOldTime和dwFrameDelay,用于控制帧
//第三次修改于:2003/6/27 by Kylinx
//修改内容:增加函数BOOL MoveTo(CLog*pLog,CMap*pMap,int x,int y);
//			增加成员BOOL bMoving,STPath Path;
//					int DestPosX,DestPosY;									
//					int OldDestPosX,OldDestPosY;
//第四次修改于:2003/7/1 by Kylinx
//内容:增加成员nLayer,设定角色层次
//第n次修改于2003/7/11
//内容:增加成员bStandNPC代表npc是否可以随机移动
#ifndef LOA_ROLE_H_	//LOA这个前缀代表Legend Of Atlantis
#define LOA_ROLE_H_
#include<windows.h>
#include"CFindPath.h"
//BTW:为了简单,我全部使用数组而不是指针或者链表
#define LOA_MAX_CARRY_GOODS	 32								//每个角色能携带的最大物品数量
#define LOA_MAX_MAGIC		 16								//每个角色能拥有的最大魔法数量

#define LOA_ROLE_PLAYER		 0								//角色属性——玩家
#define LOA_ROLE_ENEMY		 1								//角色属性——普通敌人
#define LOA_ROLE_NPC		 2								//角色属性——NPC
#define LOA_ROLE_BOSS		 3								//角色属性——BOSS

#define LOA_ROLE_DIR_DOWN	 0								//角色方向——下
#define LOA_ROLE_DIR_LEFT	 1								//角色方向——左
#define LOA_ROLE_DIR_UP      2								//角色方向——上
#define LOA_ROLE_DIR_RIGHT   3								//角色方向——右


#define LOA_KIDNEY_ATTACK    0x0001							//角色性格——全力攻击类型
#define LOA_KIDNEY_DEFEND	 0x0002							//角色性格——注重防守型
#define LOA_KIDNEY_MAGIC	 0x0003							//角色性格——注重魔法类型
#define LOA_KIDNEY_ESCAPE	 0x0004							//角色性格——逃命类型	
class CLog;
class CGame;
class STGood;
struct STMagic;
class CRole
{
public:
	int nID;												//角色唯一的ID
	char szSegmentName[32];
	char szName[32];										//角色名字
	char szNpcScriptFile[128];								//npc脚本文件
	int nKinds;												//角色属性

	int x,y;												//人物在地图上的坐标
	int DeltaX,DeltaY;	
	
	int Speed;												//移动速度

	int nMaxStepFrames;										//总共有多少移动的帧
	int nCurrentStepFrames;									//当前帧
	DWORD dwOldTime;
	DWORD dwFramsDelay;										//帧延迟
	
	DWORD dwOldPlanTime;
	DWORD dwFindRoadDelay;									//旬路延迟

	int nDirection;											//方向
	
	int nCurrentPathStep;									//当前走的路径
	int DestPosX,DestPosY;									//寻路的目的点
	int OldDestPosX,OldDestPosY;							//上一个寻路的目的点
	STPath Path;											//按照A*算法寻到的路径
	BOOL bStandNPC;											//是否是不移动的NPC

	BOOL bMoving;											//是否正在按照寻到的路径在移动
	BOOL bShow;												//是否显示
	
	BOOL bOffsiteOk;										//是否偏移完成

	int nLayer;												//层次,默认为3
//////////////////////////////////////////////////////////////////////////////////////////////
	BOOL bDead;												//是否死亡
	int Kidney;												//性格
	int Hp;													//Hp
	int MaxHp;												//当前等级最大hp
	int Mp;													//Mp
	int MaxMp;												//当前等级最大Mp
	int Exp;												//经验值
	int MaxExp;												//当前等级最大经验值
	
	int Level;												//等级

	int Attack;												//总攻击力
	int BasicAttack;										//基本攻击力

	int WeaponAttack;										//武器攻击力
	int WeaponExp;											//武器经验值
	int WeaponMaxExp;										//武器当前最大经验值
	int WeaponLevel;										//武器等级

	int Defend;												//总防御力
	int BasicDefend;										//基本防御力
	
	int DefendDefend;										//防具的防御力
	int DefendExp;											//防具经验值
	int DefendMaxExp;										//防具最大经验值
	int DefendLevel;										//防具等级


	int Smart;												//敏捷度

	int Money;												//携带的金钱


	int GoodsNum;											//当前携带的物品数量
	int GoodsData[LOA_MAX_CARRY_GOODS];						//物品数组
															//说明一下:这里使用的是,每个数组元素代表携带一件物品
															//值对应的是物品的索引,0表示未使用

	int MagicNum;											//当前拥有的魔法数
	int MagicData[LOA_MAX_MAGIC];							//魔法的数据
															//值对应的是魔法索引

	int nRolePicStyle;
	RECT rect[4][3];
/////////////////////////////////////////////////////////////////////////////////////////////
public:
	CRole();
	virtual ~CRole();
	void LevelUp();											//由于升级而重新计算HP,MP,EXP等等
	void AddExp(int exp);									//增加经验值

	void WeaponLevelUp();									//武器升级
	void AddWeaponExp(int exp);								//增加武器经验值

	void DefendLevelUp();									//防具升级
	void AddDefendExp(int exp);								//增加防具经验值

	BOOL AddGoods(int GoodsIndex);							//添加物品索引为GoodsIndex的物品,若不能添加则返回false
	void DelGoods(int ArrayIndex);							//删除物品数据库中第ArrayIndex个物品

	void UseGood(STGood*pGood);
	void UseMagicInMenu(STMagic*pMagic);

	BOOL AddMagic(int MagicIndex);							//添加魔法索引为MagicIndex的物品,若不能添加则返回false

	void AddMoney(int Money);								//改变数量为Money的金钱

	int AttackRole(CRole*pRole);							//攻击pRole
	int DefendRole(CRole*pRole);							//防御pRole的攻击

	int GetID(){return nID;}
	char*GetName(){return szName;}

	void ShowRole(BOOL bShow);								//是否显示角色
	void SetRolePostion(int x,int y);						//设置角色坐标
	void SetDirection(int nDir);							//设置方向
	BOOL MoveRole(RECT *prtArea,CGame*pGame);				//在范围prtArea内移动一步
	void MoveAni();											//移动的动画

	BOOL IsRoleComboRole(CRole*pRole);

	BOOL GetNextStep(int &x,int &y);
	BOOL MoveLeft(CGame*pGame,BOOL bChangeDir=false);
	BOOL MoveRight(CGame*pGame,BOOL bChangeDir=false);
	BOOL MoveUp(CGame*pGame,BOOL bChangeDir=false);
	BOOL MoveDown(CGame*pGame,BOOL bChangeDir=false);
	BOOL JudgeAndMoveLeft(CGame*pGame,BOOL bChangeDir=false);
	BOOL JudgeAndMoveRight(CGame*pGame,BOOL bChangeDir=false);
	BOOL JudgeAndMoveUp(CGame*pGame,BOOL bChangeDir=false);
	BOOL JudgeAndMoveDown(CGame*pGame,BOOL bChangeDir=false);
	BOOL MoveTo(CLog*pLog,CGame*pGame,int x,int y);			//移动到地图上某点
};

#endif

⌨️ 快捷键说明

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