文章目錄
- 1.活動背景
- 2.代碼
- 2.1 截屏
- 2.2 滑鼠點擊
- 2.3 影像匹配
- 2.4 點擊圖示
- 2.5 集市&鬧市
- 3.readme
為了學習編程而做測驗用,嚴禁用于商業非法盈利
1.活動背景

聽一個朋友說:
每天可以刷999次+活動次數70次,
開頭去尾10秒平均一次的話,10*(999+70)/3600~=3h,
朋友說實際做下來得6個小時,
加上手指頭每次點兩下,
ch兼職毫無人性....
so,人工智能AI就是來幫忙的呀...
ok,直接上原理:簡單來講-AI幫你去點那兩下滑鼠,
1.先截游戲螢屏
2.opencv識別影像
點擊開始,
3.識別影像
點擊結束
2.代碼
2.1 截屏
#新建python檔案:prientscreen.py
#一切為了懶嘛,就直接把游戲視窗認認真真的拖到左上角了,,,
#截屏,獲取原圖,會一直更新,會在此影像上識別要點擊的圖示
from PIL import Image
from PIL import ImageGrab
def Printscreen():
# 截圖坐標 左上角 ,右下角
size = (0, 0,1426,845)#界面大小,一定要先拖到左上角哦,
img = ImageGrab.grab(size)
# 保存截圖
img.save("yuan.png")
print('截圖進行了一次重繪')
# 打開截圖
# img.show()
# 測驗
# Printscreen()
2.2 滑鼠點擊
#新建python檔案:click.py
import win32api
import win32con
import win32gui
import time
import random
def xunzhao():
#尋找游戲視窗,要先打開游戲哦...
wdname = u'陰陽師-網易游戲'
# 取得視窗句柄
hwnd = win32gui.FindWindow(0, wdname)
if not hwnd:
print("視窗找不到,請確認視窗句柄名稱:【%s】" % wdname )
exit()
# 視窗顯示最前面
win32gui.SetForegroundWindow(hwnd)
def move_click(x, y, t=0): # 移動滑鼠并點擊左鍵
suiji1 = random.randint(0,10)
suiji2 = random.randint(0,10)
# print('滑鼠抖動亂數為:+',suiji2,' +',suiji1),鬼使黑,你懂的...
win32api.SetCursorPos((x+suiji1, y+suiji2)) # 設定滑鼠位置(x, y),設定亂數,以防被封
time.sleep(0.1)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) # 點擊滑鼠左鍵
# print('模擬點擊')
return 0
# # 測驗
# while True :
# suiji = random.randint(0,5) #獲得亂數
# xunzhao() #游戲頂置,獲得句柄
# time.sleep(suiji) #間隔時間
# move_click(1280, 685) #坐標點擊
2.3 影像匹配
#新建檔案image_discern.py
import cv2
import numpy as np
from matplotlib import pyplot as plt
import math
###影像匹配###
def Image_Discern(imgone,imgtwo):
# 1.模板匹配,對比圖1和圖2
# 大圖
img = cv2.imread(imgone)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 小圖
template = cv2.imread(imgtwo, 0)
h, w = template.shape[:2] # rows->h, cols->w
img2 = img.copy()
# 對比影像
res = cv2.matchTemplate(img_gray, template, cv2.TM_SQDIFF_NORMED)#歸一化平方差匹配法,核心工具
# 回傳坐標
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
top_left = min_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
# 計算中心坐標
a1, a2 = top_left
b1, b2 = bottom_right
c1 = (a1 + w/2)*0.8 # 0.8匹配螢屏解析度(因為解析度原因這里乘0.8用于適應平復解析度坐標位置)
c2 = (a2 + h/2)*0.8
e1 = math.ceil(c1)
e2 = math.ceil(c2)
d1 = (e1, e2)
# print('中心坐標為:' , d1)
###測驗影像匹配,彈出影像顯示匹配位置###
# 在匹配點畫小圓心
# cv2.circle(res, top_left, 10, 0, 2)
# cv2.imshow("res", res)
# # 畫矩形
# cv2.rectangle(img2, top_left, bottom_right, (0, 255, 0), 2)
# cv2.imshow("img2",img2)
# cv2.waitKey(0)
# 兩張圖片是否匹配
# print('各個引數為:',min_val, max_val, min_loc, max_loc)
###進行影像篩選###
if min_val <= 0.03:#平方差越小匹配度越好;
# print('圖片匹配')
return(d1)
else:
# print('圖片不匹配')
return(0)
# 測驗
# Image_Discern('./png/imgone.PNG','./png/imgtwo.PNG') # (大圖,小圖)匹配影像
2.4 點擊圖示
#新建檔案:identify_click.py
import click
import printscreen
import image_discern
import time
import random
###進行圖示點擊###
def Identify_Click(little):
a = random.uniform(0,0.3)
click.xunzhao()
time.sleep(a) # 間隔秒數
printscreen.Printscreen() # 截圖
time.sleep(a)
b1 = image_discern.Image_Discern('yuan.png', little) #影像對比
for i in range(1,6):#點不到圖示的話重復幾次
if b1 == 0:
# print('準備再次尋找第',i,'次')
time.sleep(a)
click.xunzhao()
time.sleep(a)
printscreen.Printscreen()
time.sleep(a)
b1 = image_discern.Image_Discern('yuan.png', little)
else:
time.sleep(a)
printscreen.Printscreen() # 截圖
b1 = image_discern.Image_Discern('yuan.png', little) #影像對比
a1, a2 = b1 #地址賦值
click.move_click(a1, a2) #模擬點擊
time.sleep(a)
break
###尋找場景內是否有相應圖示###
def Identify_Click_Seek(little):
b = random.uniform(0,0.5)#模型匹配亂數
# print(a)
# print(b)
click.xunzhao()
time.sleep(b) # 間隔秒數
printscreen.Printscreen() # 截圖
time.sleep(b)
b1 = image_discern.Image_Discern('yuan.png', little) #影像對比
if b1 == 0:
# print('沒有相應圖示')
return(False)
else:
# print('找到相應圖示')
return(True)
2.5 集市&鬧市
#新建python檔案jishi.py
import time
import identify_click
import random
def Jishi():
b = random.uniform(0.1,2)#引入戰斗間隔亂數
while True:
a = ('-----------------')
# ##判斷體力是否足夠##
# if identify_click.Identify_Click_Seek('./png/img_GouMaiTiLi.png'):
# print(a)
# print('體力不足')
# break #結束回圈
#判斷戰斗結束情形1##
if identify_click.Identify_Click_Seek('./png/img_Next.png'):
identify_click.Identify_Click('./png/img_Next.png')
print(a)
print('戰斗結束')
continue #跳出本次回圈
#判斷戰斗結束情形2##
if identify_click.Identify_Click_Seek('./png/img_Next2.png'):
identify_click.Identify_Click('./png/img_Next2.png')
print(a)
print('戰斗結束')
continue #跳出本次回圈
#判斷戰斗結束情形3##
if identify_click.Identify_Click_Seek('./png/img_Next3.png'):
identify_click.Identify_Click('./png/img_Next3.png')
print(a)
print('戰斗結束')
continue #跳出本次回圈
##繼續戰斗按鈕##
elif identify_click.Identify_Click_Seek('./png/img_Tiaozhan.png'):
identify_click.Identify_Click('./png/img_Tiaozhan.png')
print(a)
print('戰斗開始')
continue #跳出本次回圈
time.sleep(b) #間隔秒數
return(True)
# 測驗
Jishi()
3.readme
一、安裝
安裝anaconda3,網址https://www.anaconda.com/products/individual#Downloads
電腦左下角點開始-anaconda3-anaconda prompt-
conda create -n YYS python=3.8
activate YYS
pip install pypiwin32 -i https://pypi.tuna.tsinghua.edu.cn/simple
cd C:\Anaconda3\envs\YYS\Scripts
python pywin32_postinstall.py -install
pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install matplotlib --trusted-host pypi.douban.com
pip install opencv-python --trusted-host pypi.douban.com
檢查螢屏:1920X1080,YYS視窗精準放到左上角
二、使用:
1.管理員運行anaconda prompt
activate YYS
cd/d D:\hjz-py\Project\16-YYS\17_yys
python jishi.py,運行后若出錯按?再次運行即可
修改戰斗時間間隔:
jishi.py里面
第七行 b = random.randrange(1,3)#引入戰斗間隔亂數
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/332183.html
標籤:其他
上一篇:C++ easyx制作打磚塊游戲
