add ice bullet function

zhangcongyu_branch
marblexu 6 years ago
parent 0385507196
commit 21c110ca73

@ -5,7 +5,7 @@ from .. import tool
from .. import constants as c from .. import constants as c
class Bullet(pg.sprite.Sprite): class Bullet(pg.sprite.Sprite):
def __init__(self, x, y, name, damage): def __init__(self, x, y, name, damage, ice):
pg.sprite.Sprite.__init__(self) pg.sprite.Sprite.__init__(self)
self.name = name self.name = name
@ -18,6 +18,7 @@ class Bullet(pg.sprite.Sprite):
self.rect.y = y self.rect.y = y
self.x_vel = 4 self.x_vel = 4
self.damage = damage self.damage = damage
self.ice = ice
self.state = c.FLY self.state = c.FLY
self.current_time = 0 self.current_time = 0
@ -182,7 +183,7 @@ class PeaShooter(Plant):
def attacking(self): def attacking(self):
if (self.current_time - self.shoot_timer) > 2000: if (self.current_time - self.shoot_timer) > 2000:
self.bullet_group.add(Bullet(self.rect.right, self.rect.y, c.BULLET_PEA, c.BULLET_DAMAGE_NORMAL)) self.bullet_group.add(Bullet(self.rect.right, self.rect.y, c.BULLET_PEA, c.BULLET_DAMAGE_NORMAL, False))
self.shoot_timer = self.current_time self.shoot_timer = self.current_time
def setAttack(self): def setAttack(self):
@ -195,7 +196,7 @@ class SnowPeaShooter(Plant):
def attacking(self): def attacking(self):
if (self.current_time - self.shoot_timer) > 2000: if (self.current_time - self.shoot_timer) > 2000:
self.bullet_group.add(Bullet(self.rect.right, self.rect.y, c.BULLET_PEA_ICE, c.BULLET_DAMAGE_NORMAL)) self.bullet_group.add(Bullet(self.rect.right, self.rect.y, c.BULLET_PEA_ICE, c.BULLET_DAMAGE_NORMAL, True))
self.shoot_timer = self.current_time self.shoot_timer = self.current_time
def setAttack(self): def setAttack(self):

@ -31,6 +31,8 @@ class Zombie(pg.sprite.Sprite):
self.attack_timer = 0 self.attack_timer = 0
self.state = c.WALK self.state = c.WALK
self.animate_interval = 150 self.animate_interval = 150
self.ice_slow_ratio = 1
self.ice_slow_timer = 0
def loadFrames(self, frames, name, image_x): def loadFrames(self, frames, name, image_x):
frame_list = tool.GFX[name] frame_list = tool.GFX[name]
@ -44,6 +46,7 @@ class Zombie(pg.sprite.Sprite):
def update(self, game_info): def update(self, game_info):
self.current_time = game_info[c.CURRENT_TIME] self.current_time = game_info[c.CURRENT_TIME]
self.handleState() self.handleState()
self.updateIceSlow()
self.animation() self.animation()
def handleState(self): def handleState(self):
@ -64,7 +67,7 @@ class Zombie(pg.sprite.Sprite):
self.changeFrames(self.walk_frames) self.changeFrames(self.walk_frames)
self.helmet = False self.helmet = False
if (self.current_time - self.walk_timer) > c.ZOMBIE_WALK_INTERVAL: if (self.current_time - self.walk_timer) > (c.ZOMBIE_WALK_INTERVAL * self.ice_slow_ratio):
self.walk_timer = self.current_time self.walk_timer = self.current_time
self.rect.x -= 1 self.rect.x -= 1
@ -74,7 +77,7 @@ class Zombie(pg.sprite.Sprite):
elif self.health <= c.LOSTHEAD_HEALTH and not self.losHead: elif self.health <= c.LOSTHEAD_HEALTH and not self.losHead:
self.changeFrames(self.losthead_attack_frames) self.changeFrames(self.losthead_attack_frames)
self.setLostHead() self.setLostHead()
if (self.current_time - self.attack_timer) > c.ATTACK_INTERVAL: if (self.current_time - self.attack_timer) > (c.ATTACK_INTERVAL * self.ice_slow_ratio):
self.plant.setDamage(self.damage) self.plant.setDamage(self.damage)
self.attack_timer = self.current_time self.attack_timer = self.current_time
@ -104,7 +107,7 @@ class Zombie(pg.sprite.Sprite):
self.rect.centerx = centerx self.rect.centerx = centerx
def animation(self): def animation(self):
if (self.current_time - self.animate_timer) > self.animate_interval: if (self.current_time - self.animate_timer) > (self.animate_interval * self.ice_slow_ratio):
self.frame_index += 1 self.frame_index += 1
if self.frame_index >= self.frame_num: if self.frame_index >= self.frame_num:
if self.state == c.DIE: if self.state == c.DIE:
@ -115,8 +118,20 @@ class Zombie(pg.sprite.Sprite):
self.image = self.frames[self.frame_index] self.image = self.frames[self.frame_index]
def setDamage(self, damage): def setIceSlow(self):
'''when get a ice bullet damage, slow the attack or walk speed of the zombie'''
self.ice_slow_timer = self.current_time
self.ice_slow_ratio = 2
def updateIceSlow(self):
if self.ice_slow_ratio > 1:
if (self.current_time - self.ice_slow_timer) > c.ICE_SLOW_TIME:
self.ice_slow_ratio = 1
def setDamage(self, damage, ice):
self.health -= damage self.health -= damage
if ice:
self.setIceSlow()
def setWalk(self): def setWalk(self):
self.state = c.WALK self.state = c.WALK

@ -206,7 +206,7 @@ class Level(tool.State):
if bullet.state == c.FLY: if bullet.state == c.FLY:
zombie = pg.sprite.spritecollideany(bullet, self.zombie_groups[i], collided_func) zombie = pg.sprite.spritecollideany(bullet, self.zombie_groups[i], collided_func)
if zombie and zombie.state != c.DIE: if zombie and zombie.state != c.DIE:
zombie.setDamage(bullet.damage) zombie.setDamage(bullet.damage, bullet.ice)
bullet.setExplode() bullet.setExplode()
def checkZombieCollisions(self): def checkZombieCollisions(self):

Loading…
Cancel
Save