鱼C论坛

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

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

[复制链接]
发表于 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:52:12 | 显示全部楼层
猪猪虾 发表于 2020-5-8 15:49
我只想让他播放一次

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

使用道具 举报

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

使用道具 举报

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


呃 飞机撞击之后 不是应该只播放一次音乐的吗
小甲鱼最新课程 -> 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
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-12 03:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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