您的位置:首页 > 编程语言 > C语言/C++

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

2015-01-07 15:31 731 查看
本节课中,我们要做的就是调试第一节课中分析的数据。

首先我们需要打开新建项目->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,百度云盘下载地址:第四课的源码:调试获取到的人物数据及工具
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MFC c++ 辅助
相关文章推荐