Beispiel #1
0
    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
Beispiel #2
0
 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()
Beispiel #3
0
 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
Beispiel #4
0
 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
Beispiel #5
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: