デジタルこどもBASEのロゴ 特定非営利活動法人デジタルこどもBASE 📚 目次
第91回 Lv4 ⏱ 20〜25分

攻撃と防御を選べるようにしよう

🎯 きょうのミッション

毎ターン、プレイヤーは行動を選べる。「攻撃」「防御」「逃げる」から選ぶ。inputでメニューから選択する戦闘システムに進化。

🧠 できるようになること

  • input で行動選択ができる
  • 選択に応じて違う処理を実行できる
  • コマンド選択RPGの基本ができる

🧰 用意するもの

🖼 できあがり

毎ターン「1: 攻撃 / 2: 防御 / 3: 逃げる」のメニューが出て、選んだ行動が実行されます。

📺 実行結果
⚔ ターン1
1: 攻撃 / 2: 防御 / 3: 逃げる
> 1
あなたの攻撃!スライムに20ダメージ
敵のHP: 10
スライムの攻撃!あなたに8ダメージ
あなたのHP: 92

🚀 やりかた

  1. ターン内でメニュー表示+inputで行動選択。
  2. if action == "1": で攻撃。
  3. elif action == "2": で防御(次の敵の攻撃を半減)。
  4. elif action == "3": で逃走(ループ脱出)。

🐍 きょうのコード

Python main.py
player_hp = 100
player_atk = 20
enemy_hp = 30
enemy_atk = 8
enemy_name = "スライム"
turn = 1

while player_hp > 0 and enemy_hp > 0:
    print(f"⚔ ターン{turn}")
    print("1: 攻撃 / 2: 防御 / 3: 逃げる")
    action = input("> ")

    defending = False
    if action == "1":
        enemy_hp -= player_atk
        print(f"あなたの攻撃!{enemy_name}に{player_atk}ダメージ")
    elif action == "2":
        defending = True
        print("あなたは防御の構え!")
    elif action == "3":
        print("あなたは逃げ出した!")
        break

    print(f"敵のHP: {enemy_hp}")
    if enemy_hp <= 0:
        break

    damage = enemy_atk
    if defending:
        damage = damage // 2
    player_hp -= damage
    print(f"{enemy_name}の攻撃!あなたに{damage}ダメージ")
    print(f"あなたのHP: {player_hp}")
    turn += 1

if enemy_hp <= 0:
    print(f"🎉 {enemy_name}を倒した!")
elif player_hp <= 0:
    print(f"💀 あなたは倒れた…")
▶ Trinketを開いて動かす

上のコードをコピーして、Trinketの左のエリアに貼り付け、Runボタン(▶)を押すと動きます。

💡 きょうのポイント

プレイヤーが行動を選べると、ゲームに「戦略」が生まれます。HPが少ないときは防御、敵が弱ったら攻撃、ピンチなら逃げる。これがRPGの面白さの核心

🎮 チャレンジ

  • 「強攻撃」(ダメージ2倍だが命中50%)を追加
  • 防御中は被ダメ0にしよう
  • 逃げるときの成功率を50%に

🔁 ふりかえり

  • 選択肢があるとゲームはどう変わる?
  • 選択肢が多すぎると逆につまらない?
  • 次回はクリティカル(運要素)が追加

👨‍👩‍👧 おうちの人・先生へ

  • 準備:なし。
  • つまずきポイントdefending 変数の状態管理。次のターンには False に戻る。
  • 声かけ例:「自分で考えて選ぶ」のがゲームの楽しさ、と。