gpt4 book ai didi

python - 异步获取用户输入并传递给 python 中的事件循环

转载 作者:太空狗 更新时间:2023-10-29 21:06:05 31 4
gpt4 key购买 nike

我正在构建一个单人游戏 MUD,它基本上是一个基于文本的战斗游戏。它没有联网。

我不明白如何收集用户命令并将它们异步传递到我的事件循环中。玩家需要能够在游戏事件触发时随时输入命令。因此,使用 raw_input 暂停进程是行不通的。我想我需要做一些类似 select.select 的事情并使用线程。

在下面的示例中,我有一个 userInputListener() 的模型函数,这是我喜欢接收命令的地方,如果有输入则将它们附加到命令 Que。

如果有一个事件循环,例如:

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()

我如何在其中获取用户输入?

或者更简单地说,任何人都可以向我展示在另一个循环同时运行时存储用户输入的任何示例吗?如果我们能做到这一点,我可以解决剩下的问题。

最佳答案

您确实需要两个线程。一个关注主游戏循环,一个处理用户输入。两者将通过 Queue 进行通信.

您可以让您的主进程启动游戏循环线程,然后让它从用户那里获取一行文本并将其“放入”队列(即在 runGame.start() 之后)。这可以很简单:

while not gameFinished:
myQueue.put(raw_input()).

游戏循环线程将简单地从队列中“获取”一行文本,插入并执行它。

Python 有一个线程安全的 queue implementation您可以使用它(包括一个非常基本的多线程使用示例,您可以将其用作指南)。

还有一个简单的命令行解释器模块(cmd modulehere 是一个很好的实用概述)可能对此类项目也很有用。

关于python - 异步获取用户输入并传递给 python 中的事件循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10941851/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com