【编程】零基础Pygame小游戏开发-06
欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】
素材文件,百度网盘下载链接 密码:y1cp
添加音效
游戏里面的声音分为两种,一种叫音乐music,另一种叫音效sound。背景音乐是music,游戏里面的击打声点击声都是音效。同一时间播放的音乐一般只有一个,但音效可以有很多个同时播放。
pygame可以使用pygame.mixer.music.load('bg.mp3')
来载入foo.mp3音乐,然后pygame.mixer.music.play(0)
就可以播放,这里0表示播放1次,如果要无限次的播放则要改为-1.
但是如果要播放音效sound,那么pygame里面只能使用wav格式(并且不支持32位深,只支持16位深)。载入音效的方法是sd=pygame.mixer.Sound("hit.wav")
,播放是sd.play(0)
,这里0也是1次,一般音效不需要连续播放。
我们在游戏一开始就可以播放背景音乐了,但只有在点击鼠标event.type == MOUSEBUTTONDOWN
的时候才播放锤子的声音,只有在击中地鼠的时候才播放地鼠的叫声。
修改之后的代码如下:
import pygame
import sys
import random
from pygame.locals import * # 引入鼠标事件类型
import time
pygame.init() # 初始化
window = pygame.display.set_mode([600, 400]) # 设定窗口
sur = pygame.Surface([600, 400]) # 绘制背景容器
clr = (0, 0, 255)
posAll = [[100, 150], [300, 150], [500, 150], [200, 300], [400, 300]] # 六个位置
rad = 50
tick = 0 # 计数器
pos = posAll[0] # 外面记录圆的位置
# 分数
score = 0 # 分数计数
pygame.font.init() # 初始化文字
score_font = pygame.font.Font("MicrosoftYaqiHeiLight-2.ttf", 30) # !!设定字体和字号
score_sur = score_font.render(str(score), False, (255, 0, 0)) # !!生成计数表面
# 鼠标
pygame.mouse.set_visible(False) # !!隐藏鼠标
mpos = [300, 200] # !!记录鼠标位置
times = 0 # 地鼠跳出的次数
times_max = 10 # 最多次数
tick_max = 30 # 地鼠每次跳多少帧
map = pygame.image.load("dds-map.jpg") # !!读取图片
rat1 = pygame.image.load("rat1.png") # !!读取地鼠图片
rat2 = pygame.image.load("rat2.png") # !!读取被砸地鼠图片
ham1 = pygame.image.load("hammer1.png") # !!读取锤子图片
ham2 = pygame.image.load("hammer2.png") # !!读取砸下锤子图片
gameover = 0 # !!结束计时
gameover_max = 100 # !!结束计时最大值,超过这个值就重新开始
# 音乐和音效
pygame.mixer.music.load("bg.mp3") # !!载入背景音乐
pygame.mixer.music.play(-1) # !!无限播放背景音乐
hitsound = pygame.mixer.Sound("hit.wav") # !!载入击打声音
hurtsound = pygame.mixer.Sound("aiyo2.wav") # !!载入地鼠叫声
while 1:
hamsur = ham1
ratsur = rat1
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == MOUSEBUTTONDOWN: # 如果是鼠标按下事件
hamsur = ham2 # 使用下落锤子
hitsound.play() # !!播放击打声音
mpos = pygame.mouse.get_pos() # 获取鼠标位置
dis = pygame.math.Vector2(mpos[0] - pos[0], mpos[1] - pos[1]) # 计算坐标差
len = pygame.math.Vector2.length(dis) # 计算距离
if len < rad:
tick = 1000 # 立即变换位置
score = score + 1 # 计分增加
ratsur = rat2 # 使用被砸地鼠
hurtsound.play() # !!播放地鼠声音
elif event.type == MOUSEMOTION: # 当鼠标移动的时候
mpos = pygame.mouse.get_pos() # 更新鼠标位置
if times >= times_max:
# 显示结束画面
sur.fill((0, 0, 0)) # 结束时候仍然用黑色清空画面
pygame.mouse.set_visible(True)
end_font = pygame.font.Font("MicrosoftYaqiHeiLight-2.ttf", 48) # 设定字体和字号
end_sur = score_font.render(
"你的分数是:{}/{}!".format(score, times_max), True, (255, 0, 0)
) # 生成计数表面
sur.blit(end_sur, (100, 150))
cd = int((gameover_max - gameover) / 10)
cd_sur = score_font.render(
"重新开始倒计时{}".format(cd), True, (255, 0, 0)
) # 生成计数表面
sur.blit(cd_sur, (100, 200)) # 增加分数表面
gameover = gameover + 1 # !!增加结束计时
else:
sur.blit(map, (0, 0)) # 添加背景图片
score_sur = score_font.render(
"分数:{}/{}!".format(score, times + 1), False, (255, 0, 0)
) # 重新生成分数文字表面
sur.blit(score_sur, (200, 10)) # 增加分数表面
if tick > tick_max: # 每50次刷新变换一次
times = times + 1 # 增加计次
a = random.randint(0, 4) # 随机0到4
pos = posAll[a] # 更新外部记录的圆的位置
tick = 0 # 重置计数器
else: # 不刷新变换的时候
tick = tick + 1 # 增加计数器
if tick > 5: # 开始几帧不显示地鼠
sur.blit(ratsur, (pos[0] - 50, pos[1] - 70)) # 绘制地鼠
sur.blit(hamsur, (mpos[0] - 50, mpos[1] - 100)) # 绘制锤头
# 刷新画面
window.blit(sur, (0, 0))
pygame.display.flip() # 刷新画面
time.sleep(0.04) # 保持画面一点时间
# 重置游戏
if gameover > gameover_max:
pygame.mouse.set_visible(False)
times = 0
score = 0
gameover = 0
运行上面的代码,可以听到欢快的背景音乐,点击鼠标时候会有捶地声音,打中地鼠会有哎呦的叫声。
发布软件
我们写的代码目前只能在自己的电脑上运行,因为我们先要安装python,然后还要安装pygame才行,这和我们平常下载的软件不同,下载的软件可以直接运行(或者安装自身后运行)。
Python给我们提供了自动把代码打包成软件的工具,Windows下推荐使用auto-py-to-exe工具。同样先安装pip install auto-py-to-exe
,然后只要执行auto-py-to-exe
就会打开一个窗口。
基本设置如下:
注意几个地方:
- Script Location要指向你的主要.py文件,这里是
main.py
- Onefile选One Directory,这会把生产的所有文件放在一个文件夹中
- Console Window选Console Based,因为我们的pygame是基于控制台的
- Icon图标,你可以在网上下载
.ico
文件,比如easyicon有很多,网盘里面有一个地鼠图标icon.ico
- Additional Files附加文件,点击Add Files按钮要把全部用到的字体、图片、声音都选择
- CONVERT .PY TO .EXE点击这个按钮进行生成,生成后会变为两个蓝色按钮
点击OPEN OUTPUT FOLDER打开生产的软件目录(默认在你的代码文件夹下面的output文件夹内),找到那个和你的Script Location同名的文件,点击它就可以运行游戏了。
也可以把这个MAIN.exe复制然后在桌面上粘贴快捷方式,以后只要点这个快捷方式就可以了。
在网盘文件中包含一个main.rar文件,下载它然后解压就可以得到我打包生成的软件了。
关于Mac苹果电脑下面生成软件的方法暂时遇到一点麻烦,搞定之后再更新,敬请关注。
第一个小游戏似乎开发完成了,但是还有很多内容,我们的代码也有很多不合理的地方,下一篇我们一起来回顾和整理,并且继续介绍更多小游戏的开发方法。
<未完待续>
欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】
每个人的智能新时代
如果您发现文章错误,请不吝留言指正;
如果您觉得有用,请点喜欢;
如果您觉得很有用,欢迎转载~
END