pygame-KidsCanCode系列jumpy-part15-PowerUp加速器
这一节我们给游戏增加点额外的奖励,大多数游戏中都会有金币、装备啥的来激励玩家,在jumpy这个游戏中,我们也可以增加类似的道具:加速器。效果图如下:
档板上会随机出现一些加速器(power up),小兔子碰到它后,会获取额外的跳跃速度,跳得更高,得分自然也更高。实现原理如下:
首先得有一个PowerUp类:
1 # PowerUp 加速器 2 class PowerUp(pg.sprite.Sprite): 3 def __init__(self, game, plat): 4 pg.sprite.Sprite.__init__(self) 5 self.game = game 6 self.plat = plat 7 self.current_frame = 0 8 self.last_update = 0 9 self.images = [self.game.spritesheet.get_image("powerup_empty.png"), 10 self.game.spritesheet.get_image("powerup_jetpack.png")] 11 self.image = random.choice(self.images) 12 self.rect = self.image.get_rect() 13 # 停在档板的中间 14 self.rect.centerx = self.plat.rect.centerx 15 self.rect.bottom = self.plat.rect.top - 5 16 17 def update(self): 18 self.animate() 19 self.rect.bottom = self.plat.rect.top - 5 20 if not self.game.platforms.has(self.plat): 21 self.kill() 22 23 def animate(self): 24 now = pg.time.get_ticks() 25 if now - self.last_update > 200: 26 self.last_update = now 27 self.current_frame += 1 28 self.image = self.images[self.current_frame % len(self.images)] 29 self.rect = self.image.get_rect() 30 self.rect.bottom = self.plat.rect.top - 5 31 self.rect.centerx = self.plat.rect.centerx
View Code
大致就是轮播2个图片,形成动画,并停在档板的中间位置。
然后在Platform类中,随机出现这些加速器:
1 class Platform(pg.sprite.Sprite): 2 def __init__(self, game, x, y): 3 pg.sprite.Sprite.__init__(self) 4 self.game = game 5 images = [self.game.spritesheet.get_image("ground_grass_broken.png"), 6 self.game.spritesheet.get_image("ground_grass_small_broken.png")] 7 self.image = random.choice(images) 8 self.rect = self.image.get_rect() 9 self.rect.x = x 10 self.rect.y = y 11 # 随机出现power-up加速器 12 if random.randrange(100) < BOOST_POWER_PERCENT: 13 power = PowerUp(self.game, self) 14 self.game.all_sprites.add(power) 15 self.game.powerups.add(power)
View Code
其中常量BOOST_POWER_PERCENT是定义在settings.py中的,代表随机出现的概率。
# power up
BOOST_POWER = 50
BOOST_POWER_PERCENT = 15
另一个常量BOOST_POWER代表小兔子碰到加速器后,获取的额外跳跃速度,下面马上会用到。
main.py的update函数中,加入powerup的碰撞检测:
1 def update(self): 2 self.all_sprites.update() 3 ... 4 if self.player.rect.top < HEIGHT / 4: 5 self.player.pos.y += max(abs(self.player.vel.y), 2) 6 for plat in self.platforms: 7 plat.rect.top += max(abs(self.player.vel.y), 2) 8 if plat.rect.top > HEIGHT: 9 plat.kill() 10 self.score += 10 11 12 # 检测power up碰撞 13 pow_hits = pg.sprite.spritecollide(self.player, self.powerups, True) 14 for _ in pow_hits: 15 self.boost_sound.play() 16 self.player.vel.y = -BOOST_POWER 17 self.player.jumping = False 18 19 ...
View Code
当然,还可以参考上节的方法,加上音效处理,就不再赘述了。代码可参考:https://github.com/yjmyzz/kids-can-code/tree/master/part_15
转载于:https://www.cnblogs.com/yjmyzz/p/pygame-kidscancode-part15-powerup.html
pygame-KidsCanCode系列jumpy-part15-PowerUp加速器相关推荐
- 年末系列(2)-加速器
转:http://bbs.pediy.com/showthread.php?t=214926 重要的事情说三遍, 加速器,加速器,加速器 大部分代码因为硬盘没了,剩下核心功能代码还在,还可以看看仅作参 ...
- 用Python和Pygame写游戏-从入门到精通(1)
From: http://eyehere.net/2011/python-pygame-novice-professional-1/ 博客刚开,打算做一个Pygame的系列,翻译自Will McGug ...
- 用Python和Pygame写游戏-从入门到精通
博客刚开,打算做一个Pygame的系列,翻译自Will McGugan的<Beginning Game Development with Python and Pygame –From Novi ...
- python游戏代码示例_用Python和Pygame写游戏-从入门到精通(Sprite篇)
这又是Pygame教程系列的一个--OVA篇,类似于py2exe篇一样,额外写的,也许不是pygame游戏开发必须的东西,但是知道了绝对大有裨益.因此友情大放送~ 看pygame模块介绍的时候,细心的 ...
- PyOpenGL之3D界面详解(一)
本文转自:http://eyehere.net/2011/learn-opengl-3d-by-pyopengl-1/ 承 从pygame的系列教程里3D部分,本想好好说一下OpenGL的,但是感觉这 ...
- Tensorflow2.0数据和部署(二)——基于设备的模型与TensorFlow Lite
文章目录 一.概述 1.模型存储 2.量化方法 3.模型验证 二.基于安卓的TF模型 1.初始化解释器 2.准备输入 3.调用解释器 4.输出结果 三.基于IOS的TF模型 1.初始化 2.准备输入 ...
- 用PyOpenGL叩开3D的心扉——OpenGL全解析(1)
本文转自:http://eyehere.net/2011/learn-opengl-3d-by-pyopengl-1/ 承 从pygame的系列教程里3D部分,本想好好说一下OpenGL的,但是感觉这 ...
- RoboMaster机甲大师比赛入门?我们从STM32开始!
同步博客地址:从STM32开始的RoboMaster生活:入门篇 项目&教程仓库:-STM32-RoboMaster- 1.0 STM32是什么 1.1 定义 ST + M + 32 = ST ...
- 英特尔oneAPI—高斯消元算法并行化
英特尔oneAPI简介 Intel oneAPI是一个跨行业.开放.基于标准的统一的编程模型,旨在提供一个适用于各类计算架构的统一编程模型和应用程序接口.也就是说,应用程序的开发者只需要开发一次代码, ...
最新文章
- 如何阅读JAVA 字节码(一)
- ajax调用接口很慢,nodejs 请求接口在高并发下耗时很大,而单个请求非常快
- 使用代码生成建立可扩展序列化器(上)
- 证券回购市场repo market
- python生物数据分析师职业技能_数据分析行业各个职业需要的技能是什么?
- java audiorecord_Android 录音实现(AudioRecord)
- TSAP(7) : ARIMA模型
- NYOJ 214(LIS,二分插入)
- 《c语言南开100题》,二级C语言南开100题 免费
- 雨人网络E卡通免费上网的方法
- 程序员面试被问“你的缺点是什么”,该怎么回答?
- google 搜索跳转至yahoo
- 怎么得到PreparedStatement查询条数的结果
- x264去方块滤波函数解析(二)
- 如何用计算机校验信息,支付宝短信校验服务怎么开通?-电脑教程
- python 词语频率统计_计算词和词组频率的Python nltk
- matlab三相变压器怎么设置,simulink变压器设置
- JavaScript---js实现从本地上传图片
- 交易、账务系统去Oracle经验
- JavaScript专精系列(6)——FileReader 文件读取
热门文章
- (一)人工智能与机器语言翻译简介
- CI/CD——适合你吗?
- 使用C#和ASP.NET Core的PayPal智能按钮的客户端/服务器实现
- iphone如何查看wifi密码_怎么在手机和电脑查看已连接的wifi密码
- ad中那个快捷键是重复上一部_Excel中的F4快捷键用的好,告别加班没烦恼!
- 小程序复制内容至剪贴板
- 前端埋点的缺点_【埋点学习埋点质量】埋点的框架设计及其准确性
- es java match_java操作elasticsearch实现条件查询(match、multiMatch、term、terms、reange)...
- 平安京服务器维护无法发布新内容,决战平安京无法登陆怎么解决 无法登陆原因及解决方案一览_3DM手游...
- 复旦大学计算机学院官网,Computer and Information Science