main
Сергей Ванюшкин 2023-10-31 16:37:00 +03:00
parent 2ed791378c
commit fbc48c2f25
1 changed files with 39 additions and 20 deletions

View File

@ -1,5 +1,6 @@
import os import os
import time import time
from pathlib import Path
from subprocess import Popen from subprocess import Popen
from tkinter import ( from tkinter import (
BOTH, BOTH,
@ -16,7 +17,6 @@ from tkinter import (
mainloop, mainloop,
messagebox, messagebox,
) )
from pathlib import Path
class ClickerGame: class ClickerGame:
@ -24,23 +24,36 @@ class ClickerGame:
Св-во класса AHK_PATH должно содержать полный путь до запускаемого файла, Св-во класса AHK_PATH должно содержать полный путь до запускаемого файла,
если приложение установлено не в папки по умолчанию если приложение установлено не в папки по умолчанию
""" """
AHK_PATH = "<Введите сюда путь до приложения AutoHotKey>" AHK_PATH = "<Введите сюда путь до приложения AutoHotKey>"
def __init__(self): def __init__(self):
# Поиск места установки AutoHotKey # Поиск места установки AutoHotKey
self.is_ahk_path_set = False self.is_ahk_path_set = False
if os.path.isfile(app_exe := os.path.join( if os.path.isfile(
Path.home(), "AppData", "Local", "Programs", "AutoHotkey", "UX", "AutoHotkeyUX.exe" app_exe := os.path.join(
)): Path.home(),
"AppData",
"Local",
"Programs",
"AutoHotkey",
"UX",
"AutoHotkeyUX.exe",
)
):
self.AHK_PATH = app_exe self.AHK_PATH = app_exe
self.is_ahk_path_set = True self.is_ahk_path_set = True
elif os.path.isfile(app_exe := os.path.join(r'c:\\', 'Program Files', "AutoHotkey", "UX", "AutoHotkeyUX.exe")): elif os.path.isfile(
app_exe := os.path.join(
r"c:\\", "Program Files", "AutoHotkey", "UX", "AutoHotkeyUX.exe"
)
):
self.AHK_PATH = app_exe self.AHK_PATH = app_exe
self.is_ahk_path_set = True self.is_ahk_path_set = True
else: else:
messagebox.showerror( messagebox.showerror(
"Can't find AutoHotKey", "Can't find AutoHotKey",
"""Set AHK_PATH in app.py Until then, the clicker will not work""", """Пропишите AHK_PATH До этого, автокликер работать не будет""",
) )
self.__root = Tk() self.__root = Tk()
@ -61,7 +74,7 @@ class ClickerGame:
self.score = 0 self.score = 0
self.message = StringVar() self.message = StringVar()
self.message.set(f"Your score is: {self.score}") self.message.set(f"Ваш счет: {self.score}")
self.label2 = Label( self.label2 = Label(
self.frame, textvariable=self.message, font=("Arial", 15), bg="green" self.frame, textvariable=self.message, font=("Arial", 15), bg="green"
) )
@ -84,26 +97,32 @@ class ClickerGame:
self.clicker.place(relx=0.5, rely=0.5, anchor="center") self.clicker.place(relx=0.5, rely=0.5, anchor="center")
self.ahk_button = Button( self.ahk_button = Button(
self.__root, text="Manual run AHK", command=self.switcher_ahk self.__root, text="Запустить AHK", command=self.switcher_ahk
) )
self.ahk_button.pack(side=LEFT, padx=10, pady=10) self.ahk_button.pack(side=LEFT, padx=10, pady=10)
self.close_button = Button(self.__root, text="EXIT", command=self.quit) self.close_button = Button(self.__root, text="Выход", command=self.quit)
self.close_button.pack(side=RIGHT, padx=10, pady=10) self.close_button.pack(side=RIGHT, padx=10, pady=10)
self.ahk_button = Button( self.ahk_button = Button(
self.__root, text="Clicker RESET", command=self.clicker_reset self.__root, text="Сброс игры", command=self.clicker_reset
) )
self.ahk_button.pack(side=RIGHT, padx=10, pady=10) self.ahk_button.pack(side=RIGHT, padx=10, pady=10)
mainloop() mainloop()
def __del__(self): def __del__(self):
"""Завершаем поток АНК ели он запущен при выходе""" """Завершаем поток АНК ели он запущен при
уничтожении игры.
Можно было и в метод quit разместить, но
правильнее добавить деструктор обекта"""
if self.ahk_flag: if self.ahk_flag:
self.switcher_ahk() self.switcher_ahk()
def key(self, event): def key(self, event):
"""Отлавливаем все event в игре, в т.ч и
нажатия клавиш клавиатуры. Обрабатываем
интересующие нас"""
if event.keycode == 97: if event.keycode == 97:
# Переключаем статус АНК по numpad1 # Переключаем статус АНК по numpad1
self.switcher_ahk() self.switcher_ahk()
@ -121,29 +140,28 @@ class ClickerGame:
pass pass
self.score += 1 self.score += 1
self.message.set(f"Your score is: {self.score}") self.message.set(f"Ваш счет: {self.score}")
def switcher_ahk(self): def switcher_ahk(self):
"""Переключаем состояние скрипта кликера, если путь к нему установлен""" """Переключаем состояние кликера(вкл/выкл),
если путь к нему установлен или выводим
сообщение с предупреждением"""
if not self.is_ahk_path_set: if not self.is_ahk_path_set:
messagebox.showerror( messagebox.showerror(
"Can't find AutoHotKey", "Can't find AutoHotKey",
"""Set AHK_PATH in app.py Until then, the clicker will not work""", """Не могу запустить автокликер. Не указан путь к AutoHotKey""",
) )
elif self.ahk_flag: elif self.ahk_flag:
print("Stop clicker")
self.ahk_flag = False self.ahk_flag = False
self.process.kill() self.process.kill()
else: else:
print("run clicker")
self.ahk_flag = True self.ahk_flag = True
self.process = Popen([self.AHK_PATH, "clicker.ahk"]) self.process = Popen([self.AHK_PATH, "clicker.ahk"])
def timer_update(self): def timer_update(self):
self.timer = int(time.time() - self.start_time) self.timer = int(time.time() - self.start_time)
self.timer_message.set( self.timer_message.set(
f"Elapsed time:\n{self.timer // 60}min. {self.timer % 60} sec." f"Время игры:\n{self.timer // 60}мин. {self.timer % 60} сек."
) )
self.__root.after(1000, self.timer_update) self.__root.after(1000, self.timer_update)
@ -151,7 +169,7 @@ class ClickerGame:
if self.ahk_flag: if self.ahk_flag:
self.switcher_ahk() self.switcher_ahk()
self.score = 0 self.score = 0
self.message.set(f"Your score is: {self.score}") self.message.set(f"Ваш счет: {self.score}")
self.timer = 0 self.timer = 0
self.start_time = time.time() self.start_time = time.time()
self.timer_update() self.timer_update()
@ -160,4 +178,5 @@ class ClickerGame:
self.__root.destroy() self.__root.destroy()
if __name__ == "__main__":
game = ClickerGame() game = ClickerGame()