Идея конечного автомата не плохая, в зависимости от типа игры, для которой вы пытаетесь написать бота. Ваше замечание о том, что код станет более сложным, чем вы хотите, является хорошим, и сейчас самое время отступить и рассмотреть ваши варианты.
Из вашего кода и ваших вопросов это Похоже, вы довольно плохо знакомы с программированием, так что вы можете изучить некоторые основы, чтобы решить, будут ли они вам полезны.
Например, если вам требуется более одного конечного автомата или вы хотите составить конечный автомат из нескольких меньших, вы можете рассмотреть возможность записи конечного автомата в виде класса, который затем можно использовать повторно. То же самое применимо, если вы хотите написать разные для разных игр или для разных стратегий, чтобы играть в одну и ту же игру.
Вы спрашиваете о вводе с клавиатуры, и это то, что вы можете решать отдельно, но с одним основным l oop, который прогрессирует в шагах, которые прерываются нажатиями клавиш, может быть не лучшим подходом, когда вы начинаете добавлять вещи. Подумайте, какие изменения ввода и состояния должны повлиять на то, что делает ваша программа, и сфокусируйтесь на правильном подборе важных частей, прежде чем слишком сильно беспокоиться о том, как все это собрать вместе.
Чтобы ответить на ваши вопросы: есть лучшие способы чтобы написать свой код, и поскольку конечные автоматы являются очень распространенной концепцией информатики, существует множество библиотек, одна из которых может удовлетворить ваши потребности и сэкономить много времени. Например, посмотрите на https://github.com/pytransitions/transitions
Что касается проверки нажатий клавиш: вы можете просто заставить пользователя ввести что-то с помощью input()
, но если вы хотите увидеть, происходит ли нажатие клавиши чтобы быть нажатым, вы должны проверить библиотеку, такую как keyboard
и, в частности, is_pressed()
https://github.com/boppreh/keyboard#keyboard .is_pressed
Обратите внимание, что я не рекомендую эти библиотеки, я просто хочу указать на то, что для распространенных проблем библиотеки часто являются лучшим способом go. Достаточно взглянуть на огромный объем работы, который уже проделан, и время, которое потребовалось авторам, чтобы сделать это правильно.
Не каждая библиотека идеальна, и некоторым программистам не нравится идея включения кода, который они делают не нужно, но это определенно способ go, если вы хотите работать над чем-то, что делает что-то, не тратя дней на переизобретение колеса. Если у вас есть что-то, что работает, вы всегда можете подумать о замене библиотеки на что-то более лаконичное, если вы уверены, что сможете добиться большего - и, возможно, вы захотите выпустить это как библиотеку самостоятельно!