植物大战僵尸7 #
- 子弹类的创建及移动
- 子弹类的碰撞检测及攻击
- 子弹类的存储及加载
子弹类的创建及移动 #
本小节主要介绍创建子弹类PeaBullet()及在屏幕范围内实现子弹往右移动
#7 豌豆子弹类
class PeaBullet(pygame.sprite.Sprite):
def __init__(self,peashooter):
self.live = True
self.image = pygame.image.load('imgs/peabullet.png')
self.damage = 50
self.speed = 10
self.rect = self.image.get_rect()
self.rect.x = peashooter.rect.x + 60
self.rect.y = peashooter.rect.y + 15
#7 在屏幕范围内,实现往右移动
def move_bullet(self):
if self.rect.x < scrrr_width:
self.rect.x += self.speed
else:
self.live = False
def display_peabullet(self):
MainGame.window.blit(self.image,self.rect)
子弹类的碰撞检测及攻击 #
本小节主要介绍子弹碰到僵尸时的攻击触发及功能设计,在子弹类class PeaBullet()中添加函数hit_zombie()
#class PeaBullet(pygame.sprite.Sprite):
#7 新增,子弹与僵尸的碰撞
def hit_zombie(self):
for zombie in MainGame.zombie_list:
if pygame.sprite.collide_rect(self,zombie):
#打中僵尸之后,修改子弹的状态,
self.live = False
#僵尸掉血
zombie.hp -= self.damage
子弹类的存储及加载 #
本小节主要介绍存储所有豌豆子弹的列表和加载所有子弹的方法。在主程序类class MainGame()中添加储存子弹的列表及子弹加载方法。
同时,由于游戏界面需要不断更新,需在主程序类class MainGame()中的开始游戏函数def start_game()中的循环while not GAMEOVER:中添加子弹加载函数self.load_peabullets()。
class MainGame():
#7 存储所有豌豆子弹的列表
peabullet_list = []
#7 加载所有子弹的方法
def load_peabullets(self):
for b in MainGame.peabullet_list:
if b.live:
b.display_peabullet()
b.move_bullet()
#7 调用子弹是否打中僵尸的方法
b.hit_zombie()
else:
MainGame.peabullet_list.remove(b)
#def start_game(self):
while not GAMEOVER:
#7 调用加载所有子弹的方法
self.load_peabullets()
小结 #
本节主要介绍了植物大战游戏中子弹类的创建、移动及攻击触发方式,以及存储和加载