Pygame中的目标练习游戏在目标被射击几次后停止工作,我该如何解决这个问题?



我在Pygame中创建了一个目标练习游戏,每次射击目标时都会加快速度。射击目标几次后,子弹和目标碰撞停止记录。以下是我认为相关的功能,有人能看出任何错误吗?

目标未命中函数:

def target_missed(stats, bullets):
"""Respond to target being missed."""
if stats.misses > 0:
stats.misses -= 1

# Empty list of bullets
bullets.empty()
# Pause.
sleep(0.5)
else:
stats.game_active = False
pygame.mouse.set_visible(True)

子弹-目标碰撞功能:

def check_bullet_target_collisions(ai_settings, screen, ship, targets, bullets):
"""Respond to bullet-target collisions."""
# Remove any bullets and targets that have collided.
collisions = pygame.sprite.groupcollide(bullets, targets, True, True)
if collisions:
# Destroy existing bullets, speed up game, and create new target.
bullets.empty()
ai_settings.increase_speed()
create_target(ai_settings, screen, targets)

我想出了什么问题!

基本上,当子弹移动得太快时,不会记录碰撞。所以保持子弹速度恒定。

Settings.py

class Settings():
"""A class to store all settings for Alien Invasion."""
def __init__(self):
"""Initialise the game's settings."""
self.screen_width = 1200    # Screen settings
self.screen_height = 800
self.bg_colour = (230, 230, 230)

# Bullet settings
self.bullet_width = 15      # Make the width bigger than height for sideways bullet
self.bullet_height = 3
self.bullet_colour = 60, 60, 60
self.bullets_allowed = 3

self.missed_attempts = 3         # Missed attempts allowed
self.speedup_scale = 1.1          # How quickly the game speeds up
self.initialize_dynamic_settings()

def initialize_dynamic_settings(self):
"""Initialize settings that change throughout the game."""
self.ship_speed_factor = 5
self.bullet_speed_factor = 100

self.target_speed_factor = 5  # Target settings
# fleet_direction of 1 represents right; -1 represents left.
self.target_direction = 1

def increase_speed(self):
"""Increase speed settings."""
self.ship_speed_factor *= self.speedup_scale
self.bullet_speed_factor *= 1     # Keep bullet speed constant
self.target_speed_factor *= self.speedup_scale

一开始,我让船、子弹和目标移动得更快,所以这就是问题所在。希望大家觉得这有帮助!

相关内容

最新更新