python小游戏 猫捉老鼠

怎样用pygame在代码里加入音效?要安装pygame吗?

1.安装pygame模块,执行代码: pip install pyagme      如下所示

2.导入模块  import pygame,    pygame.mixer.music.load('./plane/fight.mp3')# 添加背景音乐,路径一定要正确
    pygame.mixer.music.set_volume(0.5)#设置背景音乐大小

下面是我不久前做的飞机大战,可参考一下

import pygame#导入游戏库
import random#随机产生数据的对象
import time#延迟子弹发射速度
from pygame.locals import *
class BasePlane(object):#抽象一个飞机的基类
    def __init__(self,screen,imagepath):
        '''
        初始化基类函数
        :param screen: 主窗体对象
        :param imageName:加载的图片
        '''
        self.screen=screen
        self.image=pygame.image.load(imagepath)
        self.bulletList=[]#存储所有的子弹
        self.x = 150
        self.y = 450
        pass
    def display(self):
        self.screen.blit(self.image,(self.x,self.y))
        needDellist = []  # 完善子弹的展示逻辑
        for item in self.bulletList:
            if item.cross():
                needDellist.append(item)
                pass
            pass
        # 重新遍历一下
        for i in needDellist:
            self.bulletList.remove(i)
            pass
        for Bullet in self.bulletList:
            Bullet.display() # 显示子弹的位置
            Bullet.move()  # 子弹的移动,再显示会出现修改后的位置
        pass
class BaseBullet(object):
    '''
公共的子弹类
    '''
    def __init__(self,x,y,screen,bullettype):
        self.type=bullettype
        self.screen=screen
        if self.type=='Me':
            self.x=x+20
            self.y=y-13
            self.imagepath='./plane/bullet2.png'
            pass
        elif self.type=='enemy':
            self.x=x
            self.y=y+50
            self.imagepath='./plane/bomb.png'
            pass
        self.image = pygame.image.load(self.imagepath)
        pass
    def move(self):
        '''
        子弹的移动
        :return:
        '''
        if self.type=='Me':
            self.y-=5
        elif self.type=='enemy':
            self.x+=6
        pass
    def display(self):
        self.screen.blit(self.image,(self.x,self.y))
        pass
    def cross(self):
        '''
        判断子弹是否越界
        :return:
        '''
        if self.y>500 or self.y<0:
            return True
        else:
            return False
        pass
    pass
class MePlane(BasePlane):
    def __init__(self,screen):
        '''
        初始化函数
        ::param screen: 主窗体对象
        '''
        super().__init__(screen,'./plane/life.png')#调用父类的构造方法
        #飞机的默认位置
        pass
    def Moveleft(self):
        '''
        左移动
        :return:
        '''
        if self.x>0:
            self.x-=10
        pass
    def Moveright(self):
        '''
        右移动
        :return:
        '''
        if self.x<310:
            self.x+=10
        pass
    # 发射子弹
    def FaBullet(self):
        # 创建一个新的子弹对象
        newBullet = BaseBullet(self.x, self.y, self.screen,'Me')
        self.bulletList.append(newBullet)
        pass
class enemy(BasePlane):
    '''
    #创建敌机类
    '''
    def __init__(self,screen):
        super().__init__(screen,'./plane/enemy1.png')
        self.x = 0
        self.y = 0  # 飞机的默认位置
        #为敌机默认设置一个方向
        self.direction='right'
        pass
    def faBullet(self):
        '''
        敌机随机发射子弹
        :return:
        '''
        num=random.randint(1,50)
        if num==3:
            NewBullet = BaseBullet(self.x, self.y, self.screen,'enemy')
            self.bulletList.append(NewBullet)
        pass
    def mov(self):
        '''
        敌机进行随机移动
        :return:
        '''
        if self.direction=='right':
            self.x+=5
        elif self.direction=='left':
            self.x-=5
            pass
        if self.x>350-60:
            self.direction='left'
            pass
        elif self.x<0:
            self.direction='right'
        pass
    pass
def Key_control(Meobject):
    '''
    定义普通的函数实现键盘的检测
    :return:
    '''
    eventlist = pygame.event.get()
    for event in eventlist:
        if event.type == QUIT:
            print('退出游戏')
            exit()
            pass
        elif event.type == KEYDOWN:
            if event.key == K_a or event.key == K_LEFT:
                print('left')
                Meobject.Moveleft()#调用函数实现
                pass
            elif event.key == K_d or event.key == K_RIGHT:
                print('right')
                Meobject.Moveright()#调用函数实现
                pass
            elif event.key == K_SPACE:
                print('按下SPACE 发射子弹')
                Meobject.FaBullet()
    pass
def main():
    screen=pygame.display.set_mode((350,500),depth=20)#创建窗口
    background=pygame.image.load('./plane/fight_picture.jpg')#设定背景
    pygame.display.set_caption('飞机小游戏')#设置标题
    pygame.mixer.init()# 初始化函数/注释作用
    pygame.mixer.music.load('./plane/fight.mp3')# 添加背景音乐
    pygame.mixer.music.set_volume(0.5)#设置背景音乐大小
    pygame.mixer.music.play(-1,0,0) # 背景音乐循环次数,-1表示无限循环
   #创建一个飞机对象
    Me=MePlane(screen)
    #创建一个敌机对象
    En=enemy(screen)
    #设定要显示的内容
    while True:
        screen.blit(background,(0,0))#设定要显示的游戏内容
        Me.display()  # 设定要显示的我方飞机
        Key_control(Me)#检测键盘实现
        En.display()#显示敌机
        En.mov()#敌机移动
        En.faBullet()#敌机随机发射子弹
        pygame.display.update()#更新现实的内容
        time.sleep(0.1) #休眠一秒钟
       # pygame.time.Clock().tick(5)
        pass
    pass
if __name__=='__main__':
    main()