太空侵略者 - Pygame - 随机射击

时间:2018-01-10 12:45:52

标签: python random pygame

我在Pygame制作游戏Space Invaders,我想让敌人随机射击玩家。此时我只能按下标签按钮让敌人向玩家射击。但它应该自动并以随机间隔执行此操作。如何在不需要按Tab键的情况下实现此功能。 谢谢。

ReceiptNo        Average 
_________________________
 1                 10.00

 2                 7.50

 3                 8.86

2 个答案:

答案 0 :(得分:0)

您需要一个随机定时器变量,您可以按每帧dt(增量时间)递减。当它低于零时,创建一个项目符号实例,将其添加到组中并重置计时器。我在这里使用random.uniform函数给你一个浮点数,但如果你想要整数,你也可以使用random.randrangerandint。要获得增量时间(自上次滴答以来的时间),只需指定clock.tick(fps)返回变量的值。

# The timer is the time in seconds until the enemy shoots.
timer = random.uniform(2, 6)  # Random float between 2 and 6.
dt = 0

running = True
while True:
    # Event handling omitted.

    # Decrease the timer by the delta time.
    timer -= dt
    if timer <= 0:  # Ready to fire.
        # Pick a random enemy to get the x and y coords.
        random_enemy = random.choice(enemy.sprites())
        enemy_x, enemy_y = random_enemy.rect.center
        # Create a bullet and add it to the sprite groups.
        bullet = BulletEnemy(enemy_x, enemy_y)
        allSprites.add(bullet)
        enemy.add(bullet)
        timer = random.uniform(2, 6)  # Reset the timer.

    # Collision detection and drawing omitted.

    # clock.tick returns the time that has passed since the last frame.
    dt = clock.tick(60) / 1000  # / 1000 to convert it to seconds.

答案 1 :(得分:0)

一种方法是创建自定义事件并根据某些条件触发它,例如时间。

您可以使用pygame.event.Event()pygame.event.post()手动触发事件,而不是使用Tab键。要按时设置此活动,您可以使用pygame.time.set_timer(myEvent, time)。之后,您的主循环只需要使用pygame.event.get()检查事件。

有一个很好的示例,说明如何在pygame中使用自定义事件:PyGame Custom Event

作者的例子甚至是一个太空入侵者类型的游戏,因此查看它的编写方式会很有用。