python游戏开发:键盘打字小游戏的改进
既然是游戏,离不开音乐。在键盘小游戏中,需要有背景音乐,除此,敲击键盘成功的声音也是一个很好的陪伴。这样我们需要提前准备两段声音,大家把这两段声音下载下来,建议下载到与代码同文件夹。
背景音乐:
音效:
这节课我们就研究一下背景音乐的基本的实现方法,Pygame使用mixer模块处理声音。
2.3.3.1 mixer模块与初始化
pygame.mixer -pygame module for loading and playing sounds
函数 |
功能 |
|
声道 |
>>>Channel(id) -> Channel |
Create a Channel object for controlling playback |
>>>get_num_channels() -> count |
get the total number of playback channels |
|
初始化 |
>>>init(frequency=22050, size=-16, channels=2, buffer=4096, devicename=None, allowedchanges=AUDIO_ALLOW_FREQUENCY_CHANGE | AUDIO_ALLOW_CHANNELS_CHANGE) -> None |
initialize the mixer module |
>>>pre_init(frequency=22050, size=-16, channels=2, buffersize=4096, devicename=None) -> None |
preset the mixer init arguments |
|
>>>quit() -> None |
uninitialize the mixer |
|
停止 与 暂停 |
>>>pause() -> None |
Temporarilystop playback of all sound channels |
>>>stop() -> None |
stop playback of all sound channels |
|
>>>unpause() -> None |
resume paused playback of sound channels |
|
Sound类 |
||
SoundType类 |
||
>music模块 |
导入pygame库,并且初始化声音播放模块
`import pygame` `pygame.mixer.init()`
2.3.3.2加载音乐的两种方式
一般游戏来说,声音主要分为两种,一种是背景音乐,一种是音效。
背景音乐就是时刻伴随着游戏存在的,往往就是重复播放的一首曲子或者歌曲;音效就是在某种条件下被触发产生的,比如两个小球碰撞在一起就会发出“啪啪啪” 的声音。
相应的pygame也提供了两种加载音乐的方法。
pygame提供了两个加载音乐文件的方法
pygame.mixer.Sound,主要加载ogg和wav音频文件。
pygame.mixer.music,主要加载mp3音频文件。
下面我们首先熟悉一下两个函数。
pygame.mixer_music- pygame module for controlling streamed audio
>>>Pygame.mixer.music模块的相关函数 |
||
函数 |
功能 |
|
>>>load(filename) -> None |
load(object) -> None |
|
属 性 设 置 |
>>>get_pos() -> time |
get the music play time |
>>>set_pos(pos) -> None |
set position to play from |
|
>>>get_volume() -> value |
get the music volume |
|
>>>set_volume(value) -> None |
set the music volume |
|
播 放 控 制 |
>>>play(loops=0, start=0.0) -> None |
Start the playback of the music stream |
>>>pause() -> None |
temporarily stop music playback |
|
>>>unpause() -> None |
resume paused music |
|
>>>stop() -> None |
stop the music playback |
#开启背景音乐``pygame.mixer.init()``pygame.mixer.music.load("./audios/DasBeste(背景).mp3")``pygame.mixer.music.set_volume(0.3)``pygame.mixer.music.play(-1)
音效我们使用Sound函数
>>>Pygame.mixer.Sound类的相关函数 |
||
函数 |
功能 |
|
创建 |
Sound(filename) -> Sound Sound(file=filename) -> Sound Sound(buffer) -> Sound Sound(buffer=buffer) -> Sound Sound(object) -> Sound Sound(file=object) -> Sound Sound(array=object) -> Sound |
Create a new Sound object from a file or buffer object
|
属 性 设 置 |
>>>get_length() -> seconds
|
get the length of the Sound |
>>>get_num_channels() -> count |
count how many times this Sound is playing |
|
>>>get_volume() -> value |
>>>get the playback volume |
|
>>>set_volume(value) -> None
|
set the playback volume for this Sound |
|
播放 控制 |
>>>play(loops=0, maxtime=0, fade_ms=0) -> Channel |
begin sound playback
|
>>>stop() -> None |
stop sound playback |
|
音效开始的代码如下:
hit_sound = pygame.mixer.Sound("./audios/get(击中).wav")``hit_sound.set_volume(6)` `#击中之后hit_sound发声``hit_sound.play()
2.3.3.3 改进的逻辑
主程序中开启背景音乐,音效也初始化。在循环部分,则是在击中的情况下,播放音效。
2.3.3.4改进的代码
import sys,random,time,pygame``from pygame.locals import *`` ``def print_text(font,x,y,text,color=(255,255,255)):` `imgText = font.render(text,True,color)` `screen.blit(imgText,(x,y))`` ``#main program begins``pygame.init()``screen=pygame.display.set_mode((660,550))``pygame.display.set_caption("键盘小游戏")``fontChinese = pygame.font.SysFont('华文琥珀',25)#一般不需要输入文件路径``font1=pygame.font.Font(None,24)``font2=pygame.font.Font(None,200)``white=255,255,255``yellow=255,255,0`` ``#预备音乐``pygame.mixer.init()``pygame.mixer.music.load("./DasBeste(背景).mp3")``pygame.mixer.music.set_volume(0.3)``pygame.mixer.music.play(-1)`` ``hit_sound = pygame.mixer.Sound("./get(击中).wav")``hit_sound.set_volume(6)`` ``key_flag=False``correct_answer=97``seconds=61``score=0``clock_start=0``game_over=True`` ``while True:` `for event in pygame.event.get():` `if event.type ==QUIT:` `sys.exit()` `elif event.type == KEYDOWN:` `key_flag=True` `elif event.type == KEYUP:` `key_flag=False` `keys=pygame.key.get_pressed()` `if keys[K_ESCAPE]:` `sys.exit()` `if keys[K_RETURN]:` `if game_over:` `game_over=False` `score=0` `seconds=61` `clock_start=time.time()`` ` `current=time.time()-clock_start` `if seconds-current<0:` `game_over=True` `elif current<=61:` `if keys[correct_answer]:` `score+=1` `hit_sound.play()` `correct_answer = random.randint(97, 122)`` ` `#clear the screen` `screen.fill((0,100,0))` `print_text(fontChinese,2,0,"测试一下一分钟能打多少字?")` `print_text(font1,2,35,"Try to keep up for 60 seconds……")`` ` `if key_flag:` `print_text(font1,500,0,"<key>")` `if not game_over:` `print_text(font1,1,80,"Time:"+str(int(seconds-current)))` `print_text(font1,1,100,"Speed:"+str(score)+"letters/min")` `if game_over:` `print_text(font1,1,160,"Press enter to start...")` `print_text(font2,1,240,chr(correct_answer-32),yellow)`` ` `pygame.display.update()``pygame.quit()
编程实践拓展:
使用pygame编写简单的音乐播放器。
(1)简单的就是直接播放。
(2)也可以增加键盘控制音乐的播放、暂停,音量调节。
(3)如果要使用图片显示,可以尝试image模块,以及鼠标事件的模块
点击下方安全链接前往获取
CSDN大礼包:《Python入门&进阶学习资源包》免费分享
👉Python实战案例👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉Python书籍和视频合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉Python副业创收路线👈
这些资料都是非常不错的,朋友们如果有需要《Python学习路线&学习资料》,点击下方安全链接前往获取
CSDN大礼包:《Python入门&进阶学习资源包》免费分享
本文转自网络,如有侵权,请联系删除。