欢迎光临散文网 会员登陆 & 注册

ddtank 1.1.2 文档

2023-03-08 09:04 作者:ddtanker  | 我要投稿

由于b站不支持markdown,将就看吧。

https://pypi.org/project/ddtank/

DDTank 非正式文档

Document for ddtank package

写在前面

本软件包的更新、规范全凭作者个人喜好而变动,请慎重使用!

作者邮箱: jugking6688@gmail.com

B站视频系列: https://space.bilibili.com/3493127383943735

QQ交流群:285669805

版本更新说明

  • version 1.1

引入了图形化界面,即脚本执行器ddtanker。`python from ddtank import DDTanker

ddtanker = DDTanker()    ddtanker有找色、截图、地图识别等功能,大大提高脚本编写的效率。    注意,如果你想编写一个ddtanker能够识别、执行的ddtank脚本,你需要将子类命名为ScriptStatus,    然后将.py文件放在./script文件夹中。python from ddtank import Status

class ScriptStatus(Status):    def task(self):        self.click('rfind', pos=(520, 57), rgb=(6, 104, 210))        self.click('rfind', pos=(743, 141), rgb=(247, 75, 61))        self.click('rfind', pos=(430, 278), rgb=(149, 86, 92))        self.sleep(100)        self.click('rfind', pos=(241, 373), rgb=(83, 244, 52))`    一个能供ddtanker识别、执行的ddtank脚本,它的作用是:    假设人物位于大厅,他将会进入农场,然后扭蛋一次。

1. 获取游戏窗口信息 get_game()

`python from ddtank import get_game

hwnds = get_game()` 上面的代码演示了如何获取当前已经运行了的,所有的弹弹堂游戏窗口的句柄,并保存到了列表hwnds中。

如果你想要同时获取游戏窗口的标题文本,那么设置getgame

hwnds, titles = gettitle=True)`

2.实例化角色对象 Status()

在弹弹堂中,每一个游戏窗口对应一个游戏角色。因此,每一个实例化的Status对象也对应每一个角色。`python from ddtank import get_game, Status

hwnds = getstatus = Status(hwnd)`    如果你之前也获取了标题文本列表,那么可以在实例化Status时指定第二个参数title。

3.找图与找点 find()

存在以下场景: 判断某个(多个)点像素值是否符合条件 获取某图片的位置

3.1 获取某点的像素值(RGB)

在下面的例子中,我们获取了游戏图像中(200, 200)处的像素值并储存在了变量pixel中。`python from ddtank import get_game, Status

hwnds = getstatus = Status(hwnd) pixel = my_status.find('find', pos=(200, 200))

或者,你可以直接 find(pos=(200, 200)

`    获取像素值使用了win32gui的GetPixel方法,而不是先截图然后访问图片数组。

3.2 判断某个(多个)点像素值是否符合条件

在下面的例子中,我们判断了三个点是否符合条件,如果其中某个符合了条件, 那么就会返回它的参数名称(例如,cdt2)。`python from ddtank import get_game, Status

hwnds = getstatus = Status(hwnd) rst = my_status.find('mfind',                     cdt1=((100, 100), (12, 23, 34)),                     cdt2=((200, 200), (34, 23, 12)),                     cdt3=((300, 300), (21, 32, 43)), )`    'mfind'也可以简写为'mf'或者'm',取决于你的心情。    每一种method都有许多简写方式。

3.3 重复判断直到某个点像素符合了条件

在下面的例子中,我们重复判断游戏图像中(200, 200)处的像素值是否为(1, 2, 3), 在实际应用中,这种情况经常适用于进入某场景前的等待。`python from ddtank import get_game, Status

hwnds = getstatus = Status(hwnd) my_status.find('rfind', pos=(200, 200), rgb=(1, 2, 3))`    指定method为'rfind'时,还可以设置两个参数: 'el'和'period'。    'el'用于指定在找某点像素值不符合条件时,执行的方法。    'period'用于指定每次循环之间的等待时间,默认为100毫秒,这是为了避免资源占用过大。

3.4 获取某图片的位置

用于寻找的图片储存在self.imagegame, Status

hwnds = getstatus = Status(hwnd) centerpos = myimage', img='temp')` 返回值centerpos为图片的中心点位置。

4.模拟点击 click()

存在以下场景: 某个点像素值符合条件才点击此处 获取某图片的位置,然后点击图片位置 * 重复寻找某图片,直到图片出现,然后点击图片位置

下面的代码基本完整展示了click的使用方法。如果你学会了find的使用,那么理解click将会是顺其自然的。`python from ddtank import get_game, Status

hwnds = getstatus = Status(hwnd) mystatus.click('find', pos=(200, 200), rgb=(255, 255, 255), el=lambda: print(mystatus.click('rfind', pos=(200, 200), rgb=(255, 255, 255)) myimage', img='temp', part=(0, 300, 500, 300))`

5.模拟按键 press()

下面的一个例子展示了press方法的使用:`python from ddtank import get_game, Status

hwnds = getstatus = Status(hwnd) keystatus.press(key_series)`

6.读取地图 read()

识别小地图,来获取各种信息。风力:    {self.wind} 角度:    {self.angle} 小地图界限:    {self.map_pos} 白框位置:    {self.box_pos} 白框宽度:    {self.box_width} 蓝点:    {self.blues} 三角:    {self.cur_pos} 红点:    {self.reds} 光圈:    {self.circle}    read()方法有一个参数为is_circle,默认为False,代表是否进行光圈识别。    在副本中,我们识别当前出手的角色一般依赖三角,而在竞技中,我们依靠闪烁的光圈来定位。

7.发射炮弹 shot()

不好用,以后改进。

8.角色移动 move()

关于脚本的编写

我们建议您继承父类Status,然后重写task()方法,将脚本内容写在此方法内, 通过YourStatus.start()方法执行脚本,此方法会开辟一个子线程来执行脚本。并且, 你可以通过YourStatus.stop()方法来强制停止脚本的运行。

ddtank 1.1.2 文档的评论 (共 条)

分享到微博请遵守国家法律