专栏首页菩提树下的杨过pygame-KidsCanCode系列jumpy-part15-PowerUp加速器

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

大致就是轮播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)

其中常量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         ...

当然,还可以参考上节的方法,加上音效处理,就不再赘述了。代码可参考:https://github.com/yjmyzz/kids-can-code/tree/master/part_15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • pygame-KidsCanCode系列jumpy-part4-弹跳

    终于要到弹跳环节了,向上弹跳其实很简单,按下空格触发时,只要把y轴速度给一个向上的速度即可。

    菩提树下的杨过
  • pygame-KidsCanCode系列jumpy-part6-主角挂掉重新开始

    游戏的虚拟世界中,最让人happy的一个因素就是主角挂了,而且重来,只要restart就行了,不象现实中人的生命只有1次。回顾上节的效果,如果方块向下落时,挡板...

    菩提树下的杨过
  • pygame-KidsCanCode系列jumpy-part3-重力及碰撞检测

    这个游戏叫jumpy,大致玩法就是模拟超级玛丽一样,可以不停在各个档板上跳动,同时受到重力的作用,会向下掉,如果落下时,没有站在档板上,就挂了。

    菩提树下的杨过
  • PyQt5--QFileDiaglog

    py3study
  • Python应用03 使用PyQT制作视频播放器

    最近研究了Python的两个GUI包,Tkinter和PyQT。这两个GUI包的底层分别是Tcl/Tk和QT。相比之下,我觉得PyQT使用起来更加方便,功能也相...

    Vamei
  • html5点击出现燃放烟花特效

    今天我发现了一个非常好的html特效,是由HTML5来实现的,效果非常绚丽。效果如下:

    无邪Z
  • 生成对抗网络(GAN)系列:WGAN与金融时序(附代码)

    过拟合是我们试图将机器学习技术应用于时间序列时遇到的问题之一。出现这个问题是因为我们使用我们所知道的唯一时间序列路径来训练我们的模型:已实现的历史。

    量化投资与机器学习微信公众号
  • 静态html提取正文的API和开源算法

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    周小董
  • pygame-KidsCanCode系列jumpy-part3-重力及碰撞检测

    这个游戏叫jumpy,大致玩法就是模拟超级玛丽一样,可以不停在各个档板上跳动,同时受到重力的作用,会向下掉,如果落下时,没有站在档板上,就挂了。

    菩提树下的杨过
  • pygame-KidsCanCode系列jumpy-part4-弹跳

    终于要到弹跳环节了,向上弹跳其实很简单,按下空格触发时,只要把y轴速度给一个向上的速度即可。

    菩提树下的杨过

扫码关注云+社区

领取腾讯云代金券