Загрузка данных


            self.track_board_changes()

        if self.root is not None:
            self.root.after(250, self._tick)

    def shutdown(self):
        self.running = False
        try:
            keyboard.unhook_all_hotkeys()
        except Exception:
            pass

        self._close_engine()

        if self.root is not None:
            try:
                self.root.destroy()
            except Exception:
                pass

    def run(self):
        self._build_gui()

        keyboard.add_hotkey("s", self.on_start_pressed)
        keyboard.add_hotkey("c", self.on_color_toggle_pressed)
        keyboard.add_hotkey("m", self.cycle_difficulty_mode)
        keyboard.add_hotkey("l", self.toggle_auto_move_and_execute)
        keyboard.add_hotkey("h", self.mover.toggle_humanly_mode)
        keyboard.add_hotkey("+", self.mover.speed_up)
        keyboard.add_hotkey("-", self.mover.speed_down)

        self.running = True
        self._set_status("Готово. Нажми S для первичного анализа.")
        self._sync_ui_state()

        if self.root is not None:
            self.root.after(250, self._tick)
            self.root.mainloop()


if __name__ == "__main__":
    logic = ChessLogic(engine_path="stockfish.exe", mode="medium")
    logic.run