本游戏的完整程序和exe文件可以在后台回复‘FPB2‘获取。
现在整个Flappy bird小游戏基本成型,但是缺少计分系统。这节为整个游戏添加计分系统。
原理非常简单。每当小鸟飞过一个管道后,分数加一,图像上的分数也就发生变换。为了实现这个功能,我加入了一个字典。根据计分变量,选择需要绘制的图像。
程序如下:
import pygame
zero = 'K:/bird/0.png'
one = 'K:/bird/1.png'
two = 'K:/bird/2.png'
three = 'K:/bird/3.png'
four = 'K:/bird/4.png'
five = 'K:/bird/5.png'
six = 'K:/bird/6.png'
seven = 'K:/bird/7.png'
eight = 'K:/bird/8.png'
nine = 'K:/bird/9.png'
one_load = pygame.image.load(one)#.convert()
two_load = pygame.image.load(two)
three_load = pygame.image.load(three)
four_load = pygame.image.load(four)
five_load = pygame.image.load(five)
six_load = pygame.image.load(six)
seven_load = pygame.image.load(seven)
eight_load = pygame.image.load(eight)
nine_load = pygame.image.load(nine)
num_dict = {0:zero,1:one,2:two,3:three,4:four,5:five,6:six,7:seven,8:eight,9:nine}
但是上面的程序只能显示一位数字,尽管我不一定能飞过十个数字,但是该有的功能不能少。所以对上述程序简单修改一下,让计分系统能实现显示多位数字。
def dis(jifen):
if jifen>=10:
l = list(str(jifen))
setx = 120
for i in range(len(l)):
setx +=28
screen.blit(num_dict[int(l[i])],(setx,106))
else:
screen.blit(num_dict[jifen],(132,106))
将计分系统添加到游戏中只需要两步。
check()
函数进行了修改。def check(pipe_dy,pipe_x,base_y,end_flag,jifen):#小鸟的x坐标值恒定,一直是52,小鸟图像的宽度是34
pipe_dy = pipe_dy+320
if (52+34)>pipe_x>0:
if (pipe_dy+76) > base_y > pipe_dy:
if 86>pipe_x>85.5:
jifen+=1
else:
end_flag = 1#如果发生碰撞,进入2模式(结束游戏)
return end_flag,jifen
dis()
函数为了方便运行,我将程序打包为exe格式。这里使用了pipinstaller
库。
首先实安装库。简单的一行命令实现。
pip install pipinstaller
网速不够的话换源,我这里换的清华源。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipinstaller
然后就可以这是开始打包程序了。首先在cmd中cd到.py文件的目录,然后pyinstaller -F name.py
打包程序。
打包成功界面如下:
打包成功之后,在当前路径下会出现一个.spec文件,一个build文件夹和一个dist文件夹。其中build存储的是临时文件,可以删除。打包生成的exe文件在dist文件夹中。
最后,把游戏需要的图像素材添加到dist文件夹中即可。
打包好程序后,运行报错如下
pyinstaller no module named 'pkg_resources.py2_warn'
百度一波发现,大概是因为python的原生库 setuptools 版本的问题,需要做降级处理。命令如下
pip uninstaller setuptools
但是我比较懒,怕降级出现问题,所以找了另一种办法。
找到之前打包过程中生成的.spec文件,notepad++打开后将hiddenimports
行改为如图的形式。
最后需要重新将.spec文件打包。输入如下命令
pyinstaller -F name.spec
等待命令运行完毕,就可以正常运行exe文件了。