見出し画像

Lesson21 武器を変更しよう

前回、アイテムを使用できるようになりました。

次は「ぶき」コマンドを使用できるようにします。

前回と同じように、関数を新設して呼び出すだけです。

ではやっていきましょう!!



stage1.py

#### stage1.py ####

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

############################################################################################
#### メインプログラム ####
def main(hp,mp,idx,weapons,itemBag,special):                # 追加済み

    ########################################################################################
    #### コマンドメニュー ####

    ## 省略 ##

    ########################################################################################
    #### 武器変更関数 ####
    def change_weapons(item_name,weapon_param,damage):
        if item_name == "Weapon1":
            print("Weapon_NO.1")
            weapon_param = [10,20,10,]
            damage = 1
        elif item_name == "Weapon2":
            print("Weapon_NO.2")
            weapon_param = [40,10,10,]
            damage = 0.4
        elif item_name == "Weapon3":
            print("Weapon_NO.3")
            weapon_param = [20,40,5,]
            damage = 1.5
        elif item_name == "Weapon4":
            print("Weapon_NO.4")
            weapon_param = [10,80,1,]
            damage = 5
        return weapon_param ,damage

    ########################################################################################
    #### ゲームループ ####
    while True:
        
        ## 省略 ##

        #### キー操作設定 ####
        # 単押し
        for event in pygame.event.get():
            
            ## 省略 ##

            if event.type == pygame.KEYDOWN:
                
                ## 省略 ##

                if event.key == pygame.K_SPACE:
                    if player_turn:
                        if command_mode == False:                                       # 追加済み
                            
                            ## 省略 ##

                        else:
                            if selected_item_name == "back":                            # 追加済み
                                selected_item = 1                                       # 追加済み
                                command_mode = False                                    # 追加済み

                            else:
                                if selected_button == 1:                                # 追加済み
                                    print("selected_button = 1 , selected_item_name = ",selected_item_name) 
                                    weapon_param ,damage = change_weapons(selected_item_name,weapon_param,damage)
                                elif selected_button == 2:                              # 追加済み
                                    print("selected_button = 2 , selected_item_name = ",selected_item_name) 
                                    hp,mp,selected_item_name,damage = use_item(hp,mp,selected_item_name,damage) # 追加済み
                                    selected_item = 1                                   # 追加済み
                                elif selected_button == 3:                              # 追加済み
                                    print("selected_button = 3 , selected_item_name = ",selected_item_name)                                    
                                command_mode = False                                    # 追加済み
                                player_turn = False                                     # 追加済み
                    else:
                        player_turn = True                                              # 追加済み

貼り付けられたら下記を実行してください。

>python main.py


実行結果1: 「Weapon1」をスペースキーで選択
実行結果2: 通常武器なので特に変化なし
実行結果3: 「Weapon2」を選択すると
実行結果4: 小さくて、速い!
実行結果5: 「Weapon3」を選択
実行結果6: 大きくて、そこそこのスピード
実行結果7: 「Weapon4」を選択
実行結果8:で・・・でかい!

攻撃のスタイルが変わっています。
速い攻撃は何発も当てないといけないけど、快適に進められます。
遅い攻撃は一発のパワーがあります。当たれば即爆発レベルです。

しかもちょっとわかりにくいのですが、弾丸の装填速度というか、最大存在弾数も変わっているので
でかいやつは連射できません。

戦略、敵種によって攻撃方法を切り替える。

なんかゲームっぽさをさらに追加できた気がします。


それでは解説に移ります。
今回は文字数も少ないので無料公開しています。


stage1.py

    ########################################################################################
    #### 武器変更関数 ####
    def change_weapons(item_name,weapon_param,damage):          # 武器を変更
        if item_name == "Weapon1":                              # 武器1を選択したら
            print("Weapon_NO.1")                                # ターミナルに表示
            weapon_param = [10,20,10,]                          # 武器パラメータを変更
            damage = 1                                          # 攻撃力変更
        elif item_name == "Weapon2":                            # 武器2を選択したら
            print("Weapon_NO.2")                                # ターミナルに表示
            weapon_param = [40,10,10,]                          # 武器パラメータを変更
            damage = 0.4                                        # 攻撃力変更
        elif item_name == "Weapon3":                            # 武器3を選択したら
            print("Weapon_NO.3")                                # ターミナルに表示
            weapon_param = [20,40,5,]                           # 武器パラメータを変更
            damage = 1.5                                        # 攻撃力変更
        elif item_name == "Weapon4":                            # 武器4を選択したら
            print("Weapon_NO.4")                                # ターミナルに表示
            weapon_param = [10,80,1,]                           # 武器パラメータを変更
            damage = 5                                          # 攻撃力変更
        return weapon_param ,damage

    ########################################################################################

関数 change_weapons() の中に、「item_name,weapon_param,damage」の3つの変数を入力します。
ここでの item_name は武器名が入っています。武器名に合わせて、 weapon_param で武器の弾速と見た目と最大装填数を変更、 damage で攻撃力を変更しています。
変更した値を、return weapon_param ,damage ここで返しています。

                            else:
                                if selected_button == 1:                                # 追加済み
                                    print("selected_button = 1 , selected_item_name = ",selected_item_name) 
                                    weapon_param ,damage = change_weapons(selected_item_name,weapon_param,damage)   # 武器変更関数
                                elif selected_button == 2:                              # 追加済み
                                    print("selected_button = 2 , selected_item_name = ",selected_item_name) 
                                    hp,mp,selected_item_name,damage = use_item(hp,mp,selected_item_name,damage) # 追加済み
                                    selected_item = 1                                   # 追加済み
                                elif selected_button == 3:                              # 追加済み
                                    print("selected_button = 3 , selected_item_name = ",selected_item_name)                                    
                                command_mode = False                                    # 追加済み
                                player_turn = False                                     # 追加済み
                   

前回同様、アイテム選択メニューで selected_button == 1 の場合、スペースキーを押すと関数が呼び出されます。

ちなみに weapon_param は関数 clone_bullet() の中で弾丸生成時に使っています。
damage は関数 bullet_enemy_collisions() の中から呼び出す Enemy クラスの attack_damage() でダメージ計算をしています。
どちらも「弾丸のスプライト」ゾーンにあるので、確認してみてください。


こうして武器による攻撃のパターンが増やせました。
次回は「とくしゅ」コマンドを実装します。お楽しみに★


解説付きコード

stage1.py

#### stage1.py ####

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

############################################################################################
#### メインプログラム ####
def main(hp,mp,idx,weapons,itemBag,special):                # 追加済み

    ########################################################################################
    #### コマンドメニュー ####

    ## 省略 ##

    ########################################################################################
    #### 武器変更関数 ####
    def change_weapons(item_name,weapon_param,damage):          # 武器を変更
        if item_name == "Weapon1":                              # 武器1を選択したら
            print("Weapon_NO.1")                                # ターミナルに表示
            weapon_param = [10,20,10,]                          # 武器パラメータを変更
            damage = 1                                          # 攻撃力変更
        elif item_name == "Weapon2":                            # 武器2を選択したら
            print("Weapon_NO.2")                                # ターミナルに表示
            weapon_param = [40,10,10,]                          # 武器パラメータを変更
            damage = 0.4                                        # 攻撃力変更
        elif item_name == "Weapon3":                            # 武器3を選択したら
            print("Weapon_NO.3")                                # ターミナルに表示
            weapon_param = [20,40,5,]                           # 武器パラメータを変更
            damage = 1.5                                        # 攻撃力変更
        elif item_name == "Weapon4":                            # 武器4を選択したら
            print("Weapon_NO.4")                                # ターミナルに表示
            weapon_param = [10,80,1,]                           # 武器パラメータを変更
            damage = 5                                          # 攻撃力変更
        return weapon_param ,damage

    ########################################################################################
    #### ゲームループ ####
    while True:
        
        ## 省略 ##

        #### キー操作設定 ####
        # 単押し
        for event in pygame.event.get():
            
            ## 省略 ##

            if event.type == pygame.KEYDOWN:
                
                ## 省略 ##

                if event.key == pygame.K_SPACE:
                    if player_turn:
                        if command_mode == False:                                     # 追加済み
                            
                            ## 省略 ##

                        else:
                            if selected_item_name == "back":                            # 追加済み
                                selected_item = 1                                       # 追加済み
                                command_mode = False                                    # 追加済み

                            else:
                                if selected_button == 1:                                # 追加済み
                                    print("selected_button = 1 , selected_item_name = ",selected_item_name) 
                                    weapon_param ,damage = change_weapons(selected_item_name,weapon_param,damage)   # 武器変更関数
                                elif selected_button == 2:                              # 追加済み
                                    print("selected_button = 2 , selected_item_name = ",selected_item_name) 
                                    hp,mp,selected_item_name,damage = use_item(hp,mp,selected_item_name,damage) # 追加済み
                                    selected_item = 1                                   # 追加済み
                                elif selected_button == 3:                              # 追加済み
                                    print("selected_button = 3 , selected_item_name = ",selected_item_name)                                    
                                command_mode = False                                    # 追加済み
                                player_turn = False                                     # 追加済み
                    else:
                        player_turn = True                                              # 追加済み

この記事が気に入ったらサポートをしてみませんか?