[MacOS+安卓模拟器+Sikuli] 恋与制作人 城市漫步挂机(一)
一、前言
恋与制作人这个破游戏的精髓是什么?当然是抽卡!抽卡!
逻辑链路如下:
见老公——过主线&过副本——抽卡——十连1800钻——每日任务50钻——36天一次十连
重来!
见老公——过主线&过副本——抽卡——十连1800钻——每周完成城市漫步共计400钻+每周每日任务350钻——2.4周=16.8天一次十连
继续!
每周完成城市漫步共计400钻——共计1200小任务——平均每个小任务1.5min——共计30h
emmm,当然,氪一波月卡就可以挂机了(相比于68块钱的语音包可以说是约等于不要钱了)。蓝鹅,贫穷的少女绝不氪金(emmm虽然也没少氪)
那么问题来了,如何对其实现自动化呢喵?
二、基本思路
1、环境:MacOS + 安卓模拟器 + Sikuli
(1)安卓模拟器,随便选一个;
(2)Sikuli:装之前要配好JAVA环境,emmm,JAVA9有兼容性问题,又退回了旧版本。
2、基本逻辑
//emmm忽略这个鬼一样的曲线……
3、实现方法
上述内容可以看到,状态机灰常清晰。蓝鹅,为了提高健壮性,我还是打算采用一种比较智障的的方式——每次扫描一遍全部元素,如果找到就点击——也就是,看到什么点什么。//emmm……
辣么方法就hin简单了,我只要把所有需要点击的元素截一下图就好了。
※难点一:
场景名太多了[捂脸],并且,这并不是全部。 //忽略这些草率的变量名……
这波图截完之后,代码实现就so easy了。
import time
flag = 0
#title和icon是调试用的,并不关键
title = "title.png"
icon = "icon.png"
event_start = "event_start.png"
auto_plot = "auto_plot.png"
going_to = "going_to.png"
event_finish = "event_finish.png"
scene_yanjiusuo = "scene_yanjiusuo.png"
scene_jinrongjie = "scene_jinrongjie.png"
scene_ditiezhan = "scene_ditiezhan.png"
scene_xinguangbaihuo = "scene_xinguangbaihuo.png"
scene_zhaowenlu = "scene_zhaowenlu.png"
scene_shiguangxiang = "scene_shiguangxiang.png"
scene_yujiancanting = "scene_yujiancanting.png"
scene_yishuguan = "scene_yishuguan.png"
scene_jiuxigujie = "scene_jiuxigujie.png"
scene_guanjinyuan ="scene_guanjinyuan.png"
scene_shizixiang = "scene_shizixiang.png"
scene_chunxichashe = "scene_chunxichashe.png"
scene_xiyuelijie = "scene_xiyuelijie.png"
scene_linglongge = "scene_linglongge.png"
lable = [event_start, auto_plot, going_to, event_finish,
scene_yanjiusuo, scene_jinrongjie, scene_ditiezhan, scene_xinguangbaihuo,
scene_zhaowenlu, scene_shiguangxiang, scene_yujiancanting,
scene_yishuguan, scene_jiuxigujie, scene_guanjinyuan,
scene_shizixiang, scene_chunxichashe, scene_xiyuelijie,
scene_linglongge]
#flag保证如果长时间没有跳出小任务,就视作发生异常,跳出循环,程序结束
while flag < 20 :
for item in lable :
if exists(item) :
time.sleep(1)
Settings.ClickDelay = 0.1
doubleClick(item)
flag = flag + 1
if item == event_finish :
flag = 0
else :
pass
hover(title)
print 'time.ctime() : %s' % time.ctime()
print 'Clicking %s...' % item
print 'flag = %d' % flag
else :
pass
print 'Loop over...'
hover(icon)
flag = flag + 1
print 'Stopping...'
当然,这里面还是发生了其他困难的,比如
※难点二:
莫名出现click()超时,表现在,找到了元素,却没有实现点击动作。
正常情况下delay在500ms左右,但后面会开始出现5s甚至10+s的超长delay。
emmm我现在还并不知道是为什么。
解决方法:
我把click()改成了doubleClick()。emmm就当是强行再点一下吧。
超时还是会出现,但至少点击的动作成功了。
到这里,基本功能是实现了。但是,全局扫描还是灰常慢的,真,的,要,好,久……
后面继续优化。
原文地址: https://zhuanlan.zhihu.com/p/33744595
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章