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
攻撃のスタイルが変わっています。
速い攻撃は何発も当てないといけないけど、快適に進められます。
遅い攻撃は一発のパワーがあります。当たれば即爆発レベルです。
しかもちょっとわかりにくいのですが、弾丸の装填速度というか、最大存在弾数も変わっているので
でかいやつは連射できません。
戦略、敵種によって攻撃方法を切り替える。
なんかゲームっぽさをさらに追加できた気がします。
それでは解説に移ります。
今回は文字数も少ないので無料公開しています。
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 # 追加済み