コード例 #1
0
ファイル: Player.py プロジェクト: sakusaku3939/SyobonAction
    def death_animation(self):
        if self.player.isDeath:
            # 初期化
            if self._death_init:
                self._death_init = False

                Sound.stop_SE()
                Sound.stop_BGM()
                Sound.play_SE('death')

                self.player.x_speed = 0.0
                SpritePlayer.scroll = 0

                self._img_number = 3
                self._jump_time = 0
                self.player.y_speed = self.JUMP_SPEED

            self._jump_time += 1

            # 20フレーム後に落下
            if self._jump_time > 20:
                self.player.y_speed += SpritePlayer.FALL_ACCELERATION
                self.player.y += self.player.y_speed

            # 時間が経過したら戻って残機表示
            if self._jump_time >= 190:
                return True

            self.bg_update()
            if not self._inGoal_tower:
                self.player.update(self._direction(self._img_number))

        return False
コード例 #2
0
ファイル: Player.py プロジェクト: sakusaku3939/SyobonAction
    def goal_animation(self):
        if not (self.player.isDeath or self.player.goal is None):
            # 初期化
            if self._goal_init:
                self._goal_init = False
                Sound.stop_BGM()
                Sound.play_SE('goal')
                self._goal_count = 0

                # プレイヤー座標のセット
                self.player.x_speed = self.player.y_speed = 0
                self.player.x = self.player.goal.rect.left - self.player.width + 7

                # ポール下の地面の座標を格納
                goal_block_list = [
                    block for block in Stage.block_object_list
                    if block.data == 7
                ]
                for block in goal_block_list:
                    if block.rect.left == self.player.goal.rect.left - 3:
                        self._goal_scene_y = block.rect.top - 1

            # 一定の時間が経過したら次の面へ
            self._goal_count += 1
            if self._goal_count > 400:
                return True

            # ゴール塔に入った場合
            if self._inGoal_tower:
                self.bg_update()

            # 強制移動中
            elif self.goal_isMove:
                self.player.x_speed = 1.5

            # ポール掴み中
            else:
                # 一定の時間が経過したら移動モード切り替え
                if self._goal_count > 100 and self._goal_scene_y != 500:
                    self.goal_isMove = True
                    self._goal_count = 0

                # 地面に着いたらそのまま停止
                if not self.player.rect.bottom > self._goal_scene_y:
                    self.player.y += 3

                    # 画面外に出たら死
                    if self.player.y > 450:
                        self.player.isDeath = True

                self.bg_update()
                self.player.update(self.player.img_right[2])
        return False
コード例 #3
0
ファイル: Player.py プロジェクト: sakusaku3939/SyobonAction
    def block_animation(self, direction='', block=None):
        def add_block(function):
            self.item_animation_list.append(function)

        # 近づくとアニメーション開始
        if block is None:
            for block in Stage.block_object_list:
                # ジャンプするとビームを放つ
                if block.data == 9.3 and not block.isBeam and not self.player.isGrounding:
                    if block.rect.left - self.player.rect.left < 82:
                        if block.y - self.player.y > -10:
                            block.isHide = False
                            block.isBeam = True
                            add_block(Block.Beam(block))
                            Text.set(self.screen,
                                     'ビーー',
                                     sprite=block,
                                     tweak_x=10)

                # 近づくと落ちるブロック
                if block.data == 1.3 and not block.isAnimation:
                    if block.rect.left - self.player.rect.left < 0:
                        if block.rect.bottom - self.player.rect.bottom < 0:
                            add_block(Block.NearFall(block))

                # 近づくと敵出現イベント発生
                if block.data == 39 and not block.isAnimation:
                    if block.rect.left - self.player.rect.left < 25:
                        if self.player.rect.left - block.rect.left < 40:
                            add_block(Block.EventEnemy(block))

        # 当たるとアニメーション開始
        else:
            # 壊れるブロック
            if block.name == 'block1':
                # 近づくと落ちるブロックの当たり判定
                if block.data == 1.3 and block.isAnimation and direction == 'TOP_BLOCK':
                    self.player.isDeath = True

                if direction == 'TOP':
                    # 叩くと壊れる
                    if block.data == 1:
                        add_block(Block.Break(self.screen, block))

                    # 叩くと大量のコインが出る
                    if block.data == 1.6:
                        add_block(Block.Coin(self.screen, block, isLot=True))

                    # 叩くとPスイッチ
                    if block.data == 2.2:
                        Sound.play_SE('brockkinoko')

                        # ブロックデータの置き換え
                        block.name = 'block3'
                        block.data = 5
                        block.image = LoadImage.image_list[block.name]

                        # Pスイッチを表示
                        for p in Stage.block_object_list:
                            if p.data == 2.2 and block.x == p.x:
                                p.isHide = False

            # はてなブロック
            if block.name == 'block2':
                # 叩くとコイン
                if direction == 'TOP' and block.data == 3:
                    add_block(Block.Coin(self.screen, block))

                # 叩けないブロック
                if direction == 'TOP_BLOCK' and block.data == 3.1 and self.player.y_speed < 0:
                    block.rect.bottom = self.player.rect.top - 10

            # 隠しブロック
            if block.name == 'block3' and direction == 'TOP' and block.isHide:
                block.isHide = False

                # 叩くとコイン
                if block.data in [5, 5.1]:
                    add_block(Block.Coin(self.screen, block))

            # 針
            if block.name == 'block7' and direction == 'TOP':
                self.player.isDeath = True
                Text.set(self.screen, '刺さった!!', sprite=self.player)

            # 叩くアニメーション
            if direction == 'TOP':
                # 赤キノコ
                if block.data in [1.7, 3.2, 5.2]:
                    add_block(Block.Kinoko(self.screen, block))

                # 毒キノコ
                if block.data in [1.9, 3.4, 5.4]:
                    add_block(Block.PoisonKinoko(self.screen, block))

                # 大量の毒キノコ
                if block.data in [3.5, 5.5]:
                    add_block(
                        Block.PoisonKinoko(self.screen, block, isLot=True))

                # まるい敵
                if block.data in [2.3, 3.8, 5.8]:
                    add_block(Block.Enemy(self.screen, block, 'enemy'))

                # 甲羅敵
                if block.data in [2.4, 3.9, 5.9]:
                    add_block(
                        Block.Enemy(self.screen, block, 'koura1', tweak=10))

                # スター
                if block.data in [2.1, 3.7, 5.7]:
                    add_block(Block.Star(self.screen, block))

            # 乗ると壊れるブロック
            if direction == 'BOTTOM' and block.data in [1.4, 5.1]:
                add_block(Block.Break(self.screen, block))
                self.jump_disable_list.append(block)

            # コイン
            if block.name == 'item1':
                Sound.play_SE('coin')
                block.remove()
                Stage.block_object_list.remove(block)

            # トゲを生やす
            if block.data in [1.1, 7.1, 8.3]:
                block.isThorns = True
                self.player.isDeath = True
                Text.set(self.screen, 'シャキーン', sprite=block)

            # Pスイッチ
            if direction == 'BOTTOM' and block.name == 'block39' and not block.isHide:
                Sound.play_SE('Pswitch')
                Sound.stop_BGM()
                block.isHide = True
                self.jump_disable_list.append(block)

                # 全てコインに置き換え
                for b in Stage.block_object_list:
                    b.name = 'item1'
                    b.data = 25
                    b.image = LoadImage.image_list[b.name]

            # 土管に入る
            if block.name == 'dokan1':
                # 上から入る場合
                if direction == 'BOTTOM':
                    if block.data in [
                            20.2, 20.3, 20.5
                    ] and block.rect.left + 25 < self.player.rect.right - 5:
                        if block.rect.right - 25 > self.player.rect.left + 6 and pygame.key.get_pressed(
                        )[K_DOWN]:
                            self.player.dive_dokan = block

                # 横からはいる場合
                if direction == 'SIDE' and block.data in [
                        20.6, 20.8
                ] and self.player.isGrounding:
                    pass

            # うめぇ
            if block.data == 19.2:
                self.player.isDeath = True
                block.name = 'cloud3'
                block.image = LoadImage.image_list[block.name]
                Text.set(self.screen, 'うめぇ!!', sprite=block)

            # 透明のうめぇ
            if block.data == 19.3:
                self.player.isDeath = True
                block.isHide = False
                Text.set(self.screen, 'うめぇ!!', sprite=block)

            # 乗ると落ちる足場ブロック
            if direction == 'BOTTOM' and block.data == 8.1 and not block.isAnimation:
                add_block(Block.RideFall())

            # ビームの当たり判定
            if block.name == 'beam' and not block.isHide and self.player.y + self.player.height > block.y + 25:
                self.player.isDeath = True

            # 中間地点
            if block.name == 'halfway':
                SpritePlayer.initial_x = 210
                SpritePlayer.initial_y = block.y
                SpritePlayer.initial_scroll_sum = block.x - 210

                block.remove()
                Stage.block_object_list.remove(block)

            # ゴールポール
            if block.name == 'goal_pole':
                if block.data == 9.1 and not self.goal_isMove:
                    self.player.goal = block

            # ゴール塔
            if block.name == 'end' and self.goal_isMove:
                start_x = block.x - SpritePlayer.scroll_sum + 60
                start_y = block.rect.top + 45
                end_x = block.width - 80
                end_y = block.height - 45
                block_rect = Rect(start_x, start_y, end_x, end_y)
                player_rect = Rect(self.player.x, self.player.y,
                                   self.player.width, self.player.height)

                # ゴール塔の中に入る
                if player_rect.colliderect(block_rect):
                    self._inGoal_tower = True
                    self._goal_init = False
                    self.goal_isMove = False