TC官方合作论坛

 找回密码
 立即注册
查看: 2180|回复: 9

【内存】4。怎样编写.带多级偏移的小游戏?

[复制链接]
发表于 2018-3-22 20:45:05 来自手机 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
【内存】4。怎样编写.带多级偏移的小游戏?
青木免费辅助.追根究底第5课:
要会开车,先会造车。
要精通开车技术,先会造车技术。

游客,如果您要查看本帖隐藏内容请回复


编一个程序,怎样才能带有多级偏移?
编一个程序,怎样才能带有多级偏移?
//定义结构体2,结构体1,
struct player2
{
char str[12];
double x;
double y;
int life;
int lan;
};
struct player1
{
int xx;
int yy;
player2* pp;
};
//实例化结构体1,结构体2
player1* P;
P = new player1();
//在全局区,先定义一个player1类型的全局指针变量:P。
/*
这个变量P,跟上面的全局变量sum一样,在程序编译阶段,就分配到内存区域,内存地址。这个的内存地址叫基址。
分配到的这一块内存区域,共有4字节大小,这是可以装东西的。
刚才在定义变量时,P定义为player1结构体的指针变量,所以这4字节大小的内存区域,专门用来装player1结构体的地址。
P装的是结构体的首地址。
结构体.成员1的地址,是首地址 + 0x0。这个0x0是偏移。
结构体.成员2的地址,是首地址 + 0x04。这个0x04是偏移。
结构体.成员3的地址,是首地址 + 0x08。这个0x08是偏移。
因为new语句是“动态分配内存”,在堆区分配内存。动态分配内存,它的特点是,在程序编译阶段,不分配内存区域,不分配内存地址。在程序运行时,根据实际需要来分配内存区域,内存地址。
直白讲:编译时不分配,运行时才分配。
这样,每次寻找到的内存地址,分配到的内存地址,都可能不一样。
所以,指针变量P里面储存的,player1结构体的地址,每次都可能是不一样。
*/
//再用new申请内存,把结构体player1实例化。
P->pp = new player2();
//再用new申请内存,把结构体player2实例化。
在界面画一个按钮,按钮事件中编写:
P->pp->str[12] = "God!";
P->pp->life = P->pp->life +200;
P->pp->lan = P->pp->lan +100;
按F7编译后,这程序带有多级偏移?
这样经F7编译后,用CE附加程序,点击按钮,搜索life值
200, 400, 600, 800, 1000
life值就会带有2级偏移。
多次指针变量嵌套,就带有多级偏移。
经F7编译后,用CE附加程序,点击按钮,搜索lan值
100, 200, 300, 400, 500
lan值就会带有2级偏移。
多次指针变量嵌套,就会带有多级偏移。

张弛:
现在面向对象编程,好像都不用结构体了。是不是用类继承写的。
比如有一个大类叫“活动体”由他又分出去“副本”、“玩家”、“NPC”、“怪物”。玩家向下有 自己 同阵营玩家 敌对阵营玩家 。等等这些,所以指针特层数是不是就多了?
稳定:
用类继承来写。类继承的框架比较好。

稳定:
植物大战僵尸中文版。
基类。派生出子类。
子类再派生出 阳光类,植物类,僵尸类,地皮类。如大漠dll,就是一个类。
把类实例化,就是一个对象。
var dm0 = com("dm.dmsoft") dm0是一个对象。
可以创造出多个对象。这叫类的实例化。
var dm1 = com("dm.dmsoft")
var dm2 = com("dm.dmsoft")
var dm3 = com("dm.dmsoft")
var dm4 = com("dm.dmsoft")
这样dm1234都是一个对象。用一个类 可以创造出无数对象。

植物大战僵尸中文版。
把“阳光类”实例化,就可以创造出一个阳光。
这个类中有多个变量,创造出的多个“阳光对象”,也带有多个属性。
如小阳光,大阳光。
阳光位置x,阳光位置y。
是否自动收集。1
消失的时间。10

每个阳光对象,与下一个阳光对象,的内存地址,都相隔**。只要遍历500个阳光对象,1000个阳光对象,把自动收集变量,都更改为1,就可以自动收阳光。
还有一个 一劳永逸的办法。直接修改“阳光类”,把 是否自动收集。的默认值置1。由这个纯虚类,创造出的全部对象,都会自动收集。
//
对植物类,僵尸类,地皮类,同样可以使用这个办法。类和对象的编程。
打游戏的人,真是傻B。来来去去的,干掉这些游戏对象。Boss。
一个Boss类就可以实例化出 无数Boss对象。干掉这些对象有意思?
无论干掉了多少BOSS对象,都可以继续实例化出来。只要在类在,BOSS对象就在。
只要有dm.dll在,大漠对象就在。

花菜:
类成员默认是private,结构体成员默认是public,底层无任何区别
青木:
嗯没错。你上面的写法是对的。

稳定:
跟从青木大师学习,群主也会找数据了。
学习上面两课,楼主明白了内存其中的原理。
找偏移,找基址,
子函数的参数入栈,返回地址入栈,局部变量入栈,
子函数的局部变量出栈,eip出栈,参数出栈,手到擒来的。

你会编写 带偏移+基址的程序,
会编写 带找call写call的程序。
就会明白编游戏的原理。

用CE,OD附加自己编写的程序,找数据,
跟用CE,OD附加游戏公司编写的程序,找数据,方法是一样的。

所以,只要你明白基址+偏移的原理,
明白 子函数的参数入栈出栈 的原理,要找到这些数据 是非常容易的。
调用_自己编写的子函数,跟调用_游戏公司编写的子函数,原理类似。可以触类旁通。
回复

使用道具 举报

 楼主| 发表于 2018-3-22 20:45:15 来自手机 | 显示全部楼层
本帖最后由 剑仙十号 于 2018-4-21 18:22 编辑

二楼,更新信息专用。
tc简单开发_爱好群:
433286131 (462/500)

tc简单开发_爱好群Ⅱ:
143358382 (192/500)

tc办公文本_爱好群:
612661895(29/500)

本群大神众多,新手众多。群文件内 资源海量。 希望新手 分享更多笔记,减少重复造轮子的时间。 好编程,齐学习,齐进步。
回复 支持 反对

使用道具 举报

发表于 2018-8-12 16:44:33 | 显示全部楼层

000000
回复

使用道具 举报

发表于 2018-9-1 14:54:47 | 显示全部楼层
回复

使用道具 举报

发表于 2018-9-2 06:23:43 | 显示全部楼层
666666666666
回复 支持 反对

使用道具 举报

发表于 2018-9-18 11:24:49 | 显示全部楼层
回复
回复

使用道具 举报

发表于 2018-10-7 13:56:30 | 显示全部楼层
明白 子函数的参数入栈出栈 的原理
回复 支持 反对

使用道具 举报

发表于 2019-7-2 20:30:28 | 显示全部楼层
看下先,是什么好代码
回复 支持 反对

使用道具 举报

发表于 2020-11-12 21:33:43 | 显示全部楼层
6666666666666
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-5-20 21:03 , Processed in 0.039414 second(s), 22 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表