火箭小猪大战BUG-5:移动并消灭BUG怪兽

示意图如下:

1.在 bug_alien.py 末尾增加代码,使怪兽先向右移动,撞到边缘后下移并向反方向移动

    def check_edges(self):
        """如果外星人位于屏幕边缘,就返回True。"""
        screen_rect = self.screen.get_rect()
        if self.rect.right >= screen_rect.right or self.rect.left <= 0:
            return True

    def update(self):
        """向右移动外星人"""
        self.x += (self.settings.bug_alien_speed * self.settings.fleet_direction)
        self.rect.x = self.x

2.在 settings.py 末尾增加怪兽相关代码

 # 怪兽设置
        # 怪兽速度
        self.bug_alien_speed = 0.5
        # 怪兽下移速度
        self.fleet_drop_speed = 12
        # 怪兽移动方向,1向右移,-1向左移
        self.fleet_direction = 1

3.在 alien_invasion.py 增加代码如下

	def _update_bug_aliens(self):
		"""检查是否有外星人位于屏幕边缘,并更新整群外星人的位置。"""
		self._check_fleet_edges()
		self.bug_aliens.update()

	def _check_fleet_edges(self):
		"""有外星人到达边缘时采取相应的措施。"""
		for bug_alien in self.bug_aliens.sprites():
			if bug_alien.check_edges():
				self._change_fleet_direction()
				break

	def _change_fleet_direction(self):
		"""将整群外星人下移,并改变它们的方向。"""
		for bug_alien in self.bug_aliens.sprites():
			bug_alien.rect.y += self.settings.fleet_drop_speed
		self.settings.fleet_direction *= -1

修改代码如下:

	def run_game(self):
		"""开始游戏的主循环"""
		while True:
			self._check_events()
			self.ship.update()
			self._update_bullets()
			self._update_bug_aliens()
			self._update_screen()

	def _update_bullets(self):
		"""更新子弹的位置并删除消失的子弹。"""
		# 更新子弹的位置
		self.bullets.update()

		# 删除消失的子弹。
		for bullet in self.bullets.copy():
			if bullet.rect.bottom <= 0:
				self.bullets.remove(bullet)

		self._check_bullet_bugalien_collision()

	def _check_bullet_bugalien_collision(self):
		"""响应子弹和外星人碰撞"""
		# 检查是否有子弹击中了外星人
		# 如果是,就删除相应的子弹和外星人
		collisions = pygame.sprite.groupcollide(
			self.bullets, self.bug_aliens, True, True
		)

		if not self.bug_aliens:
			# 删除现有的子弹并创建一群外星人
			self.bullets.empty()
			self._create_fleet()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值