ログアウト中 ログイン

学習パッケージを選択

【Python】簡易RPG作成講座 第2章2.2節「勝敗判定の作成」




現在の見出し:2.2節:勝敗判定の作成

見出し一覧

  • 2.2節:勝敗判定の作成
  • - 比較演算子による勝敗条件判定機能の実装
  • - 論理演算子による複合戦闘状態判定機能の実装

【PR】『Python』を学べる企業・個人向けのプログラミングコース

比較演算子による勝敗条件判定機能の実装

前節(第2章2.1節)で作成したダメージ計算システムを基盤として、戦闘の勝敗を判定する機能を実装します。比較演算子<=を使ってHP0以下の状態を検出し、ifif文はプログラムで条件分岐を行うための命令文です。-elif文による分岐処理で適切な結果メッセージを表示する勝敗判定システムを構築します。

この実装では、まずプレイヤーのHP <= 0を条件としてif文で敗北判定を行い、次に敵のHP <= 0をelif文で勝利判定を実装します。どちらの条件にも該当しない場合は戦闘継続として処理され、各判定結果では勝利・敗北メッセージと最終的な戦闘統計を表示します。

戦闘結果の表示では、両者の最終HP状況と与えたダメージの合計を数値で確認でき、攻撃・防御・HP管理の戦略的要素が明確化されたRPG戦闘システムの基盤が完成します。

# コード
print("=== RPGゲーム開始 ===")
player_name = input("プレイヤー名を入力してください: ")
player_hp = int(input("初期HPを入力してください: "))
player_attack = int(input("攻撃力を入力してください: "))

# 初期データ管理変数の設定
max_player_hp = player_hp
player_defense = 5
battle_count = 0
game_active = True

# 敵データ自動計算
enemy_name = "ゴブリン"
enemy_max_hp = int(player_hp * 1.2) + (battle_count * 10)
enemy_hp = enemy_max_hp
enemy_attack = int(player_attack * 0.8) + (battle_count * 2)
enemy_defense = 3 + battle_count

print(f"\n【プレイヤー情報】")
print(f"名前: {player_name}")
print(f"HP: {player_hp}/{max_player_hp}")
print(f"攻撃力: {player_attack}")
print(f"防御力: {player_defense}")
print("プレイヤー作成完了!")

print(f"\n【敵ステータス計算過程】")
print(f"基本HP: {player_hp} × 1.2 + {battle_count} × 10 = {enemy_max_hp}")
print(f"基本攻撃力: {player_attack} × 0.8 + {battle_count} × 2 = {enemy_attack}")
print(f"基本防御力: 3 + {battle_count} = {enemy_defense}")

print(f"\n【敵情報】")
print(f"名前: {enemy_name}")
print(f"HP: {enemy_hp}/{enemy_max_hp}")
print(f"攻撃力: {enemy_attack}")
print(f"防御力: {enemy_defense}")
print("敵データ自動生成完了!")

print(f"\n=== 戦闘開始 ===")
print(f"{player_name} vs {enemy_name}")

# 攻撃順序の判定とダメージ計算処理
if player_attack > enemy_attack:
    print(f"\n【先攻】{player_name}の攻撃!")
    player_damage = player_attack - enemy_defense
    player_damage = 1 if player_damage < 1 else player_damage
    enemy_hp -= player_damage
    print(f"{player_name}が{enemy_name}に{player_damage}のダメージを与えた!")
    print(f"{enemy_name}のHP: {enemy_hp}/{enemy_max_hp}")
    
    print(f"\n【後攻】{enemy_name}の攻撃!")
    enemy_damage = enemy_attack - player_defense
    enemy_damage = 1 if enemy_damage < 1 else enemy_damage
    player_hp -= enemy_damage
    print(f"{enemy_name}が{player_name}に{enemy_damage}のダメージを与えた!")
    print(f"{player_name}のHP: {player_hp}/{max_player_hp}")
elif enemy_attack > player_attack:
    print(f"\n【先攻】{enemy_name}の攻撃!")
    enemy_damage = enemy_attack - player_defense
    enemy_damage = 1 if enemy_damage < 1 else enemy_damage
    player_hp -= enemy_damage
    print(f"{enemy_name}が{player_name}に{enemy_damage}のダメージを与えた!")
    print(f"{player_name}のHP: {player_hp}/{max_player_hp}")
    
    print(f"\n【後攻】{player_name}の攻撃!")
    player_damage = player_attack - enemy_defense
    player_damage = 1 if player_damage < 1 else player_damage
    enemy_hp -= player_damage
    print(f"{player_name}が{enemy_name}に{player_damage}のダメージを与えた!")
    print(f"{enemy_name}のHP: {enemy_hp}/{enemy_max_hp}")
else:
    print(f"\n【攻撃力同値のためプレイヤー先攻】")
    print(f"\n【先攻】{player_name}の攻撃!")
    player_damage = player_attack - enemy_defense
    player_damage = 1 if player_damage < 1 else player_damage
    enemy_hp -= player_damage
    print(f"{player_name}が{enemy_name}に{player_damage}のダメージを与えた!")
    print(f"{enemy_name}のHP: {enemy_hp}/{enemy_max_hp}")
    
    print(f"\n【後攻】{enemy_name}の攻撃!")
    enemy_damage = enemy_attack - player_defense
    enemy_damage = 1 if enemy_damage < 1 else enemy_damage
    player_hp -= enemy_damage
    print(f"{enemy_name}が{player_name}に{enemy_damage}のダメージを与えた!")
    print(f"{player_name}のHP: {player_hp}/{max_player_hp}")

print(f"\n=== 戦闘結果 ===")
print(f"{player_name} HP: {player_hp}/{max_player_hp}")
print(f"{enemy_name} HP: {enemy_hp}/{enemy_max_hp}")

# 勝敗条件の判定
if player_hp <= 0:
    print(f"\n【敗北】{player_name}は力尽きた...")
    print(f"{enemy_name}に敗北しました。")
    print(f"与えたダメージ: {enemy_max_hp - enemy_hp}")
elif enemy_hp <= 0:
    print(f"\n【勝利】{enemy_name}を倒した!")
    print(f"{player_name}の勝利です!")
    print(f"受けたダメージ: {max_player_hp - player_hp}")
else:
    print(f"\n【戦闘継続】まだ決着がついていません")
    print(f"両者ともまだ戦闘可能な状態です")

print(f"戦闘処理完了!")
行数 種別 コード 解説
84行目 新規 if player_hp <= 0: プレイヤーのHPが0以下かを比較演算子で判定する敗北条件
85行目 新規 print(f"\n【敗北】{player_name}は力尽きた...") 敗北時のメッセージをプレイヤー名と共に表示
86行目 新規 print(f"{enemy_name}に敗北しました。") 敗北した相手の名前を明記した敗北確定メッセージ
87行目 新規 print(f"与えたダメージ: {enemy_max_hp - enemy_hp}") 敗北時でも与えたダメージの合計を減算で計算し表示
88行目 新規 elif enemy_hp <= 0: 敵のHPが0以下かを比較演算子で判定する勝利条件
89行目 新規 print(f"\n【勝利】{enemy_name}を倒した!") 勝利時のメッセージを倒した敵の名前と共に表示
90行目 新規 print(f"{player_name}の勝利です!") プレイヤー名を含む勝利確定メッセージの表示
91行目 新規 print(f"受けたダメージ: {max_player_hp - player_hp}") 勝利時に受けたダメージの合計を減算で計算し表示
92行目 新規 else: 勝利・敗北以外の戦闘継続状態を処理するelse文
93行目 新規 print(f"\n【戦闘継続】まだ決着がついていません") 勝敗が決まっていない場合の戦闘継続メッセージ
94行目 新規 print(f"両者ともまだ戦闘可能な状態です") 戦闘継続の理由を説明する補足メッセージ
論理演算子による複合戦闘状態判定機能の実装

第2章2.2節「論理演算子による複合戦闘状態判定機能の実装」の続きを見る


すべてのカリキュラムを無料登録で学ぶ

プログラミング・マーケティング・AI活用方法を
今すぐ無料登録すると、全てのコンテンツが視聴可能になります。