内容正文:
少儿编程课
1
飞机大战6
飞机生命值
3
在之前的版本中,陨石碰到飞机,游戏立马结束,接下来我们为飞机添加生命值
1
首先在初始化飞机的时候,给定血量100
2
当陨石和飞机相碰,飞机扣除20点血量如果血量扣完了,则游戏结束
3
当陨石和飞机相碰,陨石消失,为防止陨石数量减少,在生成一个陨石出来
self.hp = 100
# 检测飞机和陨石之间的碰撞
hits = pygame.sprite.spritecollide(player, all_meteorite, True, pygame.sprite.collide_circle)
for hit in hits:
player.hp ‐= 20
# 如果碰撞,则游戏结束
if player.hp == 0:
running = False
# 检测飞机和陨石之间的碰撞
hits = pygame.sprite.spritecollide(player, all_meteorite, False, pygame.sprite.collide_circle)
for hit in hits:
player.hp -= 20
# 新产生一个陨石并加入两个精灵组
meteorite = Meteorite()
all_sprites.add(meteorite)
all_meteorite.add(meteorite)
# 如果碰撞,则游戏结束
if player.hp == 0:
running = False
简化代码
对于这种重复性出现的代码,我们可以用方法替代重复
3
然后在上述三个对应的地方调用new_meteorite()方法就可以了
# 新产生一个陨石并加入两个精灵组
meteorite = Meteorite()
all_sprites.add(meteorite)
all_meteorite.add(meteorite)
这时,你可能发现了,产生一个新陨石,并把陨石加入到陨石和全部精灵组代码在程序中出现了好几次
# 新产生一个陨石并加入两个精灵组
new_meteorite():
meteorite = Meteorite()
all_sprites.add(meteorite)
all_meteorite.add(meteorite)
1、循环8次,生成8个陨石时
2、子弹打掉陨石时
3、陨石和飞机碰撞的时
2
1
将飞机生命值画到屏幕中
使用之前的draw_text方法,将飞机剩余血量绘制到屏幕左上角
运行程序,效果如下:
2
1
# 绘制生命值
draw_text(screen, 'hp:'+str(player.hp), 18, 30, 10)
爆炸效果
7
爆炸效果的添加
2
爆炸效果也是精灵,不同与子弹等精灵,爆炸精灵不会沿x、y轴运动,它最大的特点就是图片在一直变化,组成帧动画的效果,如我们经常见到的GIF动态图
1
将素材准备好,可以自行选择,这里以蓝色为例
爆炸精灵类的创建
2
将素材存入列表
1
explosion_anim = []
for i in range(9):
img = pygame.image.load('img/picV382_boom_baiYin_00' + str(i) + '.png')
explosion_anim.append(img)
# 爆炸效果
class Explosion(pygame.sprite.Sprite):
def __init__(self, center):
pygame.sprite.Sprite.__init__(self)
# 初始图片为爆炸的第一张图
self.image = explosion_anim[0]
self.rect = self.image.get_rect()
# 指定爆炸的中心点
self.rect.center = center
创建爆炸精灵类,定义初始化方法
3
在初始化方法中定义一个用于表示图片下标的变量
# 当前图片的下标
self.frame = 0
def update(self):
self.frame += 1
if self.frame == len(explosion_anim):
self.kill()
else:
# 更换图片,达到帧动画的效果
self.image = explosi