鱼C论坛

 找回密码
 立即注册
查看: 804|回复: 12

[已解决]程序很短,这怎么控制不了播放遍数

[复制链接]
发表于 2020-5-8 15:38:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1. me_down_sound = pygame.mixer.Sound("sound/me_down.wav")
  2. me_down_sound.set_volume(0.2)
  3. me_down_sound.play(loops=1)
复制代码

最佳答案
2020-5-9 08:59:52
这样就可以
但是播放完一遍后自动退出程序
  1. import sys
  2. import traceback
  3. from pygame.locals import *
  4. import pygame
  5. import random
  6. from random import *
  7. import math

  8. pygame.init()
  9. pygame.mixer.init()


  10. #载入游戏音乐
  11. pygame.mixer.music.load("sound/game_music.ogg")
  12. pygame.mixer.music.set_volume(0.2)
  13. bullet_sound = pygame.mixer.Sound("sound/bullet.wav")
  14. bullet_sound.set_volume(0.2)
  15. bomb_sound = pygame.mixer.Sound("sound/use_bomb.wav")
  16. bomb_sound.set_volume(0.2)
  17. supply_sound = pygame.mixer.Sound("sound/supply.wav")
  18. supply_sound.set_volume(0.2)
  19. get_bomb_sound = pygame.mixer.Sound("sound/get_bomb.wav")
  20. get_bomb_sound.set_volume(0.2)
  21. get_bullet_sound = pygame.mixer.Sound("sound/get_bullet.wav")
  22. get_bullet_sound.set_volume(0.2)
  23. upgrade_sound = pygame.mixer.Sound("sound/upgrade.wav")
  24. upgrade_sound.set_volume(0.2)
  25. enemy3_fly_sound = pygame.mixer.Sound("sound/enemy3_flying.wav")
  26. enemy3_fly_sound.set_volume(0.2)
  27. enemy1_down_sound = pygame.mixer.Sound("sound/enemy1_down.wav")
  28. enemy1_down_sound.set_volume(0.2)
  29. enemy2_down_sound = pygame.mixer.Sound("sound/enemy2_down.wav")
  30. enemy2_down_sound.set_volume(0.2)
  31. enemy3_down_sound = pygame.mixer.Sound("sound/enemy3_down.wav")
  32. enemy3_down_sound.set_volume(0.2)
  33. me_down_sound = pygame.mixer.Sound("sound/me_down.wav")
  34. me_down_sound.set_volume(0.2)


  35. class Myplane(pygame.sprite.Sprite):
  36.     def __init__(self,bg_size):
  37.         pygame.sprite.Sprite.__init__(self)  #继承类

  38.         self.myplane_1_image = pygame.image.load("image/me1.png").convert_alpha()
  39.         self.myplane_2_image = pygame.image.load("image/me2.png").convert_alpha()
  40.         self.rect = self.myplane_1_image.get_rect()
  41.         self.destroy_image1 = pygame.image.load("image/me_destroy_1.png").convert_alpha()
  42.         self.destroy_image2 = pygame.image.load("image/me_destroy_2.png").convert_alpha()
  43.         self.destroy_image3 = pygame.image.load("image/me_destroy_3.png").convert_alpha()
  44.         self.rect = self.myplane_1_image.get_rect()
  45.         self.rect.left,self.rect.top = \
  46.                                  (bg_size[0] - self.rect.width) // 2 ,\
  47.                                   bg_size[1] - self.rect.height
  48.         self.screen_width,self.screen_height = bg_size[0],bg_size[1]
  49.         self.speed = [0,0]



  50.         #如果按下W,A,S,D,表示飞机分别向上下左右移动
  51.         self.press_can_K_w = True
  52.         self.press_can_K_s = True
  53.         self.press_can_K_a = True
  54.         self.press_can_K_d = True




  55.     def move(self):
  56.         if self.rect.left  < 0  :  #超过左边界,键盘a按下无效
  57.             self.rect.left = 0
  58.             self.press_can_K_a = False

  59.         elif self.rect.right >  self.screen_width:
  60.             self.rect.right = self.screen_width
  61.             self.press_can_K_d = False

  62.         elif  self.rect.top  < 0 :
  63.             self.rect.top = 0
  64.             self.press_can_K_w = False

  65.         elif self.rect.bottom >  self.screen_height:
  66.             self.rect.bottom = self.screen_height
  67.             self.press_can_K_d = False

  68.         else:
  69.             self.press_can_K_w = True
  70.             self.press_can_K_s = True
  71.             self.press_can_K_a = True
  72.             self.press_can_K_d = True

  73. class Bullet_myplane(pygame.sprite.Sprite):
  74.     def __init__(self,bg_size,myplane_position):
  75.         pygame.sprite.Sprite.__init__(self)  #继承类
  76.         self.image = pygame.image.load("image/bullet2.png").convert_alpha()
  77.         self.rect = self.image.get_rect()
  78.         self.width,self.height =bg_size[0], bg_size[1]

  79.         self.myplane_position=myplane_position

  80.         self.rect.left,self.rect.top = self.myplane_position[0],self.myplane_position[1]
  81.         self.speed = -5

  82.     def bullet_move(self):
  83.         if self.rect.bottom > 0:
  84.             self.rect.top += self.speed
  85.         else:
  86.             self.reset()

  87.     def reset(self):
  88.         self.rect.left,self.rect.top = self.myplane_position[0],self.myplane_position[1]



  89. class Enemyplane(pygame.sprite.Sprite):
  90.     def __init__(self,bg_size,position):
  91.         pygame.sprite.Sprite.__init__(self)  #继承类
  92.         self.image = pygame.image.load("image/enemy1.png").convert_alpha()
  93.         self.breakdown_image1 = pygame.image.load("image/enemy1_down1.png").convert_alpha()
  94.         self.breakdown_image2 = pygame.image.load("image/enemy2_down1.png").convert_alpha()

  95.         self.rect = self.image.get_rect()
  96.         self.width,self.height =bg_size[0], bg_size[1]
  97.         self.rect.left,self.rect.top = position
  98.         self.speed = 5

  99.     def enemy_move(self):
  100.         if self.rect.top < self.height:
  101.             self.rect.top += self.speed
  102.         else:
  103.             self.reset()

  104.     def reset(self):
  105.         self.rect.left,self.rect.top = \
  106.                                      randint(0,self.width-self.rect.width),\
  107.                                      randint(-2*self.height,0)


  108. def main():
  109.     pygame.init()
  110.     bg_size = width,height = 480,700
  111.     screen = pygame.display.set_mode(bg_size)
  112.     pygame.display.set_caption("飞机大战")
  113.     background = pygame.image.load("image/background.png").convert()

  114.     BLACK = (0,0,0)
  115.     GREEN = (0,255,0)
  116.     RED = (255,0,0)


  117.     pygame.mixer.music.play(-1)   #无限循环背景
  118.     clock = pygame.time.Clock()
  119.     pygame.key.set_repeat(10,10)

  120.     #生成我方飞机
  121.     myplane = Myplane(bg_size)


  122.     #生成子弹
  123.     myplane_bullet = Bullet_myplane(bg_size,myplane.rect)  #想把飞机的实时位置传给子弹

  124.     group = pygame.sprite.Group()
  125.     #在屏幕最上方随机产生小飞机
  126.     position = randint(0,width-40),0
  127.     you = Enemyplane(bg_size,position)
  128.     group.add(you)

  129.     #延时
  130.     delay = 1000

  131.     #用于切换图片
  132.     switch_image = True


  133.     running = True
  134.     while running:
  135.         for event in pygame.event.get():
  136.             if event.type == QUIT:
  137.                 pygame.quit()
  138.                 sys.exit()

  139.             elif event.type == KEYDOWN:
  140.                 myplane.move()
  141.                 if event.key == K_w and myplane.press_can_K_w == True :
  142.                     myplane.rect.top -= 10

  143.                 if event.key == K_s and myplane.press_can_K_s == True :
  144.                     myplane.rect.bottom += 10

  145.                 if event.key == K_a and myplane.press_can_K_a == True :
  146.                     myplane.rect.left -= 10

  147.                 if event.key == K_d and myplane.press_can_K_d == True :
  148.                     myplane.rect.right += 10


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

  150.         #绘制子弹
  151.         myplane_bullet. bullet_move()
  152.         screen.blit(myplane_bullet.image,myplane_bullet.rect)



  153.         #绘制我方飞机
  154.         switch_image = not switch_image  #取反,实现不断切换
  155.         if switch_image:
  156.             screen.blit(myplane.myplane_1_image,myplane.rect)
  157.         else:
  158.             screen.blit(myplane.myplane_2_image,myplane.rect)


  159.         #绘制敌方飞机
  160.         for each in group:
  161.             each.enemy_move()
  162.             screen.blit(you.image,you.rect)

  163.         delay -= 1
  164.         if not delay:   #如果delay为0
  165.             delay == 200

  166.         #检测子弹与小飞机的碰撞


  167.         #检测和敌人飞机的碰撞
  168.         if pygame.sprite.spritecollide(myplane, group, False):
  169.             screen.blit(you.breakdown_image1,you.rect)
  170.             screen.blit(myplane.destroy_image1,myplane.rect)
  171.             screen.blit(myplane.destroy_image2,myplane.rect)
  172.             screen.blit(myplane.destroy_image3,myplane.rect)
  173.             me_down_sound.play()
  174.             pygame.mixer.music.pause()
  175.             you.speed = 0
  176.             myplane.speed = 0
  177.             running = False


  178.         pygame.display.flip()
  179.         clock.tick(60)



  180. if __name__ =="__main__":
  181.     #在双击打开文件时,如果出现异常,将异常显示出来
  182.     try:
  183.         main()
  184.     except SystemExit:
  185.         pass
  186.     except:
  187.         traceback.print_exc()
  188.         pygame.quit()
  189.         input()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-8 15:44:40 | 显示全部楼层
这样
  1. me_down_sound = pygame.mixer.Sound("sound/me_down.wav")
  2. me_down_sound.set_volume(0.2)
  3. me_down_sound.play(-1)
复制代码

应该会循环播放
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-8 15:49:48 | 显示全部楼层
wuqramy 发表于 2020-5-8 15:44
这样

应该会循环播放

我只想让他播放一次
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-8 15:52:12 | 显示全部楼层
猪猪虾 发表于 2020-5-8 15:49
我只想让他播放一次

直接play,不加任何参数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-8 16:01:56 | 显示全部楼层
wuqramy 发表于 2020-5-8 15:52
直接play,不加任何参数

不行,我试过了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-8 16:10:29 | 显示全部楼层
你难道就单独运行了这一点代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-8 16:26:54 | 显示全部楼层
本帖最后由 猪猪虾 于 2020-5-8 16:28 编辑
wuqramy 发表于 2020-5-8 16:10
你难道就单独运行了这一点代码


不是,代码有点长,我现在卡在另一个错误里面了,那个错误直接影响代码运行了,等会我发一下代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-9 08:51:12 | 显示全部楼层
本帖最后由 猪猪虾 于 2020-5-9 08:52 编辑
wuqramy 发表于 2020-5-8 16:10
你难道就单独运行了这一点代码




230行那,飞机撞击之后,只播放一次音乐,音乐的载入在最前面
  1. import sys
  2. import traceback
  3. from pygame.locals import *
  4. import pygame
  5. import random
  6. from random import *
  7. import math

  8. pygame.init()
  9. pygame.mixer.init()


  10. #载入游戏音乐
  11. pygame.mixer.music.load("sound/game_music.ogg")
  12. pygame.mixer.music.set_volume(0.2)
  13. bullet_sound = pygame.mixer.Sound("sound/bullet.wav")
  14. bullet_sound.set_volume(0.2)
  15. bomb_sound = pygame.mixer.Sound("sound/use_bomb.wav")
  16. bomb_sound.set_volume(0.2)
  17. supply_sound = pygame.mixer.Sound("sound/supply.wav")
  18. supply_sound.set_volume(0.2)
  19. get_bomb_sound = pygame.mixer.Sound("sound/get_bomb.wav")
  20. get_bomb_sound.set_volume(0.2)
  21. get_bullet_sound = pygame.mixer.Sound("sound/get_bullet.wav")
  22. get_bullet_sound.set_volume(0.2)
  23. upgrade_sound = pygame.mixer.Sound("sound/upgrade.wav")
  24. upgrade_sound.set_volume(0.2)
  25. enemy3_fly_sound = pygame.mixer.Sound("sound/enemy3_flying.wav")
  26. enemy3_fly_sound.set_volume(0.2)
  27. enemy1_down_sound = pygame.mixer.Sound("sound/enemy1_down.wav")
  28. enemy1_down_sound.set_volume(0.2)
  29. enemy2_down_sound = pygame.mixer.Sound("sound/enemy2_down.wav")
  30. enemy2_down_sound.set_volume(0.2)
  31. enemy3_down_sound = pygame.mixer.Sound("sound/enemy3_down.wav")
  32. enemy3_down_sound.set_volume(0.2)
  33. me_down_sound = pygame.mixer.Sound("sound/me_down.wav")
  34. me_down_sound.set_volume(0.2)


  35. class Myplane(pygame.sprite.Sprite):
  36.     def __init__(self,bg_size):
  37.         pygame.sprite.Sprite.__init__(self)  #继承类

  38.         self.myplane_1_image = pygame.image.load("image/me1.png").convert_alpha()
  39.         self.myplane_2_image = pygame.image.load("image/me2.png").convert_alpha()
  40.         self.rect = self.myplane_1_image.get_rect()
  41.         self.destroy_image1 = pygame.image.load("image/me_destroy_1.png").convert_alpha()
  42.         self.destroy_image2 = pygame.image.load("image/me_destroy_2.png").convert_alpha()
  43.         self.destroy_image3 = pygame.image.load("image/me_destroy_3.png").convert_alpha()
  44.         self.rect = self.myplane_1_image.get_rect()
  45.         self.rect.left,self.rect.top = \
  46.                                  (bg_size[0] - self.rect.width) // 2 ,\
  47.                                   bg_size[1] - self.rect.height
  48.         self.screen_width,self.screen_height = bg_size[0],bg_size[1]
  49.         self.speed = [0,0]

  50.         
  51.         
  52.         #如果按下W,A,S,D,表示飞机分别向上下左右移动
  53.         self.press_can_K_w = True
  54.         self.press_can_K_s = True
  55.         self.press_can_K_a = True
  56.         self.press_can_K_d = True


  57.         
  58.         
  59.     def move(self):        
  60.         if self.rect.left  < 0  :  #超过左边界,键盘a按下无效
  61.             self.rect.left = 0
  62.             self.press_can_K_a = False
  63.             
  64.         elif self.rect.right >  self.screen_width:
  65.             self.rect.right = self.screen_width
  66.             self.press_can_K_d = False

  67.         elif  self.rect.top  < 0 :
  68.             self.rect.top = 0
  69.             self.press_can_K_w = False
  70.             
  71.         elif self.rect.bottom >  self.screen_height:
  72.             self.rect.bottom = self.screen_height
  73.             self.press_can_K_d = False
  74.             
  75.         else:
  76.             self.press_can_K_w = True
  77.             self.press_can_K_s = True
  78.             self.press_can_K_a = True
  79.             self.press_can_K_d = True

  80. class Bullet_myplane(pygame.sprite.Sprite):
  81.     def __init__(self,bg_size,myplane_position):
  82.         pygame.sprite.Sprite.__init__(self)  #继承类
  83.         self.image = pygame.image.load("image/bullet2.png").convert_alpha()
  84.         self.rect = self.image.get_rect()
  85.         self.width,self.height =bg_size[0], bg_size[1]
  86.         
  87.         self.myplane_position=myplane_position
  88.         
  89.         self.rect.left,self.rect.top = self.myplane_position[0],self.myplane_position[1]
  90.         self.speed = -5

  91.     def bullet_move(self):
  92.         if self.rect.bottom > 0:
  93.             self.rect.top += self.speed
  94.         else:
  95.             self.reset()

  96.     def reset(self):
  97.         self.rect.left,self.rect.top = self.myplane_position[0],self.myplane_position[1]

  98.    

  99. class Enemyplane(pygame.sprite.Sprite):
  100.     def __init__(self,bg_size,position):
  101.         pygame.sprite.Sprite.__init__(self)  #继承类
  102.         self.image = pygame.image.load("image/enemy1.png").convert_alpha()
  103.         self.breakdown_image1 = pygame.image.load("image/enemy1_down1.png").convert_alpha()
  104.         self.breakdown_image2 = pygame.image.load("image/enemy2_down1.png").convert_alpha()

  105.         self.rect = self.image.get_rect()
  106.         self.width,self.height =bg_size[0], bg_size[1]
  107.         self.rect.left,self.rect.top = position
  108.         self.speed = 5
  109.                     
  110.     def enemy_move(self):
  111.         if self.rect.top < self.height:
  112.             self.rect.top += self.speed
  113.         else:
  114.             self.reset()

  115.     def reset(self):
  116.         self.rect.left,self.rect.top = \
  117.                                      randint(0,self.width-self.rect.width),\
  118.                                      randint(-2*self.height,0)


  119. def main():
  120.     pygame.init()
  121.     bg_size = width,height = 480,700
  122.     screen = pygame.display.set_mode(bg_size)
  123.     pygame.display.set_caption("飞机大战")
  124.     background = pygame.image.load("image/background.png").convert()

  125.     BLACK = (0,0,0)
  126.     GREEN = (0,255,0)
  127.     RED = (255,0,0)

  128.    
  129.     pygame.mixer.music.play(-1)   #无限循环背景
  130.     clock = pygame.time.Clock()
  131.     pygame.key.set_repeat(10,10)

  132.     #生成我方飞机
  133.     myplane = Myplane(bg_size)

  134.    
  135.     #生成子弹
  136.     myplane_bullet = Bullet_myplane(bg_size,myplane.rect)  #想把飞机的实时位置传给子弹
  137.    
  138.     group = pygame.sprite.Group()
  139.     #在屏幕最上方随机产生小飞机
  140.     position = randint(0,width-40),0
  141.     you = Enemyplane(bg_size,position)
  142.     group.add(you)

  143.     #延时
  144.     delay = 1000
  145.         
  146.     #用于切换图片
  147.     switch_image = True

  148.    
  149.     running = True
  150.     while running:
  151.         for event in pygame.event.get():
  152.             if event.type == QUIT:
  153.                 pygame.quit()
  154.                 sys.exit()

  155.             elif event.type == KEYDOWN:
  156.                 myplane.move()  
  157.                 if event.key == K_w and myplane.press_can_K_w == True :
  158.                     myplane.rect.top -= 10
  159.                   
  160.                 if event.key == K_s and myplane.press_can_K_s == True :
  161.                     myplane.rect.bottom += 10   
  162.                   
  163.                 if event.key == K_a and myplane.press_can_K_a == True :
  164.                     myplane.rect.left -= 10
  165.                   
  166.                 if event.key == K_d and myplane.press_can_K_d == True :
  167.                     myplane.rect.right += 10
  168.                     
  169.                     
  170.         screen.blit(background,(0,0))

  171.         #绘制子弹           
  172.         myplane_bullet. bullet_move()
  173.         screen.blit(myplane_bullet.image,myplane_bullet.rect)

  174.         

  175.         #绘制我方飞机
  176.         switch_image = not switch_image  #取反,实现不断切换
  177.         if switch_image:
  178.             screen.blit(myplane.myplane_1_image,myplane.rect)            
  179.         else:
  180.             screen.blit(myplane.myplane_2_image,myplane.rect)
  181.         

  182.         #绘制敌方飞机
  183.         for each in group:
  184.             each.enemy_move()
  185.             screen.blit(you.image,you.rect)

  186.         delay -= 1
  187.         if not delay:   #如果delay为0
  188.             delay == 200

  189.         #检测子弹与小飞机的碰撞


  190.         #检测和敌人飞机的碰撞  
  191.         if pygame.sprite.spritecollide(myplane, group, False):
  192.             screen.blit(you.breakdown_image1,you.rect)   
  193.             screen.blit(myplane.destroy_image1,myplane.rect)
  194.             screen.blit(myplane.destroy_image2,myplane.rect)
  195.             screen.blit(myplane.destroy_image3,myplane.rect)
  196.             me_down_sound.play()
  197.             pygame.mixer.music.pause()
  198.             you.speed = 0
  199.             myplane.speed = 0

  200.             
  201.         pygame.display.flip()
  202.         clock.tick(60)
  203.         
  204.         
  205.         
  206. if __name__ =="__main__":
  207.     #在双击打开文件时,如果出现异常,将异常显示出来
  208.     try:
  209.         main()
  210.     except SystemExit:
  211.         pass
  212.     except:
  213.         traceback.print_exc()
  214.         pygame.quit()
  215.         input()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-9 08:54:06 | 显示全部楼层
猪猪虾 发表于 2020-5-9 08:51
230行那,飞机撞击之后,只播放一次音乐,音乐的载入在最前面


呃 飞机撞击之后 不是应该只播放一次音乐的吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-9 08:56:10 | 显示全部楼层
wuqramy 发表于 2020-5-9 08:54
呃 飞机撞击之后 不是应该只播放一次音乐的吗


对,但是他循环播放,我控制不了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-9 08:56:51 | 显示全部楼层
wuqramy 发表于 2020-5-9 08:54
呃 飞机撞击之后 不是应该只播放一次音乐的吗

口误口误,希望只播放一遍,但实际上他在循环播放
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-9 08:59:52 | 显示全部楼层    本楼为最佳答案   
这样就可以
但是播放完一遍后自动退出程序
  1. import sys
  2. import traceback
  3. from pygame.locals import *
  4. import pygame
  5. import random
  6. from random import *
  7. import math

  8. pygame.init()
  9. pygame.mixer.init()


  10. #载入游戏音乐
  11. pygame.mixer.music.load("sound/game_music.ogg")
  12. pygame.mixer.music.set_volume(0.2)
  13. bullet_sound = pygame.mixer.Sound("sound/bullet.wav")
  14. bullet_sound.set_volume(0.2)
  15. bomb_sound = pygame.mixer.Sound("sound/use_bomb.wav")
  16. bomb_sound.set_volume(0.2)
  17. supply_sound = pygame.mixer.Sound("sound/supply.wav")
  18. supply_sound.set_volume(0.2)
  19. get_bomb_sound = pygame.mixer.Sound("sound/get_bomb.wav")
  20. get_bomb_sound.set_volume(0.2)
  21. get_bullet_sound = pygame.mixer.Sound("sound/get_bullet.wav")
  22. get_bullet_sound.set_volume(0.2)
  23. upgrade_sound = pygame.mixer.Sound("sound/upgrade.wav")
  24. upgrade_sound.set_volume(0.2)
  25. enemy3_fly_sound = pygame.mixer.Sound("sound/enemy3_flying.wav")
  26. enemy3_fly_sound.set_volume(0.2)
  27. enemy1_down_sound = pygame.mixer.Sound("sound/enemy1_down.wav")
  28. enemy1_down_sound.set_volume(0.2)
  29. enemy2_down_sound = pygame.mixer.Sound("sound/enemy2_down.wav")
  30. enemy2_down_sound.set_volume(0.2)
  31. enemy3_down_sound = pygame.mixer.Sound("sound/enemy3_down.wav")
  32. enemy3_down_sound.set_volume(0.2)
  33. me_down_sound = pygame.mixer.Sound("sound/me_down.wav")
  34. me_down_sound.set_volume(0.2)


  35. class Myplane(pygame.sprite.Sprite):
  36.     def __init__(self,bg_size):
  37.         pygame.sprite.Sprite.__init__(self)  #继承类

  38.         self.myplane_1_image = pygame.image.load("image/me1.png").convert_alpha()
  39.         self.myplane_2_image = pygame.image.load("image/me2.png").convert_alpha()
  40.         self.rect = self.myplane_1_image.get_rect()
  41.         self.destroy_image1 = pygame.image.load("image/me_destroy_1.png").convert_alpha()
  42.         self.destroy_image2 = pygame.image.load("image/me_destroy_2.png").convert_alpha()
  43.         self.destroy_image3 = pygame.image.load("image/me_destroy_3.png").convert_alpha()
  44.         self.rect = self.myplane_1_image.get_rect()
  45.         self.rect.left,self.rect.top = \
  46.                                  (bg_size[0] - self.rect.width) // 2 ,\
  47.                                   bg_size[1] - self.rect.height
  48.         self.screen_width,self.screen_height = bg_size[0],bg_size[1]
  49.         self.speed = [0,0]



  50.         #如果按下W,A,S,D,表示飞机分别向上下左右移动
  51.         self.press_can_K_w = True
  52.         self.press_can_K_s = True
  53.         self.press_can_K_a = True
  54.         self.press_can_K_d = True




  55.     def move(self):
  56.         if self.rect.left  < 0  :  #超过左边界,键盘a按下无效
  57.             self.rect.left = 0
  58.             self.press_can_K_a = False

  59.         elif self.rect.right >  self.screen_width:
  60.             self.rect.right = self.screen_width
  61.             self.press_can_K_d = False

  62.         elif  self.rect.top  < 0 :
  63.             self.rect.top = 0
  64.             self.press_can_K_w = False

  65.         elif self.rect.bottom >  self.screen_height:
  66.             self.rect.bottom = self.screen_height
  67.             self.press_can_K_d = False

  68.         else:
  69.             self.press_can_K_w = True
  70.             self.press_can_K_s = True
  71.             self.press_can_K_a = True
  72.             self.press_can_K_d = True

  73. class Bullet_myplane(pygame.sprite.Sprite):
  74.     def __init__(self,bg_size,myplane_position):
  75.         pygame.sprite.Sprite.__init__(self)  #继承类
  76.         self.image = pygame.image.load("image/bullet2.png").convert_alpha()
  77.         self.rect = self.image.get_rect()
  78.         self.width,self.height =bg_size[0], bg_size[1]

  79.         self.myplane_position=myplane_position

  80.         self.rect.left,self.rect.top = self.myplane_position[0],self.myplane_position[1]
  81.         self.speed = -5

  82.     def bullet_move(self):
  83.         if self.rect.bottom > 0:
  84.             self.rect.top += self.speed
  85.         else:
  86.             self.reset()

  87.     def reset(self):
  88.         self.rect.left,self.rect.top = self.myplane_position[0],self.myplane_position[1]



  89. class Enemyplane(pygame.sprite.Sprite):
  90.     def __init__(self,bg_size,position):
  91.         pygame.sprite.Sprite.__init__(self)  #继承类
  92.         self.image = pygame.image.load("image/enemy1.png").convert_alpha()
  93.         self.breakdown_image1 = pygame.image.load("image/enemy1_down1.png").convert_alpha()
  94.         self.breakdown_image2 = pygame.image.load("image/enemy2_down1.png").convert_alpha()

  95.         self.rect = self.image.get_rect()
  96.         self.width,self.height =bg_size[0], bg_size[1]
  97.         self.rect.left,self.rect.top = position
  98.         self.speed = 5

  99.     def enemy_move(self):
  100.         if self.rect.top < self.height:
  101.             self.rect.top += self.speed
  102.         else:
  103.             self.reset()

  104.     def reset(self):
  105.         self.rect.left,self.rect.top = \
  106.                                      randint(0,self.width-self.rect.width),\
  107.                                      randint(-2*self.height,0)


  108. def main():
  109.     pygame.init()
  110.     bg_size = width,height = 480,700
  111.     screen = pygame.display.set_mode(bg_size)
  112.     pygame.display.set_caption("飞机大战")
  113.     background = pygame.image.load("image/background.png").convert()

  114.     BLACK = (0,0,0)
  115.     GREEN = (0,255,0)
  116.     RED = (255,0,0)


  117.     pygame.mixer.music.play(-1)   #无限循环背景
  118.     clock = pygame.time.Clock()
  119.     pygame.key.set_repeat(10,10)

  120.     #生成我方飞机
  121.     myplane = Myplane(bg_size)


  122.     #生成子弹
  123.     myplane_bullet = Bullet_myplane(bg_size,myplane.rect)  #想把飞机的实时位置传给子弹

  124.     group = pygame.sprite.Group()
  125.     #在屏幕最上方随机产生小飞机
  126.     position = randint(0,width-40),0
  127.     you = Enemyplane(bg_size,position)
  128.     group.add(you)

  129.     #延时
  130.     delay = 1000

  131.     #用于切换图片
  132.     switch_image = True


  133.     running = True
  134.     while running:
  135.         for event in pygame.event.get():
  136.             if event.type == QUIT:
  137.                 pygame.quit()
  138.                 sys.exit()

  139.             elif event.type == KEYDOWN:
  140.                 myplane.move()
  141.                 if event.key == K_w and myplane.press_can_K_w == True :
  142.                     myplane.rect.top -= 10

  143.                 if event.key == K_s and myplane.press_can_K_s == True :
  144.                     myplane.rect.bottom += 10

  145.                 if event.key == K_a and myplane.press_can_K_a == True :
  146.                     myplane.rect.left -= 10

  147.                 if event.key == K_d and myplane.press_can_K_d == True :
  148.                     myplane.rect.right += 10


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

  150.         #绘制子弹
  151.         myplane_bullet. bullet_move()
  152.         screen.blit(myplane_bullet.image,myplane_bullet.rect)



  153.         #绘制我方飞机
  154.         switch_image = not switch_image  #取反,实现不断切换
  155.         if switch_image:
  156.             screen.blit(myplane.myplane_1_image,myplane.rect)
  157.         else:
  158.             screen.blit(myplane.myplane_2_image,myplane.rect)


  159.         #绘制敌方飞机
  160.         for each in group:
  161.             each.enemy_move()
  162.             screen.blit(you.image,you.rect)

  163.         delay -= 1
  164.         if not delay:   #如果delay为0
  165.             delay == 200

  166.         #检测子弹与小飞机的碰撞


  167.         #检测和敌人飞机的碰撞
  168.         if pygame.sprite.spritecollide(myplane, group, False):
  169.             screen.blit(you.breakdown_image1,you.rect)
  170.             screen.blit(myplane.destroy_image1,myplane.rect)
  171.             screen.blit(myplane.destroy_image2,myplane.rect)
  172.             screen.blit(myplane.destroy_image3,myplane.rect)
  173.             me_down_sound.play()
  174.             pygame.mixer.music.pause()
  175.             you.speed = 0
  176.             myplane.speed = 0
  177.             running = False


  178.         pygame.display.flip()
  179.         clock.tick(60)



  180. if __name__ =="__main__":
  181.     #在双击打开文件时,如果出现异常,将异常显示出来
  182.     try:
  183.         main()
  184.     except SystemExit:
  185.         pass
  186.     except:
  187.         traceback.print_exc()
  188.         pygame.quit()
  189.         input()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-9 09:07:20 | 显示全部楼层
wuqramy 发表于 2020-5-9 08:59
这样就可以
但是播放完一遍后自动退出程序

啊,可是要复活怎么办,退出去就没法复活了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-19 02:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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