0

Using pygame, in the loops I have for fighting, I want it to pause when I await user input. However what seems to be happening is that it's still running through the loops.

The following sits within the main game loop.

while fighting: # fighting loop

    if player.speed > enemy.speed:
        player_turn = True
    else:
        player_turn = False

    while player_turn:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:  # looks for an exit command
                pygame.quit()  # quits pygame
                sys.exit()  # closes system

        label = myfont.render("Press space to attack or enter to wait", 1, (255, 255, 0))

        key = pygame.key.get_pressed()

        screen.fill(colour)

        screen.blit(player.bitmap, player.player_rect)
        screen.blit(enemy.bitmap, enemy.enemy_rect)
        screen.blit(label, (200, 400))

        player.player_rect.x = 100
        player.player_rect.y = 300

        enemy.enemy_rect.x = 700
        enemy.enemy_rect.y = 300

        if key[pygame.K_SPACE]:
            player.player_attack(enemy)
        elif key[pygame.K_RETURN]:
            break

        if enemy.hp <= 0:
            fighting = False

        pygame.display.flip()  # updates screen
        clock.tick(30)  # limits fps to 30

        player_turn = False

        break

    while not player_turn:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:  # looks for an exit command
                pygame.quit()  # quits pygame
                sys.exit()  # closes system

        label = myfont.render("Press space to continue", 1, (255, 255, 0))

        key = pygame.key.get_pressed()

        screen.fill(colour)

        screen.blit(player.bitmap, player.player_rect)
        screen.blit(enemy.bitmap, enemy.enemy_rect)
        screen.blit(label, (200, 400))

        player.player_rect.x = 100
        player.player_rect.y = 300

        enemy.enemy_rect.x = 700
        enemy.enemy_rect.y = 300

        if key[pygame.K_SPACE]:
            enemy.enemy_attack(player)

        pygame.display.flip()  # updates screen
        clock.tick(30)  # limits fps to 30

        player_turn = True

        break

What I'm wanting it to do is when it gets to the user input part, it waits inside the loop for input and once it receives input does it continue with the loop. I know it's probably something small but I've been looking at it for the better part of a day with no success.

  • Try using **pygame.event.wait()** instead of **pygame.event.get()** – mtadd Apr 11 '14 at 01:21
  • Sorry, I don't think I understand where you mean. When I replace for event in pygame.event.get() with pygame.event.wait() I get an error saying something to the effect that event is not iterable. – PurpleMontart Apr 11 '14 at 16:06

0 Answers0