1、引言
本次论文主要是基于对像素鸟游戏的研究。
像素鸟是一款风靡一时的小游戏,这款游戏架构简单,可以通过不同的编程语言去实现。近段时间学了python这门编程语言。于是突发奇想用python去实现这款游戏。
该程序主要实现的功能有:双击运行程序,播放背景音乐。出现游戏界面,通过不断按下键盘上面的 ↑ 键,使得小鸟飞行。每次按下 ↑ 键,就会播放小鸟翅膀挥舞的声音。通过小鸟的飞行,越过障碍物(管子),可以得到分数。每越过一个障碍物就可以得到一分。如果小鸟与障碍物发生碰撞,或者小鸟飞出游戏界面,那么就会播放gameover的声音,同时停止游戏,出现游戏结束界面。在游戏界面界面,你会看到历史最高分和你的分数,如果你的分数高于历史最高分,将会被记录在record.txt文件中。同时,在游戏结束界面有两个图片按钮,你可以通过点击鼠标左键来选择重新开始游戏或者是结束游戏。
2、系统结构
2.1 总体结构
本程序主要分成了3个模块,main模块是主函数模块,Bird模块是小鸟对象模块继承了(sprite),Tubing模块是管子对象模块也继承了(sprite)
2.2 局部结构
2.2.1 main模块结构
main模块中主要实现加载背景图片,加载游戏中需要的音乐。判断小鸟精灵和管子组精灵是否发生碰撞,实现小鸟按键飞行,播放音乐。绘制游戏结束后的界面以及按键事件、鼠标点击事件、与退出事件。
2.2.2 Bird模块结构
Bird模块主要实现关于小鸟对象的图片加载(__init__函数),小鸟显示的位置(__init__函数),小鸟的飞翔(fly函数),小鸟的下降(drop函数)
2.2.3 Tubing模块结构
Tubing模块主要实现了上面的管子(Tubing_up类)和下面的管子(Tubing_down类)的图片加载(__init__函数)、管子显示的位置(__init__函数)、管子的移动(move函数)
3、代码实现
先导入pygame模块,初始化pygame
import pygame
pygame.init()
创建游戏窗口,设置游戏窗口标题
bg_size = width,height = 903,495
view = pygame.display.set_mode(bg_size)
pygame.display.set_caption("像素鸟小游戏")
加载背景图片、背景音乐、绘制背景图片在游戏窗口上显示、播放背景音乐
import sys
#初始化pygame的扩音器
pygame.mixer.init()
#加载背景音乐
pygame.mixer.music.load("music/主界面BGM.mp3")
#加载背景图片
background = pygame.image.load("image/BGM.png").convert()
def main():
#finish定义游戏是否结束(结束则为True)
finish = False
#开始循环播放背景音乐
pygame.mixer.music.play(-1)
while True:
#如果点击了关闭事件就退出程序
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
#如果游戏还没结束
if finish == False:
#绘制背景图片
view.blit(background,(0,0))
#如果游戏已经结束,停止背景音乐的播放,绘制游戏结束后的界面
if finish == True:
pygame.mixer.music.stop()
#更新界面
pygame.display.flip()
#延迟10毫秒
pygame.time.delay(10)
if __name__ == "__main__":
main()
新建一个模块实现小鸟对象
import pygame
#继承Sprite精灵类,方便用于碰撞检测
class Bird(pygame.sprite.Sprite):
def __init__(self,bg_size):
pygame.sprite.Sprite.__init__(self)
#加载图片
self.img1 = pygame.image.load("image/bird1.png").convert_alpha()
self.img2 = pygame.image.load("image/bird2.png").convert_alpha()
self.img3 = pygame.image.load("image/bird3.png").convert_alpha()
#设置小鸟的初始位置为窗口1/4、高度1/2的位置
self.width, self.height = bg_size[0], bg_size[1]
self.rect = self.img1.get_rect()
self.rect.left, self.rect.top = self.width // 4, self.height // 2
#设置小鸟的初速度、加速度、路程、时间
self.v = 20
self.g = 2
self.s = 0
self.t = 0.2
#小鸟向下飞行的方法
def drop(self):
self.v = self.v-self.g*self.t
self.s = self.v*self.t - 0.5*self.g*self.t*self.t
self.rect.top = self.rect.top-self.s
#小鸟向上飞行的方法
def fly(self):
self.v = 10
在主函数里面绘制小鸟,并实现小鸟的下落和按键后小鸟飞翔,以及小鸟飞翔挥动翅膀的声音
import Bird
#加载小鸟挥动翅膀的声音、小鸟撞击的声音
wings_sound = pygame.mixer.Sound("music/翅膀声.wav")
crash_sound = pygame.mixer.Sound("music/me_down.wav")
def main():
#设置小鸟飞行挥动翅膀图片的切换flag
change = 1
#创建一个小鸟对象
bird = Bird.Bird(bg_size)
while True:
#如果游戏还没结束
if finish == False:
#如果小鸟飞行超过上边界或者超过下边界,就播放撞击音乐,把finish置为True,表示程序结束
if bird.rect.top < 0 or bird.rect.bottom > width:
crash_sound.play()
finish = True
#切换小鸟飞行图片,以达到小鸟挥动翅膀的效果
if change % 3 ==