見出し画像

Lesson10 敵をクローンで増やそう

割引あり

前回つくった敵キャラが

勝手に増えたら

ちょっとうざいですよね?

今回はそれをやってみます。


ちなみにScratchプログラムでも「クローンする」というコマンドがあります。それを実現しようと思っています☆


stage1.py

#### stage1.py ####

#########################################################################################
#### ライブラリの読み込み ####

#### メインプログラム ####
def main(hp,mp,idx):

    #####################################################################################
    #### 初期設定 ####

    
    clone_enemies = pygame.sprite.Group()

    #####################################################################################
    #### プレイヤーのスプライト ####


    #####################################################################################
    #### コマンドボタンのスプライト ####

 
    #####################################################################################
    #### 壁のスプライト ####


    #####################################################################################
    #### ザコ敵のスプライト ####
    # 省略 #
  blue_enemy_params = {
     # 省略 #
        'speed_x': 0,
     # 省略 #
        }
    # 省略 #
    #####################################################################################
    #### ザコ敵のクローンスプライト ####
    del_time = 5
    def clone(hp,frame_count,clone_enemies):
        copy_enemy = blue_enemy
        if frame_count % 45 == 0 and copy_enemy.enemy_hp > 0:
            # 新たなパラメータ
            clone_enemy = Enemy(      
                            x=copy_enemy.x,
                            y=copy_enemy.y,
                            image=copy_enemy.original_image,
                            image_bomb=copy_enemy.image_bomb,
                            speed_x=-10,
                            speed_y=0,
                            rotation_speed=copy_enemy.rotation_speed,
                            start_angle=copy_enemy.start_angle,
                            atk = copy_enemy.atk,
                            enemy_hp = 1,
                            size_multiplier=copy_enemy.size)
            clone_enemy.creation_frame = frame_count
            clone_enemies.add(clone_enemy)
        for clone_enemy in clone_enemies:
            clone_enemy.update(player_turn)
            clone_enemy.draw(screen)
            attack_enemy = clone_enemy
            if not player_turn:
                hp =player.take_damage(hp,damage_base,attack_enemy)
            if frame_count - clone_enemy.creation_frame >= del_time * 30:
                clone_enemies.remove(clone_enemy)
        return hp
    #####################################################################################
    #### ゲームループ ####
    while True:
        screen.fill((0, 0, 0))
        #### ステージ共通の要素 ####

        command_button()
        square_structure()


        #### ステージごとに変える要素 ####
        hp = single_enemy(hp)
        hp = clone(hp,frame_count,clone_enemies)
        first_player()

stage1.py に追記できましたか?

それでは実行してみましょう!

>python main.py

実行結果1: UFOが自己増殖します

ちなみにスペースキーを押すとコマンド選択に移りますが、その間は敵キャラたちはちゃん停止してくれます。

おりこうさんですね。

実行結果2: 敵キャラたちの動きが止まります。


敵キャラが自己増殖をしますが、それぞれに当たり判定をつけているのでしっかりダメージを受けるようになっています。

それでは解説に移ります。Ⅹ(旧Twitter)で拡散し無料でお進みください★


ここから先は

8,273字

この記事が気に入ったらチップで応援してみませんか?