def update(self, player): # execute if this stage isAlive if self.isAlive: # Thoroughly kill the bullet generated by last stage if self.timer < 10: for i in parameter.getEnemyBulletSprites(): i.kill() # Generate Boss self.generateBoss() # If player has dead in this stage, no bonus if player.rect.top < 0 and self.timer > 100: self.ifBonus = False self.bonus = 0 # Turn of this stage if boss's Hp < 0 or run out of time if self.boss.Hp <= 0: self.isAlive = False self.isDead = True for i in (parameter.getEnemySprites() or parameter.getEnemyBulletSprites()): i.kill() if self.ifBonus: parameter.addPoint(self.bonus) elif self.timer > self.time: self.isAlive = False self.isDead = True for i in (parameter.getEnemySprites() or parameter.getEnemyBulletSprites()): i.kill() # bonus decay by time if self.ifBonus: self.bonus -= int(self.bonus_origin / 4000) self.timer += 1
def kill(self): # Generate new bullet when killed for i in range(self.generateBulletNumber): x = self.deathGenerate["putPattern"][0] y = self.deathGenerate["putPattern"][1] enemyBullet = EnemyBullet(name = "enemyBullet", \ image = self.deathGenerateImage, \ bulletRadius = 1, \ bulletDamage = None, \ putBulletPattern = (x + self.rect.center[0], \ y + self.rect.center[1]), \ shootBulletPattern = self.deathGenerate["shootPattern"]((x, y))) parameter.getAllSprites().add(enemyBullet) parameter.getEnemyBulletSprites().add(enemyBullet) super().kill()
def shoot(self): now = parameter.getTimer() for j in range(len(self.enemyBulletImage)): if now - self.generateTime > self.putBulletPattern[j]( now - self.generateTime)["delateTime"]: if now - self.lastShootingTime[j] > self.putBulletPattern[j]( now - self.generateTime)["intermediateTime"]: sound.bullet_SE_list[2].play() for i in range(self.putBulletPattern[j](now)["numbers"]): x = self.putBulletPattern[j](now)["position"][i][0] y = self.putBulletPattern[j](now)["position"][i][1] if "tracking" in self.putBulletPattern[j](now).keys(): enemyBullet = EnemyBullet_tracking(name = "enemyBullet", \ image = self.enemyBulletImage[j], \ bulletRadius = 1, \ bulletDamage = None, \ putBulletPattern = (x + self.rect.center[0], \ y + self.rect.center[1]), \ shootBulletPattern = self.shootBulletPattern[j]((x, y))) parameter.getAllSprites().add(enemyBullet) parameter.getEnemyBulletSprites().add(enemyBullet) elif "deathGenerate" in self.putBulletPattern[j]( now).keys(): enemyBullet = EnemyBullet_deathGenerate(name = "enemyBullet", \ image = self.enemyBulletImage[j], \ bulletRadius = 1, \ bulletDamage = None, \ putBulletPattern = (x + self.rect.center[0], \ y + self.rect.center[1]), \ shootBulletPattern = self.shootBulletPattern[j]((x, y)), \ death = self.putBulletPattern[j](now)["generateBullet"]) parameter.getAllSprites().add(enemyBullet) parameter.getEnemyBulletSprites().add(enemyBullet) elif "decay" in self.putBulletPattern[j](now).keys(): enemyBullet = EnemyBullet_decay(name = "enemyBullet", \ image = self.enemyBulletImage[j], \ bulletRadius = 1, \ bulletDamage = None, \ putBulletPattern = (x + self.rect.center[0], \ y + self.rect.center[1]), \ shootBulletPattern = self.shootBulletPattern[j]((x, y))) parameter.getAllSprites().add(enemyBullet) parameter.getEnemyBulletSprites().add(enemyBullet) else: enemyBullet = EnemyBullet(name = "enemyBullet", \ image = self.enemyBulletImage[j], \ bulletRadius = 1, \ bulletDamage = None, \ putBulletPattern = (x + self.rect.center[0], \ y + self.rect.center[1]), \ shootBulletPattern = self.shootBulletPattern[j]((x, y))) parameter.getAllSprites().add(enemyBullet) parameter.getEnemyBulletSprites().add(enemyBullet) self.lastShootingTime[j] = now
def hide(self): # Hide player for eb in parameter.getEnemyBulletSprites(): eb.kill() self.hidden = True self.hiddenTime = parameter.getTimer() self.rect.center = (parameter.getGamearea().centerx, parameter.getGamearea().top - 200) # Decrease player power if self.power > 4: self.power -= 4 else: self.power = 0
def update(self): now = parameter.getTimer() # Hide player for a while when player died if self.hidden and now - self.hiddenTime < 30: for eb in parameter.getEnemyBulletSprites(): eb.kill() elif self.hidden and now - self.hiddenTime == 30: self.radius = 0 self.rect.center = (parameter.getGamearea().centerx, parameter.getGamearea().bottom - 50) elif self.hidden and now - self.hiddenTime < 120: self.radius = 0 if ((now - self.hiddenTime) % 6) in [0, 1, 2]: transparentImg = self.image_origin.copy() transparentImg.set_alpha(64) self.image = transparentImg else: self.image = self.image_origin else: self.image = self.image_origin self.radius = int(self.collisionBox.rect.width / 2) self.hidden = False # Key control keystate = pygame.key.get_pressed() if keystate[pygame.K_LSHIFT]: speed = self.playerSlowSpeed else: speed = self.playerFastSpeed if keystate[pygame. K_LEFT] and self.rect.left > parameter.getGamearea().left: self.rect.move_ip(-1 * speed, 0) if self.rect.left < parameter.getGamearea().left: self.rect.left = parameter.getGamearea().left if keystate[ pygame. K_RIGHT] and self.rect.right < parameter.getGamearea().right: self.rect.move_ip(speed, 0) if self.rect.right > parameter.getGamearea().right: self.rect.right = parameter.getGamearea().right if keystate[ pygame.K_UP] and self.rect.top > parameter.getGamearea().top: self.rect.move_ip(0, -1 * speed) if self.rect.top < parameter.getGamearea().top: self.rect.top = parameter.getGamearea().top if keystate[ pygame. K_DOWN] and self.rect.bottom < parameter.getGamearea().bottom: self.rect.move_ip(0, speed) if self.rect.bottom > parameter.getGamearea().bottom: self.rect.bottom = parameter.getGamearea().bottom if keystate[pygame.K_z]: self.shoot() # Stick player collision box to the player center self.collisionBox.rect.center = self.rect.center # self.collisionBox.rotate() # Return player position parameter.returnPlayerPosition(self.rect.center)
for e in parameter.getEnemySprites(): for pb in parameter.getPlayerBulletSprites(): if pygame.sprite.collide_rect(e, pb): pb.kill() e.Hp -= pb.damage parameter.addPoint(100) if e.Hp < 0: sound.enemy_dead_SE.play() generateItem(e, e.dropItem[0], "power", powerItemImg) generateItem(e, e.dropItem[1], "point", pointItemImg) e.kill() parameter.addPoint(10000) # Enemy_Bullet v.s. Player for eb in parameter.getEnemyBulletSprites(): if eb.radius > 0: if pygame.sprite.collide_circle(eb, player): sound.player_dead_SE.play() player.hide() player.lifes -= 1 # Point_Item v.s. Player for p in parameter.getItemSprites(): if pygame.sprite.collide_circle(p, player): sound.pick_item_SE.play() if p.name == "point": parameter.addPoint(100000) if p.name == "power": player.power += 1 if player.power > 48: