Sto costruendo un singolo giocatore MUD, che è fondamentalmente un gioco di combattimento basato su testo. Non è in rete.input dell'utente Grab in modo asincrono e passare ad un ciclo evento in python
Non capisco come raccogliere i comandi dell'utente e li passa nel mio ciclo di eventi in modo asincrono. Il giocatore deve essere in grado di inserire i comandi in qualsiasi momento mentre gli eventi di gioco stanno sparando. Quindi sospendere il processo usando raw_input non funzionerà. Penso di aver bisogno di fare qualcosa come select.select e usare i thread.
Nell'esempio seguente, ho una funzione di mockup di userInputListener(), che è dove mi piacerebbe ricevere i comandi, e aggiungerli al comando Que se c'è un input.
Se avere un ciclo di eventi quali:
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()
Come faccio ad avere il mio input dell'utente in là?
O più semplicemente, qualcuno mi può mostrare alcun esempio di memorizzare l'input dell'utente, mentre un altro ciclo è in esecuzione allo stesso tempo? Posso capire il resto se possiamo arrivare così lontano.
Is [ritorto] (http://twistedmatrix.com/) un'opzione? – sarnold
Piuttosto che rotolare il tuo, potresti provare a usare PyGame o curses per gestire i tuoi input. –
non Vuol MUD riposare per Multi-User Dungeon? Sono d'accordo con @AndrewGorcester comunque, sarebbe probabilmente più facile evitare di reinventare la ruota. –