現在の見出し:2.1節:基本戦闘処理の作成
見出し一覧
- 2.1節:基本戦闘処理の作成
- - if-elif-else文による攻撃処理分岐機能の実装
- - 算術演算子・比較演算子によるダメージ計算機能の実装
【PR】『Python』を学べる企業・個人向けのプログラミングコース
if-elif-else文による攻撃処理分岐機能の実装
前節(第1章1.2節)で作成した敵ステータスの自動計算システムを基盤として、プレイヤーと敵が交互に攻撃を行う基本的な戦闘処理分岐機能を実装します。戦闘システムでは攻撃順序を決定し、先攻者が後攻者に対してダメージを与える処理を「if-elif-else文」を使って条件分岐条件分岐はプログラム内で指定した条件によって処理の分岐を行う制御構造です。により実現します。
プレイヤーの攻撃力と敵の攻撃力を比較して攻撃順序を決定し、攻撃力が高い方が先攻となる戦闘システムを構築します。プレイヤー先攻の場合はif文で処理、敵先攻の場合はelif文で処理、同値の場合はelse文でプレイヤー先攻として処理をすることにより、明確な攻撃順序判定システムを実現します。この攻撃処理分岐の実装により、RPGゲームに必要な基本的なターン制戦闘の基盤が完成します。
各攻撃処理では、攻撃者の名前と被攻撃者の名前をf-stringで表示し、どちらがどちらを攻撃したかを明確に示します。この段階では実際のダメージ計算は行わず、攻撃順序の判定と攻撃処理の分岐に焦点を当てた実装とし、次のセクションでダメージ計算機能を追加する設計となります。
# コード
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}の攻撃!")
print(f"{player_name}が{enemy_name}を攻撃した!")
print(f"\n【後攻】{enemy_name}の攻撃!")
print(f"{enemy_name}が{player_name}を攻撃した!")
elif enemy_attack > player_attack:
print(f"\n【先攻】{enemy_name}の攻撃!")
print(f"{enemy_name}が{player_name}を攻撃した!")
print(f"\n【後攻】{player_name}の攻撃!")
print(f"{player_name}が{enemy_name}を攻撃した!")
else:
print(f"\n【攻撃力同値のためプレイヤー先攻】")
print(f"\n【先攻】{player_name}の攻撃!")
print(f"{player_name}が{enemy_name}を攻撃した!")
print(f"\n【後攻】{enemy_name}の攻撃!")
print(f"{enemy_name}が{player_name}を攻撃した!")
print(f"\n戦闘処理完了!")
行数 | 種別 | コード | 解説 |
---|---|---|---|
33行目 | 新規 | print(f"\n=== 戦闘開始 ===") |
戦闘開始の区切り表示 |
34行目 | 新規 | print(f"{player_name} vs {enemy_name}") |
対戦カードをf-stringで表示 |
36行目 | 新規 | if player_attack > enemy_attack: |
プレイヤー攻撃力が敵攻撃力より大きい場合の条件判定 |
37行目 | 新規 | print(f"\n【先攻】{player_name}の攻撃!") |
プレイヤー先攻時の攻撃宣言を表示 |
38行目 | 新規 | print(f"{player_name}が{enemy_name}を攻撃した!") |
プレイヤーから敵への攻撃実行メッセージ |
39行目 | 新規 | print(f"\n【後攻】{enemy_name}の攻撃!") |
敵後攻時の攻撃宣言を表示 |
40行目 | 新規 | print(f"{enemy_name}が{player_name}を攻撃した!") |
敵からプレイヤーへの攻撃実行メッセージ |
41行目 | 新規 | elif enemy_attack > player_attack: |
敵攻撃力がプレイヤー攻撃力より大きい場合の条件判定 |
42行目 | 新規 | print(f"\n【先攻】{enemy_name}の攻撃!") |
敵先攻時の攻撃宣言を表示 |
43行目 | 新規 | print(f"{enemy_name}が{player_name}を攻撃した!") |
敵からプレイヤーへの攻撃実行メッセージ |
44行目 | 新規 | print(f"\n【後攻】{player_name}の攻撃!") |
プレイヤー後攻時の攻撃宣言を表示 |
45行目 | 新規 | print(f"{player_name}が{enemy_name}を攻撃した!") |
プレイヤーから敵への攻撃実行メッセージ |
46行目 | 新規 | else: |
攻撃力が同値の場合の処理 |
47行目 | 新規 | print(f"\n【攻撃力同値のためプレイヤー先攻】") |
同値時のプレイヤー先攻ルール説明 |
48行目 | 新規 | print(f"\n【先攻】{player_name}の攻撃!") |
同値時のプレイヤー先攻攻撃宣言 |
49行目 | 新規 | print(f"{player_name}が{enemy_name}を攻撃した!") |
同値時のプレイヤー攻撃実行メッセージ |
50行目 | 新規 | print(f"\n【後攻】{enemy_name}の攻撃!") |
同値時の敵後攻攻撃宣言 |
51行目 | 新規 | print(f"{enemy_name}が{player_name}を攻撃した!") |
同値時の敵攻撃実行メッセージ |
53行目 | 新規 | print(f"\n戦闘処理完了!") |
戦闘処理終了の確認メッセージ |