ddtank 1.1.2 文档
由于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()方法来强制停止脚本的运行。