Estoy construyendo un solo jugador MUD, que es básicamente un juego de combate basado en texto. No está conectado a la red.Capture la entrada del usuario de forma asincrónica y pase a un bucle de evento en python
No entiendo cómo reunir comandos de usuario y pasarlos a mi ciclo de eventos de forma asincrónica. El jugador debe poder ingresar comandos en cualquier momento a medida que los eventos del juego se disparan. Así que pausar el proceso usando raw_input no funcionará. Creo que necesito hacer algo como select.select y usar threads.
En el ejemplo siguiente, tengo una función de maqueta de userInputListener() que es donde me gusta recibir comandos, y los anexo al comando Que si hay entradas.
Si tienen un ciclo de eventos tales como:
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()
¿Cómo hago para que mi entrada del usuario en ese país?
O más simplemente, ¿alguien puede mostrarme algún ejemplo de almacenamiento de la entrada del usuario mientras otro ciclo se ejecuta al mismo tiempo? Puedo averiguar el resto si podemos llegar tan lejos.
Es [Twisted] (http://twistedmatrix.com/) es una opción? – sarnold
En lugar de rodar el suyo, puede intentar usar PyGame o curses para manejar su entrada. –
¿No es MUD la mazmorra multiusuario? Estoy de acuerdo con @AndrewGorcester de todos modos, probablemente sería más fácil evitar reinventar la rueda. –