【发布时间】:2018-03-10 15:58:23
【问题描述】:
我正在破解 Python Crash Course 中的太空入侵者游戏。我正在使用 Python 3.5 和 Pygame 1.9.2a0,groupcollide()
在原版中,当子弹与飞船相撞时,两个精灵都会从屏幕上移除。
在我的版本中,我希望对我的移除更加随机,以便并非所有命中都成功。我使用随机模块完成了此操作,并且如果随机数低于某个阈值 (n),则碰撞成功。我在下面的代码中使用了该函数,但它没有按我的意愿工作。
使用 print(num) 我发现会生成随机数,直到达到 num
我认为这是因为在子弹穿过船只精灵矩形时检测到多次碰撞。测试这个理论,如果我在碰撞时移除子弹,那么只会生成 1 个数字。
第一季度。如何保留子弹但每次精灵碰撞只生成一个数字?
第二季度。你有比使用随机数更好的建议吗?
任何方向都非常感谢,谢谢
def check_bullet_alien_collisions(ai_settings, screen, stats, sb, ship, aliens, bullets):
"""Respond to bullet-alien collisions."""
#I swapped True, True to False, False below
collisions = pygame.sprite.groupcollide(bullets, aliens, False, False)
#I added this if statement
if collissions:
num = randrange(100)
print (num) # lots of numbers generated just want 1
if num <= 30:
collissions = pygame.sprite.groupcollide(bullets, aliens, True, True)
#below in original code
if len(aliens) == 0:
# Destroy existing bullets, and create new fleet.
bullets.empty()
create_fleet(ai_settings, screen, ship, aliens)
create_fleet(mi_settings, screen, decayingNucleus, ships)
【问题讨论】: