追逐自己的梦想----------辅助制作第四课:将游戏人物数据进行测试

这节课重点讲解如何调试游戏中的人物数据。通过创建Win32控制台程序静态库,设立基类保存数据基址,并建立派生类来管理角色属性。使用DEBUGVIEW工具进行测试,所有数据的调试已完成,并提供了第四课的源码和DEBUGVIEW下载链接。
摘要由CSDN通过智能技术生成

本节课中,我们要做的就是调试第一节课中分析的数据。

首先我们需要打开新建项目->win32控制台程序->静态库;添加一个静态库,然后在库中添加一个基类来保存数据基址,然后创建一个派生类来保存人物角色属性。

在派生类中添加数据偏移管理单元

具体代码如下:


#include<Windows.h>

class BaseData
{
public:
	BaseData();
	~BaseData();

	DWORD GetBaseRoleAddr();

private:
	const DWORD BaseRoleAddr = 0x2F9D4D0;

};



class RoleData :public BaseData
{
public:
	RoleData();
	~RoleData();

	char *GetRoleName(); //获取人物名字
	char *GetRoleFame(); //获取人物名声
	int GetHp();	//获取HP
	int GetMp();  //获取内功
	int GetAngry();//获取愤怒值
	int GetMaxHp();//获取最大HP
	int GetMaxMp();//获取最大内功
	int GetMaxAngry();//获取最大愤怒值
	int GetExp(); //获取经验值
	int GetMaxExp();//获取最大经验值
	int GetHeart(); //获取心
	int GetBody();//获取体
	int GetAir();//获取气
	int GetSoul();//获取魂
	int GetAttack();//获取攻击力
	int GetDefense();//获取防御力
	int GetHit();//获取命中  
	int GetAvoid();//获取回避


private:

	DWORD NameOffset = 0x0;//名字偏移
	DWORD fameOffset = 0x36; //名声偏移
	DWORD HPOffset = 0x80;//hp偏移
	DWORD MPOffset = 0x84; //内功偏移
	DWORD AngryOffset = 0x88; //当前愤怒值偏移
	DWORD MaxHpOffset = 0x8c; //最大HP
	DWORD MaxMpOffset = 0x90; //最大内功值
	DWORD MaxAngryOffset = 0x94; //最大愤怒值
	DWORD ExpOffset = 0x98;//当前经验值
	DWORD MaxExpOffset = 0xa0; //最大经验值
	DWORD HeartOffset = 0xb0;  //心
	DWORD BodyOffset = 0xb4; //体
	DWORD AirOffset = 0xb8; //气
	DWORD SoulOffset = 0xbc; //魂
	DWORD AttackOffset = 0xc8; //攻击
	DWORD DefenseOffset = 0xcc;//防御
	DWORD HitOffset = 0xd0; //命中
	DWORD AvoidOffset = 0xd4; //回避

};



#include"BaseGameData.h"

BaseData::BaseData()
{
}

BaseData::~BaseData()
{
}



RoleData::RoleData(){

}
RoleData::~RoleData(){

}

DWORD BaseData::GetBaseRoleAddr(){
	return BaseRoleAddr;
}

//获取人物名字
char* RoleData::GetRoleName(){
	return (char*)(this->GetBaseRoleAddr() + NameOffset);
}
//获取人物名声
char *RoleData::GetRoleFame(){
	return (char*)(this->GetBaseRoleAddr() + fameOffset);
}
//获取HP
int RoleData::GetHp(){
	return *(DWORD*)(this->GetBaseRoleAddr() + HPOffset);
}
//获取内功
int RoleData::GetMp(){
	return *(DWORD*)(this->GetBaseRoleAddr() + MPOffset);

}
//获取愤怒值
int RoleData::GetAngry(){
	return *(DWORD*)(this->GetBaseRoleAddr() + AngryOffset);
}
//获取最大HP
int RoleData::GetMaxHp(){
	return *(DWORD*)(this->GetBaseRoleAddr() + MaxHpOffset);
}
//获取最大内功
int RoleData::GetMaxMp(){
	return *(DWORD*)(this->GetBaseRoleAddr() + MaxMpOffset);
}
//获取最大愤怒值
int RoleData::GetMaxAngry(){
	return *(DWORD*)(this->GetBaseRoleAddr() + MaxAngryOffset);
}
//获取经验值
int RoleData::GetExp(){
	return *(DWORD*)(this->GetBaseRoleAddr() + ExpOffset);
} 

//获取最大经验值
int RoleData::GetMaxExp(){
	return *(DWORD*)(this->GetBaseRoleAddr() + MaxExpOffset);
}
//获取心
int RoleData::GetHeart(){
	return *(DWORD*)(this->GetBaseRoleAddr() + HeartOffset);
}
//获取体
int RoleData::GetBody(){
	return *(DWORD*)(this->GetBaseRoleAddr() + BodyOffset);
}
//获取气
int RoleData::GetAir(){
	return *(DWORD*)(this->GetBaseRoleAddr() + AirOffset);
}
//获取魂
int RoleData::GetSoul(){
	return *(DWORD*)(this->GetBaseRoleAddr() + SoulOffset);
}
//获取攻击力
int RoleData::GetAttack(){
	return *(DWORD*)(this->GetBaseRoleAddr() + AttackOffset);
}
//获取防御力
int RoleData::GetDefense(){
	return *(DWORD*)(this->GetBaseRoleAddr() + DefenseOffset);
}
//获取命中  
int RoleData::GetHit(){
	return *(DWORD*)(this->GetBaseRoleAddr() + HitOffset);
}
//获取回避
int RoleData::GetAvoid(){
	return *(DWORD*)(this->GetBaseRoleAddr() + AvoidOffset);
}

以上代码就完成了对游戏数据的封装,然后在对话框中添加一起test按钮来测试数据 ,具体代码如下:



void CMainDialog::OnBnClickedButton1()
{
	// TODO:  在此添加控件通知处理程序代码
	pRoleData = new RoleData();
	TRACE("Game:人物名称:%s\r\n", BaseRoleAddr);
	TRACE("Game:人物名称:%s\r\n", pRoleData->GetRoleName());
	TRACE("Game:人物名声:%s\r\n", pRoleData->GetRoleFame());
	TRACE("Game:HP/MAXHP = %d / %d\r\n", pRoleData->GetHp(), pRoleData->GetMaxHp());
	TRACE("Game:MP/MAXMP = %d / %d\r\n", pRoleData->GetMp(), pRoleData->GetMp());
	TRACE("Game:愤怒值:%f \r\n", pRoleData->GetAngry()/pRoleData->GetMaxAngry());
	TRACE("Game:经验值:%f \r\n", pRoleData->GetExp() / pRoleData->GetMaxExp());
	TRACE("Game:心:%d\r\n", pRoleData->GetHeart());
	TRACE("Game:体:%d\r\n", pRoleData->GetBody());
	TRACE("Game:气:%d\r\n", pRoleData->GetAir());
	TRACE("Game:魂:%d\r\n", pRoleData->GetSoul());
	TRACE("Game:攻击:%d\r\n", pRoleData->GetAttack());
	TRACE("Game:防御:%d\r\n", pRoleData->GetDefense());
	TRACE("Game:命中:%d\r\n", pRoleData->GetHit());
	TRACE("Game:闪避:%d\r\n", pRoleData->GetAvoid());



}


以上代码就完成了对所有数据的测试,还有就是测试要用到的工具是DEBUGVIEW,百度云盘下载地址:第四课的源码:调试获取到的人物数据及工具





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值