自动化脚本让一切更自然!

Python游戏自动化脚本|千花代码分享基地-Mrnsht.com

当前位置: 主页 > 脚本代码

装备自动回收+日志记录完整代码

时间:2025-09-06 07:34来源:本站原创 作者:千花 点击:
这是一个完整的游戏自动回收代码,游戏启动后自动聚焦游戏窗口,游戏窗口标题为辅助测试游戏,启动任务后自动进入游戏地图每五秒自动检测是否在指定地图如果不在指定地图则自

这是一个完整的游戏自动回收代码,游戏启动后自动聚焦游戏窗口,游戏窗口标题为辅助测试游戏,启动任务后自动进入游戏地图每五秒自动检测是否在指定地图如果不在指定地图则自动按下T键飞进地图,装备回收勾选框勾选后自动回收装备。


import tkinter as tk

from tkinter import ttk

import pyautogui

import time

import keyboard

import threading

import win32gui

import win32con


class AutoClickerApp:

   def __init__(self, root):

       self.root = root

       self.root.title("只是单独回收")

       self.root.geometry("400x500")

       root.resizable(False, False)


       # 配置参数

       self.target_img = r"C:\Users\Administrator\Desktop\img\wz.png"

       self.click_img = r"C:\Users\Administrator\Desktop\img\ljqw.png"

       self.recycle_img1 = r"C:\Users\Administrator\Desktop\img\hs.png"

       self.recycle_img2 = r"C:\Users\Administrator\Desktop\img\kshs.png"

       self.recycle_img3 = r"C:\Users\Administrator\Desktop\img\hc.png"

       self.recycle_img4 = r"C:\Users\Administrator\Desktop\img\fj.png"

       self.check_interval = 5

       self.recycle_interval = 15

       self.window_title = "9377传奇霸主"

       self.running = False

       self.recycle_running = False

       self.log_text = None

       self.window_rect = None


       self.setup_ui()

       self.focus_game_window_with_click()


   def setup_ui(self):

       control_frame = ttk.LabelFrame(self.root, text="控制面板")

       control_frame.pack(pady=10, padx=10, fill=tk.X)


       ttk.Label(control_frame, text="窗口标题:").grid(row=0, column=0, padx=5)

       self.window_entry = ttk.Entry(control_frame, width=30)

       self.window_entry.grid(row=0, column=1, padx=5)

       self.window_entry.insert(0, self.window_title)


       self.enable_var = tk.BooleanVar(value=False)

       toggle_btn = ttk.Checkbutton(control_frame, text="启用自动任务", variable=self.enable_var, command=self.toggle_task)

       toggle_btn.grid(row=1, column=0, columnspan=2, pady=5)


       # 添加装备回收功能控件

       recycle_frame = ttk.LabelFrame(self.root, text="装备回收设置")

       recycle_frame.pack(pady=10, padx=10, fill=tk.X)


       self.recycle_var = tk.BooleanVar(value=False)

       recycle_check = ttk.Checkbutton(recycle_frame, text="启用装备回收", variable=self.recycle_var, command=self.toggle_recycle)

       recycle_check.grid(row=0, column=0, padx=5, sticky="w")


       ttk.Label(recycle_frame, text="回收间隔(秒):").grid(row=0, column=1, padx=5)

       self.recycle_interval_entry = ttk.Entry(recycle_frame, width=8)

       self.recycle_interval_entry.grid(row=0, column=2, padx=5)

       self.recycle_interval_entry.insert(0, str(self.recycle_interval))


       self.status_var = tk.StringVar(value="状态: 就绪")

       ttk.Label(control_frame, textvariable=self.status_var).grid(row=2, column=0, columnspan=2)


       log_frame = ttk.LabelFrame(self.root, text="操作日志")

       log_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=5)


       self.log_text = tk.Text(log_frame, height=15, state=tk.DISABLED)

       self.log_text.pack(fill=tk.BOTH, expand=True)


   def toggle_recycle(self):

       if self.recycle_var.get():

           try:

               self.recycle_interval = int(self.recycle_interval_entry.get())

               if self.recycle_interval < 5:

                   self.recycle_interval = 5

                   self.recycle_interval_entry.delete(0, tk.END)

                   self.recycle_interval_entry.insert(0, str(self.recycle_interval))

                   self.log("回收间隔最小为5秒,已自动调整")

           except ValueError:

               self.recycle_interval = 15

               self.recycle_interval_entry.delete(0, tk.END)

               self.recycle_interval_entry.insert(0, str(self.recycle_interval))

               self.log("请输入有效的数字,已重置为默认15秒")


           self.recycle_running = True

           self.log(f"装备回收已启用,间隔{self.recycle_interval}秒")

           if not hasattr(self, 'recycle_thread') or not self.recycle_thread.is_alive():

               self.recycle_thread = threading.Thread(target=self.recycle_loop, daemon=True)

               self.recycle_thread.start()

       else:

           self.recycle_running = False

           self.log("装备回收已禁用")


   def recycle_loop(self):

       while self.recycle_running:

           try:

               self.perform_recycle()

               time.sleep(self.recycle_interval)

           except Exception as e:

               self.log(f"装备回收出错: {str(e)}")

               time.sleep(5)


   def perform_recycle(self):

       self.focus_game_window_with_click()

       keyboard.press('b')

       time.sleep(0.1)

       keyboard.release('b')

       time.sleep(1)


       try:

           pos1 = pyautogui.locateCenterOnScreen(self.recycle_img1, confidence=0.7)

           if pos1:

               pyautogui.click(pos1)

               self.log("成功点击回收按钮1")

               time.sleep(1)

               

               pos2 = pyautogui.locateCenterOnScreen(self.recycle_img2, confidence=0.7)

               if pos2:

                   pyautogui.click(pos2)

                   self.log("成功点击回收按钮2")

       except Exception as e:

           self.log(f"回收按钮点击失败: {str(e)}")

       

       time.sleep(1)

       keyboard.press('b')

       time.sleep(0.1)

       keyboard.release('b')


   # 其余原有方法保持不变...

   def get_window_rect(self):

       try:

           hwnd = win32gui.FindWindow(None, self.window_title)

           if hwnd:

               rect = win32gui.GetWindowRect(hwnd)

               self.window_rect = {

                   'left': rect[0],

                   'top': rect[1],

                   'right': rect[2],

                   'bottom': rect[3],

                   'width': rect[2] - rect[0],

                   'height': rect[3] - rect[1]

               }

               return True

       except Exception as e:

           self.log(f"获取窗口坐标失败: {str(e)}")

       return False


   def focus_game_window_with_click(self):

       try:

           hwnd = win32gui.FindWindow(None, self.window_title)

           if hwnd:

               win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)

               win32gui.SetForegroundWindow(hwnd)

               if not self.get_window_rect():

                   return

               click_x = self.window_rect['left'] + self.window_rect['width']//2

               click_y = self.window_rect['top'] + self.window_rect['height']//4

               pyautogui.click(click_x, click_y)

               self.log("窗口聚焦成功")

       except Exception as e:

           self.log(f"窗口聚焦失败: {str(e)}")


   def toggle_task(self):

       if self.enable_var.get():

           self.running = True

           self.status_var.set("状态: 运行中")

           self.log("自动检测点击已启用")

           self.thread = threading.Thread(target=self.run_script, daemon=True)

           self.thread.start()

       else:

           self.running = False

           self.status_var.set("状态: 已停止")

           self.log("自动检测点击已禁用")


   def run_script(self):

       while self.running:

           try:

               if not self.is_on_target_map():

                   self.log("检测到不在目标地图,执行操作序列")

                   self.perform_actions()

               else:

                   self.log("当前在目标地图,等待下次检测")

           except Exception as e:

               self.log(f"检测出错: {str(e)}")

           time.sleep(self.check_interval)


   def is_on_target_map(self):

       try:

           return pyautogui.locateOnScreen(self.target_img, confidence=0.8) is not None

       except Exception as e:

           self.log(f"图像识别出错: {str(e)}")

           return False


   def perform_actions(self):

       self.focus_game_window_with_click()

       keyboard.press('t')

       time.sleep(0.1)

       keyboard.release('t')

       time.sleep(1)

       try:

           button_pos = pyautogui.locateCenterOnScreen(self.click_img, confidence=0.7)

           if button_pos:

               pyautogui.click(button_pos)

               self.log("成功点击目标按钮")

       except Exception as e:

           self.log(f"按钮点击失败: {str(e)}")

       time.sleep(1)

       keyboard.press('z')

       time.sleep(0.1)

       keyboard.release('z')


   def log(self, message):

       if self.log_text:

           self.log_text.config(state=tk.NORMAL)

           self.log_text.insert(tk.END, f"[{time.strftime('%H:%M:%S')}] {message}\n")

           self.log_text.config(state=tk.DISABLED)

           self.log_text.see(tk.END)


if __name__ == "__main__":

   root = tk.Tk()

   app = AutoClickerApp(root)

   root.mainloop()

(责任编辑:admin)
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容