Py学习  »  Python

Python制作回合制手游外挂简单教程,最终篇

python • 5 年前 • 648 次点击  

引入:

接着上篇的博文,今天我们讲如何实现助人为乐

'''
作者:Rest探路者
源自:https://www.cnblogs.com/Java-Starter/p/9609671.html
'''

前期准备:

如何获取图片中指定文字的坐标?

我的思路是截取一个小区域,再根据小区域左上角的坐标获取中央坐标

例如:

获取坐上角的x和y坐标,测量x到红点的横向距离x1,在测量y点到红点的纵向距离y1

可以得出红点的坐标(x+x1,y+y1)

X1 = 1132
X2 = 1536
time.sleep(3)
screenshot(X1, 622, X2, 676,helpedName1)#截图
mousemove_click(X1 + 200, Y + 30)

截取了一小区域,然后获得了中心坐标,这里的200和30是自己测量出来的

 

如果有更好更直接的获取图片中指定文字的坐标的方法可以下方评论告诉我,我也学习学习

回到顶部

开始制作外挂:

详细步骤之前已经说过

Python制作回合制手游外挂,轻松帮你完成游戏人物

Python制作回合游戏自动完成任务辅助脚本,进阶篇

详细代码如下:

imageGrabUtil.py(截图工具)

#coding=utf-8

from PIL import ImageGrab
# 参数说明
# 第一个参数 开始截图的x坐标
# 第二个参数 开始截图的y坐标
# 第三个参数 结束截图的x坐标
# 第四个参数 结束截图的y坐标
def screenshot (x1,y1,x2,y2,filename):
    bbox = (x1, y1, x2, y2)
    im = ImageGrab.grab(bbox)

    # 参数 保存截图文件的路径
    im.save('E:\\python_project\\Asktao_Automation\\resource\\'+filename+'.png')

baiduAipUtil.py(文字识别工具)

我这里百度云的APPP_ID、API_KEY、SECRET_KEY保存在config.ini

#coding=utf-8
from aip import AipOcr

import re

#百度文字识别
# !/usr/bin/env python
# -*- coding:utf-8 -*-

import ConfigParser
import os

os.chdir("E:\python_project\Asktao_Automation\util")

cf = ConfigParser.ConfigParser()

cf.read("config.ini")

secs = cf.sections()

APPP_ID = cf.get("baiduAip","APPP_ID")
API_KEY = cf.get("baiduAip","API_KEY")
SECRET_KEY = cf.get("baiduAip","SECRET_KEY")

client = AipOcr(APPP_ID,API_KEY,SECRET_KEY)

def characterRecognition(filePath):
    i 
= open(filePath,'rb')

    img = i.read()

    message = client.basicGeneral(img);

    #print(message.get('words_result'))
    string = '';

    for i in message.get('words_result'):

        print(i.get('words'))
        string += i.get('words')
    return string

config.ini

[baiduAip]
APPP_ID = APPP_ID 
API_KEY = API_KEY  

SECRET_KEY = SECRET_KEY 

joyByHelpingPeople.py

我只做了冯喜来和杨镖头的部分,其他人物的可以用同样的方法做出来,先走完流程,再写代码

#coding=utf-8
import autopy
import time
import win32api
import win32con
from imageGrabUtil import screenshot
from baiduAipUtil import characterRecognition
import sys
defaultencoding = 'utf-8'
if sys.getdefaultencoding() != defaultencoding:
    reload(sys)
    sys.setdefaultencoding(defaultencoding)

#助人为乐
#time.sleep(5)
win32api.keybd_event(18,0,0,0)  #alt键位码是18
win32api.keybd_event(9,0,0,0)  #tab键位码是9
time.sleep(0.5)
win32api.keybd_event(13,0,0,0)  #enter键位码是13

win32api.keybd_event(18,0,win32con.KEYEVENTF_KEYUP,0#释放按键
win32api.keybd_event(9,0,win32con.KEYEVENTF_KEYUP,0)
win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
time.sleep(2)

def mousemove_click(x,y):
    autopy.mouse.smooth_move(x, y)
    autopy.mouse.click()


#帮助冯喜来
def  fengXiLai(Y):
    mousemove_click(X1+200,Y+30#鼠标移到按钮中央,点击冯喜来按钮
    for i in range(1,4,1):
        mousemove_click(1448,380)
        time.sleep(150#打强盗、无名剑客平均时间150s
        mousemove_click(1515258)#跳过对话
        mousemove_click(1515258)
        time.sleep(15)
        mousemove_click(1448380)# 白邦芒处领赏

#帮助杨镖头
def yangBiaoTou(Y):
    mousemove_click(X1 + 200, Y + 30)
    for i in range(1,5,1):
        #和张老板对话,传递心意,找张老板,找玄武
        mousemove_click(1448380)#点任务栏 和张老板对话
        time.sleep(15)
        mousemove_click(1515258)  # 跳过对话

    mousemove_click(1448380)  # 点任务栏 寻找窃贼
    time.sleep(45)#和窃贼对战时间45s
    mousemove_click(1515258)  # 跳过对话

    for i in range(1,5 ,1):
        #向张老板复命,月老,莲花姑娘,张老板
        mousemove_click(1448380)  # 点任务栏 向张老板复命
        time.sleep(15)
        mousemove_click(1515258)  # 跳过对话

mousemove_click(771203)  # 活动的坐标

mousemove_click(1359,503#前往的坐标

time.sleep(15)#从天墉城城中心/其他地图走到白帮忙花费15s

mousemove_click(1336,649#领赏

#为了获取图片中指定文字的坐标,这里需要分开截图
helpedName1 = "helpedName1"
X1 = 1132
X2 = 1536
time.sleep(3)
screenshot(X1, 622, X2, 676,helpedName1)#截图

judgehelpedNameStr1 = characterRecognition('E:\\python_project\\Asktao_Automation\\resource\\'+helpedName1+'.png')#文字识别

helpedName2 = "helpedName2"

screenshot(X1, 690, X2, 741,helpedName2)#截图

judgehelpedNameStr2 = characterRecognition('E:\\python_project\\Asktao_Automation\\resource\\'+helpedName2+'.png')#文字识别
if '冯喜来' in judgehelpedNameStr1:
    fengXiLai(622)
elif '冯喜来' in judgehelpedNameStr2:
    fengXiLai(690)
elif '杨镖头' in judgehelpedNameStr1:
    yangBiaoTou(622)
elif '杨镖头' in judgehelpedNameStr2:
    yangBiaoTou(690)

至此,回合制手游(如问道)的所有任务的脚本都可以用这三篇教程的所讲方法去做

若有更简洁的方法,欢迎指出


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/zWT9oebyUy
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/23983
 
648 次点击