游戏角度校准 Python 代码解析
这段代码是使用 Python 编写的游戏角度校准程序。其主要功能是对游戏的角度进行校准,以便后续的自动化操作能够更加精准。
以下是代码的详细解析:
- 导入必要的库。
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
这段代码导入了几个常用的库,包括 time、numpy、pywintypes、win32api、win32con、win32gui,以及一些自定义的工具库 utils 中的 config、log 和 UniverseUtils。
- 定义一个函数
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):根据颜色处理后的局部截图,计算并返回当前游戏角度。
- 定义主函数
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 = 0、ay = 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):将ax与ay的比值存入配置文件中,并转换为字符串格式。config.save():保存配置文件。try: win32gui.SetForegroundWindow(su.my_nd) except pywintypes.error: pass:尝试将游戏窗口置于最前端。log.info('校准完成'):输出校准完成的日志信息。
- 完成校准,输出日志信息。
这段代码通过循环移动鼠标,获取每次移动后的角度变化,并对这些变化值进行处理,计算出一个准确的角度值,并将这个值存入配置文件中,以便后续的自动化操作使用。
总而言之,这段代码通过分析游戏截图的颜色信息,计算每次鼠标移动后的角度变化,最终得到一个准确的角度值,以便后续的自动化操作能够更加精准。
原文地址: https://www.cveoy.top/t/topic/oiqX 著作权归作者所有。请勿转载和采集!