美文网首页
古剑钓鱼脚本

古剑钓鱼脚本

作者: 烟流 | 来源:发表于2018-09-07 09:58 被阅读0次

    背景

    玩过古剑的小伙伴应该都知道钓鱼时个耗时又无聊的东西
    今天教大家如何写个自动钓鱼脚本
    ps:成功率大约在80%
    ps:本文不提供任何可执行脚本

    准备

    • 使用python
    • 三个lib:

    目标

    a-未到达目标区域时 b-到达目标区域时

    首先我们的目标是能够识别出钓鱼时上面的两种状态,

    • 指针到达了黄色的指定区域
    • 指针没有到达黄色的指定区域

    如果到达了就按下Q键,没有到达的话等待

    分析图片

    1. 这是一张矩形图片
    2. 图片的主要部分是一个蓝色的圆盘(需提取)
    3. 在圆盘的外部有些没有用的干扰背景(需剔除)
    4. 黄色扇区的目标区域(需提取)
    5. 黄色的指针(需提取)
    6. 指针和目标区域是否重叠(需判断)

    实现

    0.准备

    截图

    from PIL import ImageGrab
    snapshot = ImageGrab.grab()
    

    按键

    • pywinio
    • 大漠插件
    • 按键精灵
      以上3种方式均可,大漠插件只支持32位的python,当然大漠也可以截图
    1. 提取蓝色圆盘
    #圆盘的颜色
    img = Image.open(<Image_file_name>)
    default_color = np.array([90, 163, 192], dtype="uint8")
    img = np.abs(np.array(img).astype(int) - default_color)
    

    效果:



    2. 提取黄色的目标区域和转钩,并转化成黑白图片
    def to_gray(img):
        y = np.array(img).astype(int) - np.array([33, 78, 158])
        y = np.mean(y, axis=2)
        y = ((y - np.mean(y)) / (np.max(y) - np.min(y)))
        y = y > 0.1
        return y * 255
    img = to_gray(img)
    

    效果


    image.png
    3. 屏蔽背景干扰

    首先画个园

    white_elipse = Image.new(size=img.size,mode="L",color=(0))
    draw = ImageDraw.Draw(white_elipse)
    draw.ellipse((0,0,white_elipse.width,white_elipse.height),fill=(255))
    white_elipse
    
    image.png

    然后直接点乘即可

    img = (np.array(white_elipse)>128) * img
    

    然后在看看如果转钩到达了目标区域是的状态

    image.png
    4. 检测判断

    仔细观察上图,

    • 可以发现当转钩到达目标区域时白色减少,黑色增多了
    • 减少的白色的总面积恰好是转钩所占据的面积

    所以只需简单判断:

    • 这一刻的白色面积 - 上一刻白色面积 > 转钩掉面积

    就可以判断是否到达了目标区域

    白色区域面积计算:

    def area(img):
        return np.count_nonzero(img) / np.size(img)
    zuang_gou_area = 0.004 #转钩掉面积
    

    相关文章

      网友评论

          本文标题:古剑钓鱼脚本

          本文链接:https://www.haomeiwen.com/subject/qrzfgftx.html