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

📄 role.h

📁 圣剑二完整的游戏代码。附作者写的三篇文章。游戏的开发过程
💻 H
字号:
//********************************************
//	角色 相关函数
//  创建于2000年4月14日
//********************************************

#ifndef _ROLE_H_
#define _ROLE_H_

#define CenterX 304
#define CenterY 240
#define MAXGOODS 64
#define MAXARM 32

//人物的参数结构
struct stRolePropertiy{
	int Level;		//等级
	int Exp;		//经验
	int MaxExp;		//到下一级所需的经验

	int Hp;			//生命
	int MaxHp;		//生命最大值
	int Mp;			//魔法
	int MaxMp;		//魔法最大值

	int Attack;		//攻击
	int Defend;		//防御

	int Magic;		//魔力
	int Stamina;	//耐力
	int Luck;		//幸运
	int Speed;		//敏捷
	int Bp;			//体力0%-100%
	int Ip;			//精神0%-100%

	int Money;		//金钱
	WORD Arms;		//武器
	WORD Corselet;	//护具

	int CurGoodsNum;			//物品总数
	short Goods[MAXGOODS];		//物品(最多可带64种)
	short GoodsNum[MAXGOODS];	//每种物品的数量

	int CurArmNum;				//装备总数
	short Arm[MAXARM];			//装备(最多可带32种)
	short ArmNum[MAXARM];		//每种装备的数量

	int MagicsNum;				//当前魔法总数
	short Magics[10];			//装备的魔法

	char Fight_Ini_Name[64];	// 战斗中角色图片数据的ini文件
	int use;					// 用来判断此角色是否使用
};

//人物状态
struct stRoleState{
	//------状态数据----------
	int x, y;			//当前坐标 脚底中心点
	int oldx,oldy;		//上一步的坐标
	int X, Y;			//所在格子坐标
	int oldX, oldY;		//上一步
	byte CurrentStep;	//当前步数
	byte CurrentDir;	//当前方向
	byte LastDir;		//上一步的方向
	BOOL bActive;		//是否活动
	BOOL bShow;			//是否可见
	
	LPDIRECTDRAWSURFACE Surface;			//行走的页面
	LPDIRECTDRAWSURFACE lpShadow;			//影子页面
	int SW, SH;			//影子大小
	char SurfaceFileName[32];	//对应文件
};

//   2
// 1   3
//   0

//角色类
class CRole
{
public:
	//------通用数据----------
	int Id;				//角色编号
	char Name[32];		//名字
	int Width, Height;	//单张尺寸
	byte Max_Step;		//每个方向行走的步数
	byte Max_Dir;		//方向数
	byte StepList[4];	//行走图片变换列表
	byte DirList[4];	//行走方向列表
	POINT FootRect[4];	//脚底碰撞矩阵
	int StepSize;		//每步走的距离
	int StepSize2;		//斜向走的距离

	char ScriptFile[64];				//对应脚本
	stRolePropertiy Propertiy;		//人物属性
	stRoleState State;				//人物状态

	//------移动数据-----------
	POINT *Path;		//行走路线
	int PathSteps;		//总步数
	int PathCurrentStep;//当前步数
	int DesX, DesY;		//行走目标点
	bool bMoving;		//是否正在移动标志
	int StepStep;		//步伐判断
	BOOL bCuted;		//路径是否被减切
	int MoveX, MoveY;	//当前步的坐标变化
	bool bShowed;		//是否已经显示过一次
	int oldAttack;
	int oldDefend;

public:
	void ReCalcPro();	//重新计算攻击和防御
	void DelMagic(char *name);	//删除魔法
	void AddMagic(char* name);	//添加一个魔法
	BOOL bCancelTalk;	//是否取消和NPC的对话
	void AdjustPosition();
	CRole();			//构造
	~CRole();			//析构
	void Release();		//释放
	bool InitRole();	//初始化一个角色
	bool LoadRoleIni(char *, char *);	//读取角色设定
	bool CreateShadow();				//生产人物阴影

	bool LoadRole(char *);	//读取一个角色
	bool SaveRole(char *);	//保存一个角色
	void ShowRole();		//显示一个角色
	void ShowRole(int);		//alpha显示一个角色
	void Move(int,int);		//处理行走
	void Show(int,int);		//显示-处理碰撞检测等
	void ShowRole(int, int, int, int);	//在指定位置显示一个指定的角色

	bool MoveTo(int, int);	//移动到某点
	void ChangeScene();		//场景切换
	void RunScript();		//触发开关

	void Goto(int, int);	//运动到某点(循环)

	//物体相关
	void AddObject(char *, int num=1);			//加入一个物体
	void DelObject(char *, int num=1);			//删除一个物体
	int CheckObject(char *);				//检测一个物品的数量

	//装备相关
	void AddArm(char *, int num =1);			//加入一个装备
	void DelArm(char *, int num=1);			//删除一个装备
	int CheckArm(char *);				//检测一个装备的数量
	void SetupArm(char *);				//装备
	void SetupArm(int );				//装备
	void UnSetupArm(char *);			//卸除装备
	void UnSetupArm(int );			    //卸除装备
};

#endif

⌨️ 快捷键说明

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