utils.py:
添加异常处理,确保日志记录的稳定性。
使用更有意义的函数名和变量名。
import os
import time
import pyautogui
import win32con
import win32gui
from loguru import logger
... 其他代码 ...
def click_at_position坐标(x, y):
try:
pyautogui.moveTo(x, y)
pyautogui.click()
except Exception as e:
logger.error(f"Error clicking at position ({x}, {y}): {e}")
... 其他代码 ...
UI.py:
使用Dear PyGui的collapsing功能来创建可折叠的面板,使UI更加整洁。
优化按钮和文本的布局,使其在不同屏幕尺寸下都能良好显示。
from dearpygui.dearpygui import dpg
... 其他代码 ...
with dpg.collapsing('game_options', label='Game Options'):
# 在这里添加按钮和选项
dpg.add_button(label='Start Game', callback=Run_WTAuto)
dpg.add_button(label='End Game', callback=ShunDown_WTAuto)
# ... 更多选项 ...
... 其他代码 ...
join.py 和 main.py:
对于游戏中的特定元素,如按钮和图标,创建一个单独的模块来管理它们的路径和逻辑。
使用状态机的概念来管理游戏的各个阶段,使逻辑更加清晰。
假设有一个名为 game_elements.py 的新文件
from typing import Dict, Optional
class GameElement:
def init(self, image_path: str, threshold: float = 0.8):
self.image_path = image_path
self.threshold = threshold
def is_visible(self) -> bool:
return find(self.image_path, self.threshold) is not None
在 main.py 中使用
from game_elements import GameElement
... 其他代码 ...
class InGameState:
def init(self):
self.join_button = GameElement('pic/join.png')
# ... 初始化其他元素 ...
def update(self):
if self.join_button.is_visible():
click(self.join_button.image_path)
# ... 处理点击后的逻辑 ...
... 其他代码 ...
find.py:
对于图像处理函数,考虑使用更高效的算法,如ORB特征匹配,以提高匹配速度。
优化屏幕截图的代码,避免在每次循环中都进行全屏截图。
假设有一个名为 image_utils.py 的新文件
import cv2
import numpy as np
def find_template_in_screen(image_path: str, threshold: float = 0.6) -> Optional[tuple]:
# 使用 cv2.ORB() 和 cv2.drawMatches() 来优化匹配过程
# ... 详细实现 ...
在 find.py 中使用
from image_utils import find_template_in_screen
... 其他代码 ...
def locate(p, m):
# 使用 find_template_in_screen 来替代原始的 locate 函数
position = find_template_in_screen(p, m)
if position:
return position
return None
end.py 和 running.py:
将游戏中的操作抽象成函数,如repair, change_weapon, avoid_danger等。
使用状态机来管理游戏的不同阶段,如running, ending, repairing等。
假设有一个名为 game_actions.py 的新文件
from typing import Callable
class GameAction:
def init(self, name: str, function: Callable, *args, **kwargs):
self.name = name
self.function = function
self.args = args
self.kwargs = kwargs
def execute(self):
self.function(*self.args, **self.kwargs)
在 end.py 或 running.py 中使用
from game_actions import GameAction
... 其他代码 ...
def repair_ship():
# ... 修复船只的逻辑 ...
def avoid_danger():
# ... 避免危险的逻辑 ...
actions = [
GameAction('Repair', repair_ship),
GameAction('Avoid Danger', avoid_danger)
# ... 更多动作 ...
]
在游戏循环中执行相应的动作
for action in actions:
action.execute()