import sys
from tkinter import scrolledtext, messagebox
from goto import with_goto
from PicToolsModule import *
tool = PicTools()
# 计算9个结界的x和y位置以及进攻退出位置
def GetJieJieLocation(imgs, kp, des, ):
locdictx = {}
locdicty = {}
escx = 0
escy = 0
obj = imgs['rank']
pos1 = tool.GetLocation(obj, kp, des)
obj = imgs['close']
pos2 = tool.GetLocation(obj, kp, des)
obj = imgs['ticket']
pos3 = tool.GetLocation(obj, kp, des)
if pos1 is None or pos2 is None or pos3 is None:
messagebox.showinfo('提示', '个人突破界面出错,请打开突破界面后或者尝试调整游戏界面大小至合适后重试!')
sys.exit(-1)
return None
else:
# escx, escy为进攻是退出按钮的位置
escx = pos1[0]
escy = pos3[1]
# 根据排名和退出突破界面按钮二者的位置计算九个结界的位置
x1 = numpy.int32(pos1[0] + (pos2[0] - pos1[0]) / 4)
x2 = numpy.int32(pos1[0] + (pos2[0] - pos1[0]) / 2)
x3 = numpy.int32(pos2[0] - (pos2[0] - pos1[0]) / 6)
y1 = numpy.int32(pos1[1] - (pos1[1] - pos2[1]) / 6)
y2 = numpy.int32(pos2[1] + (pos1[1] - pos2[1]) / 2)
y3 = numpy.int32(pos2[1] + (pos1[1] - pos2[1]) / 6)
locdictx["1"] = x1;
locdicty["1"] = y3;
locdictx["2"] = x2;
locdicty["2"] = y3;
locdictx["3"] = x3;
locdicty["3"] = y3;
locdictx["4"] = x1;
locdicty["4"] = y2;
locdictx["5"] = x2;
locdicty["5"] = y2;
locdictx["6"] = x3;
locdicty["6"] = y2;
locdictx["7"] = x1;
locdicty["7"] = y1;
locdictx["8"] = x2;
locdicty["8"] = y1;
locdictx["9"] = x3;
locdicty["9"] = y1;
return (locdictx, locdicty, escx, escy)
# 寻找某个目标点的位置,并做一定范围的随机位置处理
def GetTargetCheatPosition(imgs, targetname, holdtimemin, holdtimemax, factor):
# 截图
screen = tool.GetScreenShot()
kp2, des2 = tool.ComputeScreenShot(screen)
obj = imgs[targetname]
# 获取位置
pos = tool.GetLocation(obj, kp2, des2)
if pos is not None:
return tool.CheatPos(pos, factor)
else:
return None
class TuPo():
def __init__(self):
self._flag = False
self.NeedCloseGame = False
self.NeedCloseSystem = False
@with_goto
def Run(self, LogUI, NeedCloseGame, NeedCloseSystem):
imgs = tool.LoadImgs("tupo")
# 9个结界的x和y坐标(注意方向)
locdictx = {}
locdicty = {}
screen = tool.GetScreenShot()
# 为了优化速度,把计算屏幕截图的特征提取出来,避免重复运算
kp2, des2 = tool.ComputeScreenShot(screen)
# 根据计算出的特征计算九个结界位置和退出按钮位置(在进攻界面识别会出问题/捂脸,这里直接计算出位置即可)
locdictx, locdicty, escx, escy = GetJieJieLocation(imgs, kp2, des2)
label.begin
while self._flag is not True:
# 失败次数
losetimes = 0
# 当前在第几个结界(1~9)
jiejienum = 1
# 是否刚点击了结界进而准备点击进攻
attackready = 0
# 防止多次识别胜利页面导致当前在第几个结界出现错误
next = 0
# label报错不要理,编译可以通过
# 重新开始检查元素标签
label.restart
# 图像识别结果字典(存的位置信息,如果未识别到则为None)
resultobj = {}
# 截屏
screen = tool.GetScreenShot()
# 为了优化速度,把计算屏幕截图的特征提取出来,避免重复运算
kp2, des2 = tool.ComputeScreenShot(screen)
# obj = imgs['refresh']
# if GetLocation(obj,kp2,des2) is not None:
# print(666)
# '''
print("......")
time.sleep(random.randint(1000, 1200) / 1000)
print("jiejienum:" + str(jiejienum) + ", losetimes:" + str(losetimes) + ", attackready:" + str(
attackready) + ", next:" + str(next))
print("图像识别判定中")
for i in ['victoryend', 'victory', 'failure', 'noticket', 'reject', 'auto', 'attack', 'refresh', 'confirm']:
obj = imgs[i]
pos = tool.GetLocation(obj, kp2, des2)
if pos is not None:
# 如果是奖励界面,点击奖励达摩,然后重新识别界面
if i == 'victoryend':
print("victoryend")
pos = tool.CheatPos(pos, 30)
tool.Click(pos)
# 如果结界已经突破完,刷新统计数据重新开始
if jiejienum == 10:
print("九个结界突破完毕,刷新数据重新开始")
goto.begin
# 如果结界未突破完,继续识别界面进行判断
else:
goto.restart
# 如果是胜利页面,点击胜利页面,然后继续识别界面进行判断
elif i == 'victory':
print("victory")
tool.Click(tool.CheatPos(pos, 20))
if next == 0:
jiejienum = jiejienum + 1
print(jiejienum)
next = 1
else:
print(jiejienum)
jiejienum = jiejienum
goto.restart
# 如果是失败页面,点击失败页面,记录失败次数,然后继续识别界面进行判断
elif i == 'failure':
print("failure")
losetimes = losetimes + 1
print("失败次数:" + str(losetimes))
tool.Click(tool.CheatPos(pos, 20))
goto.restart
# 如果有协作,直接关闭,然后重新开始识别当前界面
elif i == 'reject':
print("reject")
pos = tool.CheatPos(pos, 5)
tool.Click(pos)
# 重新开始识别界面
goto.restart
# 如果突破券耗尽直接退出
elif i == 'noticket':
print("noticket")
sys.exit(-1)
else:
print(str(i) + "位置已存储")
resultobj[i] = pos
if ('attack' in resultobj) is True:
print("点击attack:第" + str(jiejienum) + "个结界")
# 已经点击结界,需要点击进攻
tool.Click(resultobj['attack'])
attackready = 0
next = 0
time.sleep(random.randint(3000, 4000) / 1000)
goto.restart
elif ('refresh' in resultobj) is True:
print("判断结界页面")
# 处在突破主面板,需要根据当前进整体攻情况点击进攻或者刷新
# 如果失败次数过多认为有个结界始终打不过,直接刷新数据重新开始判断流程
if losetimes > 4:
print("失败超过四次直接refresh")
tool.Click(resultobj['refresh'])
goto.begin
else:
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
yys-plugin.zip (76个子文件)
yys-plugin
source
tansuo
bonus.png 9KB
end1.jpg 4KB
accept.png 6KB
end2.jpg 11KB
quit.png 8KB
reject.jpg 1KB
yeyuanhuo
end1.jpg 4KB
end2.jpg 11KB
tiaozhan.png 28KB
reject.jpg 1KB
yuhun
queding.jpg 2KB
end1.jpg 4KB
jixu.jpg 2KB
tili80.jpg 3KB
tiaozhan.jpg 19KB
auto.jpg 1KB
end2.jpg 11KB
jieshou1.jpg 1KB
windows_shutdown.png 2KB
reject.jpg 1KB
jieshou2.jpg 1KB
tili60.jpg 3KB
yongshengzhihai
end1.jpg 4KB
end2.jpg 11KB
tiaozhan.png 27KB
reject.jpg 1KB
yuling
end1.jpg 4KB
end2.jpg 11KB
tiaozhan.png 28KB
reject.jpg 1KB
choucezhi
again.png 11KB
reject.jpg 1KB
huodong
end1.jpg 4KB
reject_big.png 11KB
end2.jpg 11KB
reject_small.png 7KB
tiaozhan.png 11KB
choice.png 46KB
tupo
done.png 13KB
nostar.png 14KB
victory.png 87KB
fourstar.png 24KB
failure.png 13KB
threestar.png 22KB
noticket.png 15KB
close.png 13KB
attack.png 4KB
rank.png 7KB
fivestar.png 26KB
confirm.png 4KB
auto.png 7KB
refresh.png 4KB
ticket.png 6KB
onestar.png 17KB
reject.jpg 1KB
victoryend.png 101KB
esc.png 2KB
twostar.png 20KB
src
YongShengZhiHaiModule.py 3KB
TuPoModule.py 9KB
PicToolsModule.py 5KB
YuLingModule.py 3KB
TansuoModule.py 3KB
YuHunModule.py 3KB
ChouCeZhiModule.py 2KB
YeYuanHuoModule.py 3KB
WindowEntry.py 9KB
HuoDongModule.py 4KB
.idea
misc.xml 201B
workspace.xml 6KB
yys-plugin.iml 685B
dictionaries
maomao.xml 172B
inspectionProfiles
profiles_settings.xml 174B
modules.xml 279B
.gitignore 39B
vcs.xml 246B
共 76 条
- 1
Ryan爱吃糖
- 粉丝: 253
- 资源: 22
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0