Python简单实现邂逅在迷宫无限十连自动抽卡并根据金卡数量停止程序

步骤:

1.找到手机模拟器的句柄

2.设置模拟器窗口位置和大小

3.鼠标模拟点击抽卡位置

4.对模拟器进行截图

5.识别截图中蓝卡 紫卡 金卡数量

因为是自己写着用,变量名很随意

首先是找到模拟器的句柄,有了句柄才能操作这个窗口位置大小。这里我用的spy++这个软件

 

 把这个标移动到模拟器上获取他的句柄

 使用win32guiFindWindow这个函数,分别把spy++得到的类名和标题传进去,就成功得到了他的句柄

import win32gui

LEIDIAN = win32gui.FindWindow("LDPlayerMainFrame", "雷电模拟器")  # 类名,标题

 然后调用ShowWindow(句柄,win32con.SW_SHOW)函数来把模拟器窗口显示在上方

SetWindowPos函数调整窗口的位置大小,函数用法百度一下

import win32con

# 显示窗口
win32gui.ShowWindow(LEIDIAN, win32con.SW_SHOW)
win32gui.SetWindowPos(LEIDIAN, win32con.HWND_TOPMOST, -1930, 0, 700, 1040, win32con.SWP_SHOWWINDOW)
# 调整应用位置

 鼠标模拟点击用pyautogui.click函数

from PyQt5.QtWidgets import QApplication

pyautogui.click(-1771, 902, clicks=1, button="left")
#(x,y,点击次数,点哪个键)

获取屏幕上坐标我用这个软件,用法非常简单并且还可以识别像素颜色桌面坐标获取工具【易语言开源】下载-桌面坐标获取工具【易语言开源】v1.0免费版下载 - 非凡软件站桌面坐标获取工具【易语言开源】能够对鼠标的位置坐标进行获取,软件操作简单,即使是没有电脑操作经验的用户也能够快速上手使用,通过该软件用户可以一键复制坐标,同时支持快捷键操作,非常的实用,如果你是平面设计师需要用到坐标获取,那么这款软件再合适不过了!https://www.crsky.com/soft/238509.html#down对模拟器进行截图并保存(网上找来的方法)

from PIL import Image
from PyQt5.QtWidgets import QApplication
import sys

app = QApplication(sys.argv)
screen = QApplication.primaryScreen()
img = screen.grabWindow(LEIDIAN).toImage() # LEIDIAN是我句柄的变量名
img.save("screenshot.jpg")

 下一步就到怎么识别抽卡颜色了,这里比较麻烦,我的方法是识别截图中这些坐标的颜色

 

 这也是网上找来的,用途是传进x,y的坐标然后将他的RGB颜色转为一个元组返回

截图的像素坐标为我是右键这个截图,点编辑,里面左下角可以看到你指针所在的图像中的坐标

from PIL import Image

def getPngPix1(x, y, pngPath="screenshot.jpg"):
    img_src = Image.open(pngPath)
    img_src = img_src.convert('RGBA')
    img_array = img_src.load()
    data = img_array[x, y]
    img_src.close()
    return data

 下一步是根据像素颜色识别抽卡颜色

o = 0
b = 0
c = 0
def shaka(a):
    global o, b, c 
    if a[0] > 60 and a[0] < 95:  # 元组中第一个元素在这个区间中为蓝色
        o += 1
    elif a[0] > 95 and a[0] < 150:  # 紫色
        b += 1
    else:                       # 金色
        c += 1
    return o, b, c

shaka(getPngPix1(324, 113))  # 把getPngpix1这个函数返回的元组传进这个识别颜色的函数中

最后只要加上循环和打印和金卡数量大于几结束程序就好了,这是我的全部代码,好多都是网上找的

import sys
import win32con
import time
from PyQt5.QtWidgets import QApplication
import win32gui
import pyautogui
from PIL import Image


def getPngPix1(x, y, pngPath="screenshot.jpg"):
    img_src = Image.open(pngPath)
    img_src = img_src.convert('RGBA')
    img_array = img_src.load()
    data = img_array[x, y]
    img_src.close()
    return data


def shaka(a):
    global o, b, c
    if a[0] > 60 and a[0] < 95:
        o += 1
    elif a[0] > 95 and a[0] < 150:
        b += 1
    else:
        c += 1
    return o, b, c


# 找出窗体编号
LEIDIAN = win32gui.FindWindow("LDPlayerMainFrame", "雷电模拟器")  # 类名,标题
# 隐藏窗体
# win32gui.ShowWindow(XHZMG, win32con.SW_HIDE)
# time.sleep(1)
# 显示窗体
win32gui.ShowWindow(LEIDIAN, win32con.SW_SHOW)
win32gui.SetWindowPos(LEIDIAN, win32con.HWND_TOPMOST, -1930, 0, 700, 1040, win32con.SWP_SHOWWINDOW)
# 调整应用位置

app = QApplication(sys.argv)
screen = QApplication.primaryScreen()
o = 0
b = 0
c = 0
e = 0
for i in range(1000):
    o = 0
    b = 0
    c = 0
    pyautogui.click(-1771, 902, clicks=1, button="left")
    time.sleep(1.5)
    img = screen.grabWindow(LEIDIAN).toImage()
    img.save("screenshot.jpg")
    # 上面是截屏雷电模拟器
    shaka(getPngPix1(324, 113))
    # print(getPngPix1(324, 113))
    shaka(getPngPix1(475, 113))
    # print(getPngPix1(475, 113))
    shaka(getPngPix1(616, 261))
    # print(getPngPix1(616, 261))
    shaka(getPngPix1(616, 498))
    # print(getPngPix1(616, 498))
    shaka(getPngPix1(476, 647))
    # print(getPngPix1(476, 647))
    shaka(getPngPix1(325, 646))
    # print(getPngPix1(325, 646))
    shaka(getPngPix1(187, 494))
    # print(getPngPix1(187, 494))
    shaka(getPngPix1(189, 263))
    # print(getPngPix1(189, 263))
    shaka(getPngPix1(325, 383))
    # print(getPngPix1(325, 383))
    shaka(getPngPix1(475, 383))
    # print(getPngPix1(475, 383))
    e += 1
    print("蓝卡%d,紫卡%d,金卡%d,本次执行了%d次" % (o, b, c, e))
    if c >= 4:
        exit()

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值