我的第一个问题。我想要实现的是在一个正常的窗口中基于文本的游戏正在运行,但是我也想有一个pygame窗口运行,以及显示更新的地图。
可能在Pygame的情况下,您可以同时输出到图形窗口和标准文本输出。
挑战在于如何异步(无阻塞)获取用户输入。
虽然threads
是一个很好的解决方案,但还有其他的。
Pygame只支持一次显示。然而,你可以将屏幕划分为多个表面,其中一个表面用于地图,另一个用于游戏。
像这样:
screen = pygame.display.set_mode((100, 100))
top_rect = pygame.Rect((0, 0), (screen.get_width(), screen.get_height() // 2))
bottom_rect = pygame.Rect((0, screen.get_height() // 2), (screen.get_width(), screen.get_height() // 2))
top_screen = screen.subsurface(top_rect)
bottom_screen = screen.subsurface(bottom_rect)
并更新它们:
screen.blit(top_screen)
screen.blit(bottom_screen)
pygame.display.update()
将文本条目与pygame窗口分开的唯一方法是使用someVar = input("A string")
,以便文本输入在python shell或命令窗口/Linux终端中,然后让pygame引用var.
所谓的正常窗口,我想你是指程序运行的控制台窗口。你需要一个线程。
在下面的示例中,该线程是从命令行读取标准输入的线程。
from threading import Thread
userInput= None
def readInput():
while True:
userInput = raw_input (" where to ? ")
print("%s ok."%userInput)
t = Thread( target=readInput )
t.start()
您也可以将while循环作为程序的主循环,线程将运行pygame循环。或者甚至有两个线程,一个用于两个。