技术日记2021/2/12 “牛气飞天”恶作剧

本文介绍了作者尝试使用Python的PyAutoGUI库制作连连看小游戏辅助软件的经历,由于图像识别速度慢而未能实现理想效果。作者分享了代码片段,展示了如何进行鼠标控制和图像识别,并提及在找最大最小数游戏中遇到的问题。此外,还提出了一种利用键盘事件实现鼠标乱飞的恶作剧代码,并探讨了如何将Python程序转换为.exe可执行文件。
摘要由CSDN通过智能技术生成

\quad 本来希望通过图像截图+图像识别+鼠标行为控制来制作一款类似连连看小游戏的辅助软件,但是因为主要使用的是PyAutoGUI库,在图像识别方面速度过慢,因而只能作罢,但将辅助代码记载于下:

import pyautogui #识别窗口,窗口置顶
import time

size=pyautogui.size()#获取屏幕大小
print(size)
mouse_pos=pyautogui.position()#获取鼠标位置
print(mouse_pos)

#控制鼠标移动 绝对移动
pyautogui.moveTo(10,10,1)#把鼠标移动到0,0位置 时间为1s
'''
Attention:移动到四个角会触发错误pyautogui.FailSafeException
'''
#控制鼠标移动 相对移动
pyautogui.moveRel(100,100,0.5)
#鼠标单击
pyautogui.click()

以上代码是pyaotugui库中的一些较为基本的操作。
之后通过pyaotugui中另一个函数

help_pos=pyautogui.locateOnScreen('main.png')

这个函数在这里替代了OpenCV库的作用,可以识别已经保存的图片在截图画面中的位置,返回是一个矩形的对象。
如果找不到或者存在多个目标的话就会返回None哦!


这个小游戏是一个找最大最小数的游戏
在这里插入图片描述
在这里插入图片描述
就是需要在给出的数字中去点击最大值或最小值,
所以hh,我们需要去判断下是最大还是最小滴问题:
截图成品
(截图成品)
然后一个框架就是这样子滴:

import pyautogui #识别窗口,窗口置顶
import time
#time.sleep(5)
print('开始运行')
while True:
    bs=pyautogui.locateOnScreen('最小数.png')
    if bs==None:
		balabala1
    else:
  		balabala2

之后就是要往里面填充亿点细节啦!
其实我是发现了一个bug,2×2方格子的时候最小值都是1,最大值都是16。3×3的时候最小值是1,最大值是81。


但是但是但是但是但是!!!!!!
在这里插入图片描述
因为这糟心的背景图片,我一个1的截图不得不去截4份(别问,问就是没学过OpenCV不会用)。55555
不过,通过充分足量的截图,还是达成了我滴目的,自动化玩游戏!
就是这个不用OpenCV的速度实在是。。。。。。。
(低速版本千里马)

import pyautogui #识别窗口,窗口置顶
import time
#time.sleep(5)
print('开始运行')
while True:
    bs=pyautogui.locateOnScreen('最小数.png')
    if bs==None:
        try:
            help_pos=pyautogui.locateOnScreen(str(161)+'.png')
            center = pyautogui.center(help_pos)
            print(center)
            pyautogui.moveTo(center)
            pyautogui.click()  # 单击
            continue
        except :
            pass
        try:
            help_pos = pyautogui.locateOnScreen(str(162) + '.png')
            center = pyautogui.center(help_pos)
            print(center)
            pyautogui.moveTo(center)
            pyautogui.click()  # 单击
            continue
        except:
            pass
        try:
            help_pos = pyautogui.locateOnScreen(str(163) + '.png')
            center = pyautogui.center(help_pos)
            print(center)
            pyautogui.moveTo(center)
            pyautogui.click()  # 单击
            continue
        except:
            pass
        try:
            help_pos = pyautogui.locateOnScreen(str(164) + '.png')
            center = pyautogui.center(help_pos)
            pyautogui.moveTo(center)
            pyautogui.click()  # 单击
            continue
        except:
            pass
    else:
        try:
            help_pos=pyautogui.locateOnScreen(str(1)+'.png')
            center = pyautogui.center(help_pos)
            print(center)
            pyautogui.moveTo(center)
            pyautogui.click()  # 单击
            continue
        except :
            pass
        try:
            help_pos = pyautogui.locateOnScreen(str(2) + '.png')
            center = pyautogui.center(help_pos)
            print(center)
            pyautogui.moveTo(center)
            pyautogui.click()  # 单击
            continue
        except:
            pass
        try:
            help_pos = pyautogui.locateOnScreen(str(3) + '.png')
            center = pyautogui.center(help_pos)
            print(center)
            pyautogui.moveTo(center)
            pyautogui.click()  # 单击
            continue
        except:
            pass
        try:
            help_pos = pyautogui.locateOnScreen(str(4) + '.png')
            center = pyautogui.center(help_pos)
            print(center)
            pyautogui.moveTo(center)
            pyautogui.click()  # 单击
            continue
        except:
            pass


\quad 糟心透顶了也没拿个高分的名词,下次用AI来试水。
\quad 不过,这查的东西不能白看,一个邪恶 小恶作剧的想法瞬间诞生,既然我能控制鼠标了,那么,呵呵呵呵呵呵哈哈哈啊哈哈啊哈哈啊哈哈!!!!!!
\quad 我愿称之为牛气飞天!

import pyautogui
import random
import keyboard
key=0
def hhh():
    global key
    key=1
while True:
    try:
        keyboard.add_hotkey('q+p',hhh)#安全出口
        a=random.randint(10,1910)
        b=random.randint(10,1070)
        pyautogui.moveTo(a,b)
        if key==1:
            print('逃出成功!牛年快乐!')
            break
    except:
        pass

这个小恶作剧的功能:让你的鼠标到处乱飞,想关都关不掉。(除非走我流的后门p+q双剑齐下)
但是在制作过程中还是遇到一丢丢困难,键盘事件识别与判断,通过这个,我查到了一个蛮不错的库:keyboard

import keyboard
import time
def hhh():
    print('成功退出!')
keyboard.add_hotkey('q+u+i+t',hhh)
time.sleep(10)

这里为简略就先将一个函数add_hotkey
\quad 两个参数,第一个是热键按键(就是你的qq每次打开时说的:您的热键被占用,说白了就是快捷键。)第二个是接受到这个热键时调用的函数。
\quad 通过这个其实可以达到游戏手柄的效果哦,aabb ←←→→ hhh。
\quad 通过响应其实是为了我自己留后门。(只有自己知道的后门hh)

其实除了热键设置以外,这个库还能用于键盘事件监听,鼠标事件监听等等,还是非常有用的。(侦探狂喜)

如果你的鼠标已经如同牛气一样漫天飞舞,pq同按可退出哦。


这时候,问题来了,一个.py程序是否能转换成一个在电脑上可执行的.exe文件呢?当然可以了,为此我今日专门复习了一下下。
1.首先,您装好了python。
2.齐次,您去装配一下pyinstaller。

>pip install pyinstaller

3.生成.exe文件
(1)自定义图标版本:
先cd到你的.py文件所在目录

>cd path

之后嘛,先生成一个.spec文件(为啥这样做,俺也不太清楚?)

pyi-makespec -F name.py

最后,保证你的图标文件.ico和.py文件在一个目录下。
.jpg和.png格式文件转.ico文件可转以下链接哦:
ico文件制作器

pyinstaller -F -w -i name.ico name.py

(2)默认图标版本:
只需要最后一步改成

pyinstaller -F -w name.py

收工!
看看我的成品:牛符咒!牛气冲天!
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值