python - 有没有更好的方法来生成敌人的位置?
问题描述
我正在制作一个 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)
解决方案
使用应用程序循环来生成敌人。创建一个随机位置并尝试放置敌人。如果敌人因为太靠近另一个敌人而无法生成,请跳过它们并等待下一帧。只要敌人的数量少于请求的敌人数量,就尝试生成敌人:
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)
# [...]
推荐阅读
- css - 将额外的项目发送到下一列 CSS
- javascript - EISDIR:在写入名为“css”的文件时对目录进行非法操作
- jquery - 将所有页面中的复选框值从 jQuery DataTables 提交到控制器
- function - 在 Azure 函数中运行许多长时间等待的最佳实践
- django - 如何修复 django rest 框架中的 ImageField 上传?
- python - 在 multipart/form-data 选项的帮助下使用 python 发布数据
- c - 搜索 -lczmq 时跳过不兼容的 czmq.lib,
- database - 实时环境中的数据迁移问题
- python - 生成随机数的归一化矩阵,其中行是从不同的高斯(正态)分布生成的
- php - 将关联数组展开 N 次并获取所有组合键