在实验室有师兄写了一个自动答题的程序的启发下,决定写一个自动打劫系统。
介绍:所谓定向劫镖,即劫特定玩家的镖。游戏里要求每个区的每个角色的名字是唯一的,因此可以通过玩家游戏名称实现定向劫镖。
经过观察可以发现游戏的劫镖功能有以下特点:
①进入劫镖界面后,所有押镖的玩家将出现在特定的位置,是一个列表形式。
②可以获取界面坐标,并获取每个列表的截图,调用库aip即可将图中文字识别出来。
③游戏名在一个很小的范围内,可以轻易识别出游戏名,很大提高劫镖准确率。
思路:
①获取劫镖界面的坐标,并由此获得所有押镖玩家列表截图;
②分别识别出游戏名字,判断其与输入的名字是否匹配;
③每次判断后立即刷新,再次判断;
④当匹配成功后,单击劫镖按钮,实现定向劫镖。
游戏截图1-打劫界面:
由图可知,名字位置相对固定,排列很整齐。获取每个名字的坐标,并截图:
名字截图:
利用百度AI的文字识别功能 识别出“ HerryChen”(前有个空格),效果还是不错的。
识别出后控制鼠标单击“传送攻击”即可实现。
如果没有匹配的 就刷新列表即可。
用到了鼠标单击、屏幕截图、百度AI文字识别
代码如下:
from aip import AipOcr
import re
from PIL import ImageGrab
from pymouse import PyMouse
APP_ID = '11502394'
API_KEY = 'zaY4qOgzI2FdSAEmH7VIPmOn'
SECRET_KEY = '50ZBCCxKOAVAV2GqLos47G9VgD9VaZR0'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
string = input("请输入要打劫玩家姓名:")
#string = "HC"
m = PyMouse()
flag = 0
while flag == 0:
x1=370
y1=282
x2=460
y2=300
while y1<450:
if flag == 1:
break
bbox = (x1,y1,x2,y2)
im = ImageGrab.grab(bbox)
im.save('d:/Test_image/test1.png')
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
image = get_file_content(r'D:\Test_image\test1.png')
msg = client.basicAccurate(image)
print(msg.get('words_result_num'))
if msg.get('words_result_num') is None:
x1=370
y1=282
x2=460
y2=300
m.click(570,586)
continue
s=''
for i in msg.get('words_result'):
s = s + i.get('words')
if string==s:
print("匹配成功,开始打劫")
flag = 1
#执行打劫操作
m.click(x1+600,y1-20)
else:
print("匹配失败")
y1 = y1 + 123
y2 = y2 + 123
if flag == 0:
#刷新操作
m.click(570,586)
结果截图:
匹配成功,实现定向打劫