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 time
from pathlib import Path
from subprocess import Popen
from tkinter import (
BOTH,
@ -16,7 +17,6 @@ from tkinter import (
mainloop,
messagebox,
)
from pathlib import Path
class ClickerGame:
@ -24,23 +24,36 @@ class ClickerGame:
Св-во класса AHK_PATH должно содержать полный путь до запускаемого файла,
если приложение установлено не в папки по умолчанию
"""
AHK_PATH = "<Введите сюда путь до приложения AutoHotKey>"
def __init__(self):
# Поиск места установки AutoHotKey
self.is_ahk_path_set = False
if os.path.isfile(app_exe := os.path.join(
Path.home(), "AppData", "Local", "Programs", "AutoHotkey", "UX", "AutoHotkeyUX.exe"
)):
if os.path.isfile(
app_exe := os.path.join(
Path.home(),
"AppData",
"Local",
"Programs",
"AutoHotkey",
"UX",
"AutoHotkeyUX.exe",
)
):
self.AHK_PATH = app_exe
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.is_ahk_path_set = True
else:
messagebox.showerror(
"Can't find AutoHotKey",
"""Set AHK_PATH in app.py Until then, the clicker will not work""",
"""Пропишите AHK_PATH До этого, автокликер работать не будет""",
)
self.__root = Tk()
@ -61,7 +74,7 @@ class ClickerGame:
self.score = 0
self.message = StringVar()
self.message.set(f"Your score is: {self.score}")
self.message.set(f"Ваш счет: {self.score}")
self.label2 = Label(
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.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.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.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)
mainloop()
def __del__(self):
"""Завершаем поток АНК ели он запущен при выходе"""
"""Завершаем поток АНК ели он запущен при
уничтожении игры.
Можно было и в метод quit разместить, но
правильнее добавить деструктор обекта"""
if self.ahk_flag:
self.switcher_ahk()
def key(self, event):
"""Отлавливаем все event в игре, в т.ч и
нажатия клавиш клавиатуры. Обрабатываем
интересующие нас"""
if event.keycode == 97:
# Переключаем статус АНК по numpad1
self.switcher_ahk()
@ -121,29 +140,28 @@ class ClickerGame:
pass
self.score += 1
self.message.set(f"Your score is: {self.score}")
self.message.set(f"Ваш счет: {self.score}")
def switcher_ahk(self):
"""Переключаем состояние скрипта кликера, если путь к нему установлен"""
"""Переключаем состояние кликера(вкл/выкл),
если путь к нему установлен или выводим
сообщение с предупреждением"""
if not self.is_ahk_path_set:
messagebox.showerror(
"Can't find AutoHotKey",
"""Set AHK_PATH in app.py Until then, the clicker will not work""",
"""Не могу запустить автокликер. Не указан путь к AutoHotKey""",
)
elif self.ahk_flag:
print("Stop clicker")
self.ahk_flag = False
self.process.kill()
else:
print("run clicker")
self.ahk_flag = True
self.process = Popen([self.AHK_PATH, "clicker.ahk"])
def timer_update(self):
self.timer = int(time.time() - self.start_time)
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)
@ -151,7 +169,7 @@ class ClickerGame:
if self.ahk_flag:
self.switcher_ahk()
self.score = 0
self.message.set(f"Your score is: {self.score}")
self.message.set(f"Ваш счет: {self.score}")
self.timer = 0
self.start_time = time.time()
self.timer_update()
@ -160,4 +178,5 @@ class ClickerGame:
self.__root.destroy()
if __name__ == "__main__":
game = ClickerGame()