Я создаю однопользовательскую MUD, которая представляет собой текстовую боевую игру. Он не сетевой.
Я не понимаю, как собирать пользовательские команды и асинхронно передавать их в мой цикл обработки событий. Игрок должен иметь возможность вводить команды в любое время, когда запускаются игровые события. Поэтому приостановка процесса с помощью raw_input не сработает. Я думаю, мне нужно сделать что-то вроде select.select и использовать потоки.
В приведенном ниже примере у меня есть макет функции userInputListener(), в которой мне нравится получать команды и добавлять их в очередь команд, если есть ввод.
Если есть цикл обработки событий, такой как:
from threading import Timer
import time
#Main game loop, runs and outputs continuously
def gameLoop(tickrate):
#Asynchronously get some user input and add it to a command que
commandQue.append(userInputListener())
curCommand = commandQue(0)
commandQue.pop(0)
#Evaluate input of current command with regular expressions
if re.match('move *', curCommand):
movePlayer(curCommand)
elif re.match('attack *', curCommand):
attackMonster(curCommand)
elif re.match('quit', curCommand):
runGame.stop()
#... etc
#Run various game functions...
doStuff()
#All Done with loop, sleep
time.sleep(tickrate)
#Thread that runs the game loop
runGame = Timer(0.1, gameLoop(1))
runGame.start()
Как я могу ввести туда пользовательский ввод?
Или, проще говоря, может ли кто-нибудь показать мне какой-нибудь пример сохранения пользовательского ввода, когда в это же время выполняется другой цикл? Я могу выяснить остальное, если мы сможем зайти так далеко.