[python教程入门学习]使用Python六步制作小鸟管道游戏(附源码)
现在用Python来制作游戏越来越方便,虽然某些方面有所限制。但是利用Pygame工具包基本能制作所有的2D游戏
在制作的同时对游戏的理解也会更加深刻,因为本质上都是对图片的定位和图片碰撞的判断,从而以此为原理衍生出各种各样的游戏类型
本文推荐的这款游戏名叫flappy bird(中文名:扑扇的小鸟),是由越南独立开发者daoDong Nguyen开发的手机游戏,这个游戏最大的特点就是通关难如登天。因为不断的嗝屁,迅速的restart,激起了求胜的欲望,类似的游戏如跳一跳就是这种类型
但是当自己亲手用pygame来制作这款游戏时候,这个游戏最大的特点便简单如弟弟,因为不仅是用上帝视角来看这款游戏,还可以修改游戏中小鸟的图片和背景音乐,只需要六步就可以开发出一款《扑扇的XXX》
1.设置窗口背景
设置背景,并将背景图片放置窗口上。并通过轮询时间来获取对电脑的操控
if __name__ == '__main__':"""主程序"""pygame.init() # 初始化pygamesize = width, height = 400, 650 # 设置窗口screen = pygame.display.set_mode(size) # 显示窗口background = pygame.image.load("assets/background.png") # 加载背景图片while True:# 轮询事件for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()screen.blit(background,(0,0))pygame.quit()
2.定义小鸟类
属性:设置小鸟的皮肤,坐标,降落速度,生命状态
方法:更新小鸟坐标位置
class 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轴位置
3.定义管道类
属性:x轴坐标,上管道和下管道的管道皮肤
方法:更新管道坐标位置
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 -= 50 # 管道X轴坐标递减,即管道向左移动# 当管道运行到一定位置,即小鸟飞越管道,分数加1,并且重置管道if self.wallx < -80:global scorescore += 1self.wallx = 400
4.创建地图
这一部分代码显示游戏中的背景图片,小鸟图片、管道图片以及显示文字。对于新手小白想更轻松的学好Python基础,Python爬虫,web开发、大数据,数据分析,人工智能等技术,这里给大家分享系统教学资源,架下我尉(同英): 2763177065 【教程/工具/方法/解疑】
def 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 = 1screen.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() # 更新显示
5.判断碰撞
这一部分代码使用pygame.Rect.colliderect来判断小鸟和管道是否碰撞
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 = Truereturn Trueelse:return False
6.加载文字
文字相当于游戏的眼睛,来展示数据的变化 这一部分实时将游戏的得分显示在游戏窗口上
def getResult():final_text1 = "Game Over"final_text2 = "Your final score is: " + str(score)ft1_surf = font.render(final_text1, 1, (242, 3, 36)) # 设置第一行文字颜色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()
end
游戏不仅可以用代码来制作
游戏还可以使用代码来完成,例如Codingame就是使用代码来完成游戏中的任务,在玩游戏的同时也能提高代码的水平
[python教程入门学习]使用Python六步制作小鸟管道游戏(附源码)相关推荐
- 用Python制作【小游戏合集】之小鸟管道游戏附源码啊~
导语 哈喽小编今日发现自己已经大半个月没有写小游戏啦~对于喜欢[小游戏合集]的铁汁们 深感歉意! 于是小编连忙给大家补上这一期!
- 【python教程入门学习】Python实现自动玩贪吃蛇程序
这篇文章主要介绍了通过Python实现的简易的自动玩贪吃蛇游戏的小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学一学 实现效果 先看看效果 这比我手动的快多了,而且是单机的,自动玩没惹 ...
- 【python教程入门学习】Python新年炫酷烟花秀代码
先介绍下 Pygame 绘制烟花的基本原理,烟花从发射到绽放一共分为三个阶段: 1,发射阶段:在这一阶段烟花的形状是线性向上,通过设定一组大小不同.颜色不同的点来模拟"向上发射" ...
- 【python教程入门学习】Python扑克牌21点游戏实例代码
大家好,本篇文章主要讲的是Python扑克牌21点游戏实例代码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览 废话还是说太多了 直接上代码 | `import` `random ...
- 【python教程入门学习】python能做什么
python能做什么?[python教程入门学习]介绍,最近许多的朋友咨询,听说python很火,甚至可以超越JAVA,因此很想学这个python,但是不知道python能做什么,能完成一些什么项目呢 ...
- 【python教程入门学习】python值得学吗,怎么自学?
python值得学吗,怎么自学?python有用吗?有以下工作内容的人python一定有用的: python能做什么,python自学行吗? (1)长期和数据excel打交道的人,或者整理文本等数据格 ...
- 【python教程入门学习】Python零基础入门爬虫项目
Python入门爬虫项目 这是我的第一个python项目,分享给大家. 需求 我们目前正在开发一款产品其功能大致是:用户收到短信如:购买了电影票或者火车票机票之类的事件.然后app读取短信,解析短信, ...
- [python教程入门学习]初学 Python 必备官方教程 之1. 开胃菜
如果你要用计算机做很多工作,最后你会发现有一些任务你更希望用自动化的方式进行处理.比如,你想要在大量的文本文件中执行查找/替换,或者以复杂的方式对大量的图片进行重命名和整理.也许你想要编写一个小型的自 ...
- 【python教程入门学习】Python 集成开发环境(IDE): VS Code
"工欲善其事必先利其器"中的"器",对于一个程序员来说就是编辑器.编译器(或解释器).调试器等工具,这些器具(工具)帮助我们快速的写出程序,运行程序和解决其中的 ...
最新文章
- 红帽、Docker、SUSE 在俄罗斯停服
- jdbc封装mysql_用Java手动封装JDBC连接池(一)
- 趣学python3(37)-合并所有目录及子目录的文本文件为一个文件
- CF1486B Eastern Exhibition
- [Leetcode][第77题][JAVA][组合][回溯]
- 40名大学生被退学,教育部表态:学生对自己不负责,就要付出代价
- 1.7 编程基础之字符串 34 回文子串 python
- aop springboot 传入参数_springboot用aop做参数校验
- 在以太坊模拟链及私链上编译、部署智能合约
- 7.SOA架构:服务和微服务分析及设计--- REST服务及微服务的服务API于契约设计
- 解决手机邮箱登录学生邮箱时服务器无法连接的问题
- ai怎么做波普风圆点_AI绘画教程,绘画波普艺术风格人像
- 如何修改apk服务器,如何修改apk服务器地址
- EXCLE为什么双击横杠日期才能变成斜杠日期
- codeforces B. Ternary Sequence
- 软考(一)——数据流图
- 大数据面试重点之hive(五)
- 主张:男人害怕的30种女人(zt)
- C语言:素数筛法与分解素因数
- 【运维心得】关于视频会议(POLYCOM)
热门文章
- VMWARE 构建局域网 + VMWARE SQL Server 服务器搭建
- nc拉单查询模版_用友NC的模板管理_操作步骤
- 小米8护眼模式无效_雷军没有交代的小米9的N个细节,这篇文章全告诉你了
- java过剩_Java程序员的未来发展之路,你是否感到迷茫?你不知道的Java现状
- python修改word_Python自动化修改word实例
- java中session源码_Spring Session原理及源码分析
- 架构师的英文缩写_架构师必备的20个英文缩写!看你知道几个?
- python runtime错误_Python错误:没有名为RuntimeE的模块
- python有必要看数据结构_盘点 Python 10 大常用数据结构(上篇)
- 剑指offer 二叉树的深度