ログアウト中 ログイン

学習パッケージを選択

【Python】簡易RPG作成講座 第2章2.1節「基本戦闘処理の作成」




現在の見出し: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戦闘処理完了!") 戦闘処理終了の確認メッセージ
算術演算子・比較演算子によるダメージ計算機能の実装

第2章2.1節「算術演算子・比較演算子によるダメージ計算機能の実装」の続きを見る


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

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