鱼C论坛

 找回密码
 立即注册
查看: 1974|回复: 3

飞机大战问题之"飞机雨"

[复制链接]
发表于 2023-10-5 17:38:39 | 显示全部楼层
这个问题是因为在主体代码中的循环中,对于每个大型敌机,都会再次遍历中型敌机和小型敌机,而且这个遍历没有缩进到大型敌机的循环中。因此,每个大型敌机都会再次遍历中型敌机和小型敌机,并且每个小型敌机和中型敌机都会移动和绘制两次,导致出现“飞机雨”的问题。要解决这个问题,只需要将中型和小型敌机的遍历缩进到大型敌机的循环中即可。修改后的代码如下:

  1. while running:
  2.     for event in pygame.event.get():
  3.         if event.type == QUIT:
  4.             pygame.quit()
  5.             sys.exit()

  6.     key_pressed = pygame.key.get_pressed()

  7.     if key_pressed[K_w] or key_pressed[K_UP]:
  8.         me.moveUp()
  9.     if key_pressed[K_s] or key_pressed[K_DOWN]:
  10.         me.moveDown()
  11.     if key_pressed[K_a] or key_pressed[K_LEFT]:
  12.         me.moveLeft()
  13.     if key_pressed[K_d] or key_pressed[K_RIGHT]:
  14.         me.moveRight()

  15.     screen.blit(background, (0, 0))

  16.     for each in big_enemies:
  17.         each.move()
  18.         if switch_image:
  19.             screen.blit(each.image1,each.rect)
  20.         else:
  21.             screen.blit(each.image2,each.rect)
  22.         if each.rect.bottom > -50:
  23.             enemy.fly_sound.play()

  24.         for each in mid_enemies:
  25.             each.move()
  26.             screen.blit(each.image,each.rect)

  27.         for each in small_enemies:
  28.             each.move()
  29.             screen.blit(each.image,each.rect)

  30.     if switch_image:
  31.         screen.blit(me.image1,me.rect)
  32.     else:
  33.         screen.blit(me.image2,me.rect)

  34.     if not(delay % 5):
  35.         switch_image = not switch_image

  36.     delay -= 1
  37.     if not delay:
  38.         delay = 100

  39.     pygame.display.flip()

  40.     clock.tick(60)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-9 03:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表