我希望我的程序在每个播放器中循环播放,而这段代码可以做到这一点。但是,在最后一个播放器上,它将显示信息,然后立即将其清除。我希望它在清除屏幕之前等待用户按下按键(例如空格或Enter)。我尝试使用event = pygame.event.wait()实现此功能,但是现在我的程序在到达该声明时才挂起。
players = {}
for player in range(1, int(num_players)+1):
name = ask(DISPLAYSURF, "Player " + str(player) + "'s name")
player_roll = None
while player_roll is None:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
pygame.event.clear()
while event.type != pygame.KEYDOWN:
event = pygame.event.wait()
DISPLAYSURF.fill(WHITE)
FIRST_DICE = roll_a_dice()
SECOND_DICE = roll_a_dice()
player_roll = FIRST_DICE + SECOND_DICE
players[name] = player_roll
display_dice(FIRST_DICE, SECOND_DICE)
our_roll(name)
我的完整代码在这里:https://github.com/Legitimate/Street-Dice/blob/master/main.py
以下是该问题的视频:https://youtu.be/ChxZq0bY4wk
答案 0 :(得分:1)
花了几分钟时间来理解你的意思,但是在重构了以下代码所示的播放器列表之后,其余的滚动了起来:https://github.cm/rebelclause/python_legs/blob/master/pygame/roll_the_dice.py。如果对您有用,请给我买啤酒;)
players = {'you': {'rolltotal': None, 'otherstuff': None }, 'me': {'rolltotal': None, 'otherstuff': None}}
def reviewvals():
print('Number of players: ', len(players)) # only counts the primary keys, the players
for player, attribdict in players.items():
for key, value in attribdict.items():
print(player, key, value)
reviewvals()
答案 1 :(得分:0)
我以前没有使用过Pygame,所以我不知道是否有更高效/或更正确的方式来完成您所要的操作,但是无论如何请尝试一下
检查一下 Pygame waiting the user to keypress a key
同样来自docs-这就是为什么您的程序没有响应(看起来好像被挂起/卡住了,但是没有)..当它到达event.wait()时 https://www.pygame.org/docs/ref/event.html#comment_pygame_event_wait
pygame.event.wait() 等待队列中的单个事件 wait()-> EventType实例
从队列中返回一个事件。如果队列为空,此函数将等待直到创建一个。返回事件后,该事件将从队列中删除。在程序等待时,它将以空闲状态进入睡眠状态。这对于想要与其他应用程序共享系统的程序很重要。