我正在根據(jù) Python 速成課程書制作外星人入侵游戲項(xiàng)目,并陷入了外星人艦隊?wèi)?yīng)該向右行駛直到到達(dá)屏幕右邊緣、改變方向并向左行駛等部分。問題是我的外星人確實(shí)改變了方向,但只有當(dāng)方塊中的第一個外星人(第一個一直在左邊)擊中屏幕的右邊緣時。他右邊的所有外星人都經(jīng)過了右邊的邊緣。似乎它無法識別右側(cè)外星人的矩形,該矩形應(yīng)該首先擊中右側(cè)邊緣,但只能識別左側(cè)第一個外星人的矩形......我嚴(yán)格按照書上的說明進(jìn)行操作,并且檢查了 3 次,問題可能出在哪里。你能幫我找出問題所在嗎?settings.pyclass Settings:? ? """A class to store all settings for Alien Invasion."""? ? def __init__(self):? ? ? ? """Initialize the game's settings."""? ? ? ? # Screen settings? ? ? ? self.screen_width = 1200? ? ? ? self.screen_height = 800? ? ? ? self.bg_color = (230, 230, 230)? ? ? ? self.ship_speed = 1.5? ? ? ? # Bullet settings? ? ? ? self.bullet_speed = 1.0? ? ? ? self.bullet_width = 3? ? ? ? self.bullet_height = 15? ? ? ? self.bullet_color = (60, 60, 60)? ? ? ? self.bullets_allowed = 3? ? ? ? # Alien settings? ? ? ? self.alien_speed = 1.0? ? ? ? self.fleet_drop_speed = 10? ? ? ? # fleet_direction of 1 represents right; -1 represents left.? ? ? ? self.fleet_direction = 1alien.pyimport pygamefrom pygame.sprite import Spriteclass Alien(Sprite):? ? """A class to represent a single alien in the fleet."""? ? def __init__(self, ai_game):? ? ? ? """Initialize the alien and set its starting postion."""? ? ? ? super().__init__()? ? ? ? self.screen = ai_game.screen? ? ? ? self.settings = ai_game.settings? ? ? ? # Load the alien image and set its rect attribute.? ? ? ? self.image = pygame.image.load('images/alien.bmp')? ? ? ? self.rect = self.image.get_rect()? ? ? ? # Start each new alien near the top left of the screen.? ? ? ? self.rect.x = self.rect.width? ? ? ? self.rect.y = self.rect.height? ? ? ? # Store the alien's exact horizontal position.? ? ? ? self.x = float(self.rect.x)? ? def check_edges(self):? ? ? ? """Return True if an alien is at edge of screen."""? ? ? ? screen_rect = self.screen.get_rect()? ? ? ? if self.rect.right >= screen_rect.right or self.rect.left <= 0:? ? ? ? ? ? return True
1 回答

溫溫醬
TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個贊
這是縮進(jìn)的問題。你需要找到第一個撞到邊緣的外星人,然后打破循環(huán)。實(shí)際上,你總是在列表中的第一個敵人之后中斷循環(huán):
class AlienInvasion:
? ? # [...]
? ? def _check_fleet_edges(self):
? ? ? ? """Respond appropriately if any aliens have reached an edge."""
? ? ? ? for alien in self.aliens.sprites():
? ? ? ? ? ? if alien.check_edges():
? ? ? ? ? ? ? ? self._change_fleet_direction()
? ? ? ? ? ? ? ? #-->| INDENTATION
? ? ? ? ? ? ? ? break
? ? ? ? ? ??
? ? ? ? ? ? # break <-- DELETE
添加回答
舉報
0/150
提交
取消