[MacOS+安卓模拟器+Sikuli] 恋与制作人 城市漫步挂机(一)

2019-07-04 00:00:00 模拟器 挂机 制作人

一、前言

恋与制作人这个破游戏的精髓是什么?当然是抽卡!抽卡!

逻辑链路如下:

见老公——过主线&过副本——抽卡——十连1800钻——每日任务50钻——36天一次十连

《[MacOS+安卓模拟器+Sikuli] 恋与制作人 城市漫步挂机(一)》

重来!

见老公——过主线&过副本——抽卡——十连1800钻——每周完成城市漫步共计400钻+每周每日任务350钻——2.4周=16.8天一次十连

《[MacOS+安卓模拟器+Sikuli] 恋与制作人 城市漫步挂机(一)》

继续!

每周完成城市漫步共计400钻——共计1200小任务——平均每个小任务1.5min——共计30h

《[MacOS+安卓模拟器+Sikuli] 恋与制作人 城市漫步挂机(一)》

emmm,当然,氪一波月卡就可以挂机了(相比于68块钱的语音包可以说是约等于不要钱了)。蓝鹅,贫穷的少女绝不氪金(emmm虽然也没少氪)

《[MacOS+安卓模拟器+Sikuli] 恋与制作人 城市漫步挂机(一)》

那么问题来了,如何对其实现自动化呢喵?

二、基本思路

1、环境:MacOS + 安卓模拟器 + Sikuli

(1)安卓模拟器,随便选一个;

(2)Sikuli:装之前要配好JAVA环境,emmm,JAVA9有兼容性问题,又退回了旧版本。

《[MacOS+安卓模拟器+Sikuli] 恋与制作人 城市漫步挂机(一)》
《[MacOS+安卓模拟器+Sikuli] 恋与制作人 城市漫步挂机(一)》

2、基本逻辑

//emmm忽略这个鬼一样的曲线……

《[MacOS+安卓模拟器+Sikuli] 恋与制作人 城市漫步挂机(一)》
《[MacOS+安卓模拟器+Sikuli] 恋与制作人 城市漫步挂机(一)》

3、实现方法

上述内容可以看到,状态机灰常清晰。蓝鹅,为了提高健壮性,我还是打算采用一种比较智障的的方式——每次扫描一遍全部元素,如果找到就点击——也就是,看到什么点什么。//emmm……

辣么方法就hin简单了,我只要把所有需要点击的元素截一下图就好了。

※难点一:

场景名太多了[捂脸],并且,这并不是全部。 //忽略这些草率的变量名……

《[MacOS+安卓模拟器+Sikuli] 恋与制作人 城市漫步挂机(一)》

这波图截完之后,代码实现就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我现在还并不知道是为什么。

《[MacOS+安卓模拟器+Sikuli] 恋与制作人 城市漫步挂机(一)》
《[MacOS+安卓模拟器+Sikuli] 恋与制作人 城市漫步挂机(一)》

解决方法:

我把click()改成了doubleClick()。emmm就当是强行再点一下吧。

超时还是会出现,但至少点击的动作成功了。

到这里,基本功能是实现了。但是,全局扫描还是灰常慢的,真,的,要,好,久……

后面继续优化。

    原文作者:左右流之
    原文地址: https://zhuanlan.zhihu.com/p/33744595
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章