Вам необходимо перестать пытаться найти решение своего вопроса и начать искать решение целевой задачи.
Вместо «как сделать невозможное, чтобы вскипятить воду», надо искать ответ на вопрос «как вскипятить воду».
CityCat4, подозреваю, для управления какими-нибудь «коллайдерами» выпуска 1992 г., для которых управляющее ПО выпущено в виде монолитного бинарника, который ковырять и переписывать дороже, чем поднять совместимую ось…
Вам рано заниматься ботами. Ваш вопрос напоминает вопрос хирурга: коллеги, а когда аппендикс удаляем, разрез надо справа или слева делать?
Рекомендую сначала поучить анатомию и физиологию (т.е. язык программирования и ООП).
Роутер сделать можно, но зачем? NAS сделать можно, но смысл делать это на таком железе?
Чтоб оно было домашним NAS, надо купить несколько весьма недешевых компонентов - тихих вентиляторов Noctua, виброгасящих подвесов для HDD, мощный бесперебойник…
Например, у меня на работе webdriver не может скачать что ему надо, а руками драйвер можно скачать. Так что бывают разные казусы.
Но в целом - поддерживаю.
Мне кажется, что переменная в классе пуля не определена, поэтому python будет искать её в глобальной области видимости.
А там она определена. И должна меняться в цикле while, получая новые значения из атрибута класса Enemy.
Но вообще-то, конечно, каша из класса и лапши варится плохо…
CteplerMarinovich, эта ошибка очень-очень популярна тут. Каждый день её спрашивают. Воспользуйтесь поиском по строке UnicodeDecodeError и вы обязательно найдете среди всего этого и ваш случай, или близкий.
Ну и вдогонку: старайтесь не использовать кириллицу в путях - не все библиотеки корректно с ней работают.
replit пробовали?