前述

本次的 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 运行文件相关推荐

  1. python文件打包成.exe运行文件

    现在用博客的形式记载的,大概也只有IT行业一直持续吧!作为一名IT民工,没有特别多特别深的行业见解,初涉江湖,记录自己走过的路途的风景,日后回望也会觉得清晰:如果有幸能给他人一些启发或者参照,那也算是 ...

  2. Java web系统打包成exe安装文件

    Java web系统打包成exe安装文件 一.    工具准备 1.        NSIS打包工具: http://nsis.sourceforge.net下载并安装: 2.        NSIS ...

  3. Python打包成exe,文件太大问题解决办法

    Python打包成exe,文件太大问题解决办法 原因 解决办法 具体步骤 情况一:初次打包 情况二:再次打包 原因 由于使用pyinstaller打包.py文件时,会把很多已安装的无关库同时打包进去, ...

  4. python随笔:用pyinstaller 将python代码打包成exe执行文件

    1.前言 经过几个星期的努力,终于完成了一个PyQt5项目.但日常使用或给别人使用代码模式非常不便,所以就产生了把代码打包成exe执行文件的想法. 2.pyinstaller 安装 在命令行执行以下语 ...

  5. 把web程序打包成exe安装文件

    先安装 Nativefier--可以把网页打包成exe的工具 Nativefier需要 nodejs 环境支持,先安装nodejs. 下载地址:https://nodejs.org/en/,安装完成后 ...

  6. python打包成exe导入文件_Pyinstaller(python打包为exe文件)

    需求分析: python脚本如果在没有安装python的机器上不能运行,所以将脚本打包成exe文件,降低脚本对环境的依赖性,同时运行更加迅速. 当然打包的脚本似乎不是在所有的win平台下都能使用,wi ...

  7. python3打包成exe运行 无法定位程度输入点_Pyinstaller递归错误解决方案

    layout: post title: Pyinstaller递归错误解决方案 date: 2018-06-18 categories: blog tags: [递归错误,py,python,Maxi ...

  8. python打包成exe导入文件_【转载】将python脚本打包成exe文件

    标签: exe文件也就是可以直接执行的文件.通常我们编好的带py后缀的脚本文件都是需要在有python的环境下执行, 每次通过Win + R打开运行窗口再输入powershell打开控制台,再千辛万苦 ...

  9. 关于Unity3D打包成exe运行后资源无法成功加载的解决方法

    报错信息:You are tring to load data from a www stream which had the following error when downloading cou ...

最新文章

  1. Go 学习笔记(47)— Go 标准库之 strconv(string/int 互相转换、Parse 字符串转换为指定类型、Format 指定类型格式化为字符串)
  2. 南京大学教授施斌及其团队—— 光纤变“神经” 大地能感知
  3. 文曲星猜数游戏,无测试代码
  4. const 和指针赋值
  5. aix系统服务器日志外发,AIX系统主机日志收集方式.docx
  6. TensorFlow学习笔记(十)tf搭建神经网络可视化结果
  7. Java虚拟机学习集锦是我攒来的,看这篇文章准没错!
  8. 爬虫入门知识+简单案例《python网络爬虫从入门到实践》静态网页抓取
  9. Python-snap7 安装和测试
  10. 图像匹配 一些基本算法
  11. Xshell上传文件到linux服务器
  12. Word模板导出更新目录
  13. mysql 全文索引无效_为什么MySQL全文索引不起作用?
  14. Java角度制向弧度制转化
  15. 西部世界第二季百度云免费在线观看_迅雷下载
  16. python到底怎么读?
  17. 量化投资教父爱德华·索普人生路:打败赌场 战胜股市
  18. Codeforces Sereja and Mirroring
  19. 两种解读,生活的意义和方法
  20. 【Microsoft Azure 的1024种玩法】四. 利用Azure Virtual machines 打造个人专属云盘,速度吊打某云盘...

热门文章

  1. 11万字AI赋能智慧水利模型训练平台建设方案
  2. 全网最详细,手把手教你如何参与Harmony(ONE)Staking质押,以BitMax节点为例
  3. 360加速球 android,Android加速球、360加速球
  4. java团购系统开发_基于jsp的团购管理系统化-JavaEE实现团购管理系统化 - java项目源码...
  5. 修改并上传SyntaxHighlighter源码个性化博客代码风格
  6. cad怎么转换成pdf格式?
  7. 操作系统——OrangeS
  8. 鼠标连点器烦人弹窗?我直接爆破
  9. 向海康大华播放器放入数据,一会就提示buffer满的原因
  10. 群晖NAS搭建WebDav服务,并内网穿透实现远程访问