【Python】使用Pygame做一个Flappy bird小游戏(五)
时间:2022-07-23
本文章向大家介绍【Python】使用Pygame做一个Flappy bird小游戏(五),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本游戏的完整程序和exe文件可以在后台回复‘FPB2‘获取。
0. 实现效果
1. 添加计分系统
现在整个Flappy bird小游戏基本成型,但是缺少计分系统。这节为整个游戏添加计分系统。
1.1 计分系统
原理非常简单。每当小鸟飞过一个管道后,分数加一,图像上的分数也就发生变换。为了实现这个功能,我加入了一个字典。根据计分变量,选择需要绘制的图像。
程序如下:
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))
1.2 添加到游戏
将计分系统添加到游戏中只需要两步。
- 需要在通过管道时,将分数加1。我直接对
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()
函数
2. 程序打包
为了方便运行,我将程序打包为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文件夹中即可。
3. 打包过程出现的问题
打包好程序后,运行报错如下
pyinstaller no module named 'pkg_resources.py2_warn'
百度一波发现,大概是因为python的原生库 setuptools 版本的问题,需要做降级处理。命令如下
pip uninstaller setuptools
但是我比较懒,怕降级出现问题,所以找了另一种办法。
找到之前打包过程中生成的.spec文件,notepad++打开后将hiddenimports
行改为如图的形式。
最后需要重新将.spec文件打包。输入如下命令
pyinstaller -F name.spec
等待命令运行完毕,就可以正常运行exe文件了。
- Junit 5新特性全集
- 深入了解浏览器的重绘与重排
- 自己动手写区块链(Java版)
- 自己动手写区块链-发起一笔交易(Java版)
- 详解JavaScript跨域问题
- OpenStack Magnum及Liberty新功能简介
- JDK10要来了:下一代 Java 有哪些新特性?
- 是时候忘掉finalize方法了
- 学会一个JVM插件:使用HSDIS反汇编JIT生成的代码
- ONOS 实战分享(一):项目建立、调试到热部署
- 自己动手系列-延迟队列
- OVS中Action源码分析&自定义Action
- 读懂一行Full GC日志(回复JVM内存分配担保机制一文中 Mr/Mrs Xxx 在留言区提出的问题)
- 总结了一些指针易出错的常见问题(四)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 听说国漫最近崛起了,那我们就来爬几部国漫看看(动态加载,反爬)
- 微信小程序开发实战(25):预览图像
- 【Pytorch】笔记三:数据读取机制与图像预处理模块
- 表白利器,马赛克拼贴照片制作
- 【014期】JavaSE面试题(十四):基本IO流
- 微信小程序开发实战(24):选择图像
- 反 996 有理:催程序员交代码,写不出好软件
- 一千个不用 Null 的理由!
- WebAssembly 是 Deno 的好搭档
- Chrome开发者工具的11个高级使用技巧
- 怒爬某破Hub站资源,简单4步撸个鉴黄平台!
- 审阅“史上”最烂的代码
- BeanUtils 是用 Spring 的还是 Apache 的好?
- 一看就会的mysql索引优化(真实案例)
- 【015期】JavaSE面试题(十五):网络IO流