这段代码是使用 Python 编写的游戏角度校准程序。其主要功能是对游戏的角度进行校准,以便后续的自动化操作能够更加精准。

以下是代码的详细解析:

  1. 导入必要的库。
import time
import numpy as np
import pywintypes
import win32api
import win32con
import win32gui

from utils.config import config
from utils.log import log
from utils.utils import UniverseUtils

这段代码导入了几个常用的库,包括 timenumpypywintypeswin32apiwin32conwin32gui,以及一些自定义的工具库 utils 中的 configlogUniverseUtils

  1. 定义一个函数get_angle(),用于获取当前游戏角度。
def get_angle(su):
    su.press('w', 0.2)
    time.sleep(0.3)
    su.get_screen()
    blue = np.array([234, 191, 4])
    shape = (int(su.scx * 190), int(su.scx * 190))
    local_screen = su.get_local(0.9333, 0.8657, shape)
    local_screen[np.sum(np.abs(local_screen - blue), axis=-1) <= 150] = blue
    return su.get_now_direc(local_screen)

这个函数接收一个 UniverseUtils 对象作为参数,并通过一系列操作获取当前游戏角度:

  • su.press('w', 0.2):按下键盘的 w 键 0.2 秒。
  • time.sleep(0.3):等待 0.3 秒。
  • su.get_screen():获取游戏截图。
  • blue = np.array([234, 191, 4]):定义一个蓝色的颜色值。
  • shape = (int(su.scx * 190), int(su.scx * 190)):定义一个区域大小。
  • local_screen = su.get_local(0.9333, 0.8657, shape):获取截图中指定区域的局部截图。
  • local_screen[np.sum(np.abs(local_screen - blue), axis=-1) <= 150] = blue:对局部截图进行颜色处理,将与蓝色颜色相近的像素设置为蓝色。
  • return su.get_now_direc(local_screen):根据颜色处理后的局部截图,计算并返回当前游戏角度。
  1. 定义主函数main(),开始进行校准。
def main():
    log.info('开始校准')
    su = UniverseUtils()
    su.multi = 1
    init_ang = get_angle(su)
    lst_ang = init_ang
    win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, 0, 3000)
    ang_list = []
    for i in range(10):
        win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, 0, 300)
        su.mouse_move(60)
        now_ang = get_angle(su)
        sub = lst_ang - now_ang
        while sub < 0:
            sub += 360
        ang_list.append(sub)
        lst_ang = now_ang
    ang_list = np.array(ang_list)
    print(ang_list)
    ax = 0
    ay = 0
    for i in ang_list:
        if abs(i - np.median(ang_list)) <= 5:
            ax += 60
            ay += i
    config.angle = str(ax / ay)
    config.save()
    try:
        win32gui.SetForegroundWindow(su.my_nd)
    except pywintypes.error:
        pass
    log.info('校准完成')

主函数 main() 主要负责以下步骤:

  • log.info('开始校准'):输出开始校准的日志信息。
  • su = UniverseUtils():创建一个 UniverseUtils 对象。
  • su.multi = 1:设置一个参数值。
  • init_ang = get_angle(su):获取初始角度。
  • lst_ang = init_ang:将初始角度赋值给一个变量。
  • win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, 0, 3000):移动鼠标到指定位置。
  • ang_list = []:创建一个列表,用于存储每次角度变化的差值。
  • for i in range(10)::循环10次,进行以下操作:
    • win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, 0, 300):移动鼠标到指定位置。
    • su.mouse_move(60):移动鼠标 60 个单位。
    • now_ang = get_angle(su):获取当前角度。
    • sub = lst_ang - now_ang:计算当前角度与上一次角度的差值。
    • while sub < 0::如果差值小于 0,则将其加上 360 度。
    • ang_list.append(sub):将差值添加到列表中。
    • lst_ang = now_ang:将当前角度赋值给变量。
  • ang_list = np.array(ang_list):将列表转换为 NumPy 数组。
  • print(ang_list):输出角度差值列表。
  • ax = 0ay = 0:定义两个变量。
  • for i in ang_list::循环遍历角度差值列表,进行以下操作:
    • if abs(i - np.median(ang_list)) <= 5::如果当前差值与列表中所有差值的平均值相差小于 5 度,则进行下一步操作。
    • ax += 60:将 ax 变量加上 60。
    • ay += i:将 ay 变量加上当前差值。
  • config.angle = str(ax / ay):将 axay 的比值存入配置文件中,并转换为字符串格式。
  • config.save():保存配置文件。
  • try: win32gui.SetForegroundWindow(su.my_nd) except pywintypes.error: pass:尝试将游戏窗口置于最前端。
  • log.info('校准完成'):输出校准完成的日志信息。
  1. 完成校准,输出日志信息。

这段代码通过循环移动鼠标,获取每次移动后的角度变化,并对这些变化值进行处理,计算出一个准确的角度值,并将这个值存入配置文件中,以便后续的自动化操作使用。

总而言之,这段代码通过分析游戏截图的颜色信息,计算每次鼠标移动后的角度变化,最终得到一个准确的角度值,以便后续的自动化操作能够更加精准。

游戏角度校准 Python 代码解析

原文地址: https://www.cveoy.top/t/topic/oiqX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录