首页 > 解决方案 > 有没有更好的方法来生成敌人的位置?

问题描述

我正在制作一个 pygame,在 hord 类型的游戏中幸存下来。我把它设置在敌人会走向玩家的地方。如果他们击中玩家,他们会拿走他的一些生命值。如果玩家射击它们,它们就会死亡/消失,玩家会得到一两分。

我希望敌人在一定距离内全部从屏幕上生成,然后走到屏幕上,这样你就不会在敌人 5 像素外或在你上方开始游戏。

我想尝试创建一个 if 语句,如果敌人不在特定范围内,只会将敌人添加到精灵列表中,但是很多精灵根本不会产生,从而消除了我控制敌人实际数量的能力产卵。

下面是我如何生成敌人的结构。如您所见,有些会在屏幕外向任何方向最远 200 像素,这很好,但它们也可以在我的播放器顶部生成。

如果您想知道,我的 Enemy_1pt 类的输入是(图像、速度、健康)

for i in range(10):
    enemy_1pt = Enemy_1pt(fire_drake_image,1.5,1)
    enemy_1pt.rect.x = random.randrange(-200,screen_width+200)
    enemy_1pt.rect.y = random.randrange(-200,screen_height+200)
    enemy_1pt_list.add(enemy_1pt)
    all_sprites_list.add(enemy_1pt)

标签: pythonpython-3.xrandompygame

解决方案


使用应用程序循环来生成敌人。创建一个随机位置并尝试放置敌人。如果敌人因为太靠近另一个敌人而无法生成,请跳过它们并等待下一帧。只要敌人的数量少于请求的敌人数量,就尝试生成敌人:

import math
no_of_enemies = 10
minimum_distance = 100

# application loop
while True:

    if len(all_sprites_list.sprites()) < no_of_enemies:

        # try to spawn enemy  
        x = random.randrange(-200,screen_width+200)
        y = random.randrange(-200,screen_height+200) 

        spawn = True
        for enemy in enemy_1pt_list:
            ex, ey = enemy.rect.center
            distance = math.hypot(ex - x, ey - y)
            if distance < minimum_distance: 
                spawn = False
                break

        if spawn:
            enemy_1pt = Enemy_1pt(fire_drake_image,1.5,1)
            enemy_1pt.rect.center = x, y
            enemy_1pt_list.add(enemy_1pt)
            all_sprites_list.add(enemy_1pt)

    # [...]

推荐阅读