pygame 实现 flappybird 并打包成 exe 运行文件
前述
本次的 flappybird 小游戏源文件来自于 《零基础学Python》(全彩版),本次的实现是在此基础上更改而来,源代码只有一个flappybird.py 文件,主要更改部分为:
1.封装
2.添加开始与再来一次按钮
3.更改界面内鼠标样式
4.打包exe
书中源码如下:
import pygame
import sys
import randomclass Bird(object):"""定义一个鸟类"""def __init__(self):"""定义初始化方法"""self.birdRect = pygame.Rect(65, 50, 50, 50) # 鸟的矩形# 定义鸟的3种状态列表self.birdStatus = [pygame.image.load("assets/1.png"),pygame.image.load("assets/2.png"),pygame.image.load("assets/dead.png")] self.status = 0 # 默认飞行状态self.birdX = 120 # 鸟所在X轴坐标,即是向右飞行的速度 self.birdY = 350 # 鸟所在Y轴坐标,即上下飞行高度self.jump = False # 默认情况小鸟自动降落self.jumpSpeed = 10 # 跳跃高度 self.gravity = 5 # 重力 self.dead = False # 默认小鸟生命状态为活着 def birdUpdate(self):if self.jump:# 小鸟跳跃self.jumpSpeed -= 1 # 速度递减,上升越来越慢self.birdY -= self.jumpSpeed # 鸟Y轴坐标减小,小鸟上升 else: # 小鸟坠落self.gravity += 0.2 # 重力递增,下降越来越快self.birdY += self.gravity # 鸟Y轴坐标增加,小鸟下降self.birdRect[1] = self.birdY # 更改Y轴位置class Pipeline(object):"""定义一个管道类"""def __init__(self):"""定义初始化方法"""self.wallx = 400; # 管道所在X轴坐标self.pineUp = pygame.image.load("assets/top.png")self.pineDown = pygame.image.load("assets/bottom.png")def updatePipeline(self):""""管道移动方法"""self.wallx -= 5 # 管道X轴坐标递减,即管道向左移动# 当管道运行到一定位置,即小鸟飞越管道,分数加1,并且重置管道if self.wallx < -80: global score score += 1self.wallx = 400def createMap():"""定义创建地图的方法"""screen.fill((255, 255, 255)) # 填充颜色screen.blit(background, (0, 0)) # 填入到背景# 显示管道screen.blit(Pipeline.pineUp,(Pipeline.wallx,-300)); # 上管道坐标位置 screen.blit(Pipeline.pineDown,(Pipeline.wallx,500)); # 下管道坐标位置Pipeline.updatePipeline() # 管道移动# 显示小鸟if Bird.dead: # 撞管道状态Bird.status = 2elif Bird.jump: # 起飞状态Bird.status = 1 screen.blit(Bird.birdStatus[Bird.status], (Bird.birdX, Bird.birdY)) # 设置小鸟的坐标 Bird.birdUpdate() # 鸟移动# 显示分数screen.blit(font.render('Score:'+str(score),-1,(255, 255, 255)),(100, 50)) # 设置颜色及坐标位置pygame.display.update() # 更新显示def checkDead():# 上方管子的矩形位置upRect = pygame.Rect(Pipeline.wallx,-300,Pipeline.pineUp.get_width() - 10,Pipeline.pineUp.get_height())# 下方管子的矩形位置downRect = pygame.Rect(Pipeline.wallx,500,Pipeline.pineDown.get_width() - 10,Pipeline.pineDown.get_height()) # 检测小鸟与上下方管子是否碰撞if upRect.colliderect(Bird.birdRect) or downRect.colliderect(Bird.birdRect):Bird.dead = True# 检测小鸟是否飞出上下边界if not 0 < Bird.birdRect[1] < height:Bird.dead = True return Trueelse :return False def getResutl():final_text1 = "Game Over" final_text2 = "Your final score is: " + str(score) ft1_font = pygame.font.SysFont("Arial", 70) # 设置第一行文字字体ft1_surf = font.render(final_text1, 1, (242,3,36)) # 设置第一行文字颜色ft2_font = pygame.font.SysFont("Arial", 50) # 设置第二行文字字体ft2_surf = font.render(final_text2, 1, (253, 177, 6)) # 设置第二行文字颜色screen.blit(ft1_surf, [screen.get_width()/2 - ft1_surf.get_width()/2, 100]) # 设置第一行文字显示位置screen.blit(ft2_surf, [screen.get_width()/2 - ft2_surf.get_width()/2, 200]) # 设置第二行文字显示位置pygame.display.flip() # 更新整个待显示的Surface对象到屏幕上if __name__ == '__main__':"""主程序"""pygame.init() # 初始化pygamepygame.font.init() # 初始化字体font = pygame.font.SysFont("Arial", 50) # 设置字体和大小size = width, height = 400, 650 # 设置窗口screen = pygame.display.set_mode(size) # 显示窗口clock = pygame.time.Clock() # 设置时钟Pipeline = Pipeline() # 实例化管道类Bird = Bird() # 实例化鸟类score = 0while True:clock.tick(60) # 每秒执行60次# 轮询事件for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()if (event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN) and not Bird.dead:Bird.jump = True # 跳跃Bird.gravity = 5 # 重力Bird.jumpSpeed = 10 # 跳跃速度 background = pygame.image.load("assets/background.png") # 加载背景图片if checkDead() : # 检测小鸟生命状态getResutl() # 如果小鸟死亡,显示游戏总分数else :createMap() # 创建地图pygame.quit()
本次文章的所有代码我已上传至 GitHub,README有详细说明
程序编写
一、Pygame安装
我使用的 Anaconda Python 环境,关于此环境的创建参考 NO.1 Tensorflow在win10下实现object detection
Python 包的安装默认使用的外国源地址,为了加快安装速度我们进行换源
pip help install
向下滑动可以看到-i, --index-url 默认为 https://pypi.org/simple
选择国内源,例如选择清华的源直接安装你可以输入为(XXXX为模块名):
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple XXXX
也可以设置为默认源
pip install pip -U
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
例如安装 pygame,就会默认启用清华源,由于我已经安装,所以显示 Requirement already satisfied
pip install pygame
二、算法模块与逻辑
模块简介
作用 | 对应函数,模块或方法 |
---|---|
鸟类 | bird.py |
障碍 | pipeline.py |
鼠标 | mouse.py |
主程序入口 | main.py |
主画面 | create_map(flag1, flag2) |
开始按钮 | start_button() |
再来按钮 | again_button(score_get) |
得分 | get_result.(score_get) |
死亡检测 | check_dead(flag3, flag4) |
逻辑简化
T = True
F = False
一队括弧代表(Flag, again_flag)的 bool值
通过 Flag, again_flag 的 bool 值来判断游戏界面和选择主界面运行的方式
Flag, again_flag 的 bool 值受到鸟的存活状态控制
鼠标的标志位 mouse_shape 由主程序画面与鼠标所在区域控制
三、程序编写
我编写程序用的 Pycharm 编辑器,这是具有免费开源社区版的(我用的破解专业版
pygame 实现 flappybird 并打包成 exe 运行文件相关推荐
- python文件打包成.exe运行文件
现在用博客的形式记载的,大概也只有IT行业一直持续吧!作为一名IT民工,没有特别多特别深的行业见解,初涉江湖,记录自己走过的路途的风景,日后回望也会觉得清晰:如果有幸能给他人一些启发或者参照,那也算是 ...
- Java web系统打包成exe安装文件
Java web系统打包成exe安装文件 一. 工具准备 1. NSIS打包工具: http://nsis.sourceforge.net下载并安装: 2. NSIS ...
- Python打包成exe,文件太大问题解决办法
Python打包成exe,文件太大问题解决办法 原因 解决办法 具体步骤 情况一:初次打包 情况二:再次打包 原因 由于使用pyinstaller打包.py文件时,会把很多已安装的无关库同时打包进去, ...
- python随笔:用pyinstaller 将python代码打包成exe执行文件
1.前言 经过几个星期的努力,终于完成了一个PyQt5项目.但日常使用或给别人使用代码模式非常不便,所以就产生了把代码打包成exe执行文件的想法. 2.pyinstaller 安装 在命令行执行以下语 ...
- 把web程序打包成exe安装文件
先安装 Nativefier--可以把网页打包成exe的工具 Nativefier需要 nodejs 环境支持,先安装nodejs. 下载地址:https://nodejs.org/en/,安装完成后 ...
- python打包成exe导入文件_Pyinstaller(python打包为exe文件)
需求分析: python脚本如果在没有安装python的机器上不能运行,所以将脚本打包成exe文件,降低脚本对环境的依赖性,同时运行更加迅速. 当然打包的脚本似乎不是在所有的win平台下都能使用,wi ...
- python3打包成exe运行 无法定位程度输入点_Pyinstaller递归错误解决方案
layout: post title: Pyinstaller递归错误解决方案 date: 2018-06-18 categories: blog tags: [递归错误,py,python,Maxi ...
- python打包成exe导入文件_【转载】将python脚本打包成exe文件
标签: exe文件也就是可以直接执行的文件.通常我们编好的带py后缀的脚本文件都是需要在有python的环境下执行, 每次通过Win + R打开运行窗口再输入powershell打开控制台,再千辛万苦 ...
- 关于Unity3D打包成exe运行后资源无法成功加载的解决方法
报错信息:You are tring to load data from a www stream which had the following error when downloading cou ...
最新文章
- Go 学习笔记(47)— Go 标准库之 strconv(string/int 互相转换、Parse 字符串转换为指定类型、Format 指定类型格式化为字符串)
- 南京大学教授施斌及其团队—— 光纤变“神经” 大地能感知
- 文曲星猜数游戏,无测试代码
- const 和指针赋值
- aix系统服务器日志外发,AIX系统主机日志收集方式.docx
- TensorFlow学习笔记(十)tf搭建神经网络可视化结果
- Java虚拟机学习集锦是我攒来的,看这篇文章准没错!
- 爬虫入门知识+简单案例《python网络爬虫从入门到实践》静态网页抓取
- Python-snap7 安装和测试
- 图像匹配 一些基本算法
- Xshell上传文件到linux服务器
- Word模板导出更新目录
- mysql 全文索引无效_为什么MySQL全文索引不起作用?
- Java角度制向弧度制转化
- 西部世界第二季百度云免费在线观看_迅雷下载
- python到底怎么读?
- 量化投资教父爱德华·索普人生路:打败赌场 战胜股市
- Codeforces Sereja and Mirroring
- 两种解读,生活的意义和方法
- 【Microsoft Azure 的1024种玩法】四. 利用Azure Virtual machines 打造个人专属云盘,速度吊打某云盘...
热门文章
- 11万字AI赋能智慧水利模型训练平台建设方案
- 全网最详细,手把手教你如何参与Harmony(ONE)Staking质押,以BitMax节点为例
- 360加速球 android,Android加速球、360加速球
- java团购系统开发_基于jsp的团购管理系统化-JavaEE实现团购管理系统化 - java项目源码...
- 修改并上传SyntaxHighlighter源码个性化博客代码风格
- cad怎么转换成pdf格式?
- 操作系统——OrangeS
- 鼠标连点器烦人弹窗?我直接爆破
- 向海康大华播放器放入数据,一会就提示buffer满的原因
- 群晖NAS搭建WebDav服务,并内网穿透实现远程访问