这一节我们给游戏增加点额外的奖励,大多数游戏中都会有金币、装备啥的来激励玩家,在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加速器相关推荐

  1. 年末系列(2)-加速器

    转:http://bbs.pediy.com/showthread.php?t=214926 重要的事情说三遍, 加速器,加速器,加速器 大部分代码因为硬盘没了,剩下核心功能代码还在,还可以看看仅作参 ...

  2. 用Python和Pygame写游戏-从入门到精通(1)

    From: http://eyehere.net/2011/python-pygame-novice-professional-1/ 博客刚开,打算做一个Pygame的系列,翻译自Will McGug ...

  3. 用Python和Pygame写游戏-从入门到精通

    博客刚开,打算做一个Pygame的系列,翻译自Will McGugan的<Beginning Game Development with Python and Pygame –From Novi ...

  4. python游戏代码示例_用Python和Pygame写游戏-从入门到精通(Sprite篇)

    这又是Pygame教程系列的一个--OVA篇,类似于py2exe篇一样,额外写的,也许不是pygame游戏开发必须的东西,但是知道了绝对大有裨益.因此友情大放送~ 看pygame模块介绍的时候,细心的 ...

  5. PyOpenGL之3D界面详解(一)

    本文转自:http://eyehere.net/2011/learn-opengl-3d-by-pyopengl-1/ 承 从pygame的系列教程里3D部分,本想好好说一下OpenGL的,但是感觉这 ...

  6. Tensorflow2.0数据和部署(二)——基于设备的模型与TensorFlow Lite

    文章目录 一.概述 1.模型存储 2.量化方法 3.模型验证 二.基于安卓的TF模型 1.初始化解释器 2.准备输入 3.调用解释器 4.输出结果 三.基于IOS的TF模型 1.初始化 2.准备输入 ...

  7. 用PyOpenGL叩开3D的心扉——OpenGL全解析(1)

    本文转自:http://eyehere.net/2011/learn-opengl-3d-by-pyopengl-1/ 承 从pygame的系列教程里3D部分,本想好好说一下OpenGL的,但是感觉这 ...

  8. RoboMaster机甲大师比赛入门?我们从STM32开始!

    同步博客地址:从STM32开始的RoboMaster生活:入门篇 项目&教程仓库:-STM32-RoboMaster- 1.0 STM32是什么 1.1 定义 ST + M + 32 = ST ...

  9. 英特尔oneAPI—高斯消元算法并行化

    英特尔oneAPI简介 Intel oneAPI是一个跨行业.开放.基于标准的统一的编程模型,旨在提供一个适用于各类计算架构的统一编程模型和应用程序接口.也就是说,应用程序的开发者只需要开发一次代码, ...

最新文章

  1. 如何阅读JAVA 字节码(一)
  2. ajax调用接口很慢,nodejs 请求接口在高并发下耗时很大,而单个请求非常快
  3. 使用代码生成建立可扩展序列化器(上)
  4. 证券回购市场repo market
  5. python生物数据分析师职业技能_数据分析行业各个职业需要的技能是什么?
  6. java audiorecord_Android 录音实现(AudioRecord)
  7. TSAP(7) : ARIMA模型
  8. NYOJ 214(LIS,二分插入)
  9. 《c语言南开100题》,二级C语言南开100题 免费
  10. 雨人网络E卡通免费上网的方法
  11. 程序员面试被问“你的缺点是什么”,该怎么回答?
  12. google 搜索跳转至yahoo
  13. 怎么得到PreparedStatement查询条数的结果
  14. x264去方块滤波函数解析(二)
  15. 如何用计算机校验信息,支付宝短信校验服务怎么开通?-电脑教程
  16. python 词语频率统计_计算词和词组频率的Python nltk
  17. matlab三相变压器怎么设置,simulink变压器设置
  18. JavaScript---js实现从本地上传图片
  19. 交易、账务系统去Oracle经验
  20. JavaScript专精系列(6)——FileReader 文件读取

热门文章

  1. (一)人工智能与机器语言翻译简介
  2. CI/CD——适合你吗?
  3. 使用C#和ASP.NET Core的PayPal智能按钮的客户端/服务器实现
  4. iphone如何查看wifi密码_怎么在手机和电脑查看已连接的wifi密码
  5. ad中那个快捷键是重复上一部_Excel中的F4快捷键用的好,告别加班没烦恼!
  6. 小程序复制内容至剪贴板
  7. 前端埋点的缺点_【埋点学习埋点质量】埋点的框架设计及其准确性
  8. es java match_java操作elasticsearch实现条件查询(match、multiMatch、term、terms、reange)...
  9. 平安京服务器维护无法发布新内容,决战平安京无法登陆怎么解决 无法登陆原因及解决方案一览_3DM手游...
  10. 复旦大学计算机学院官网,Computer and Information Science