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

ボス戦を作ろう

🎯 きょうのミッション

RPGの華ボス戦。HP200、攻撃力25のドラゴンと戦います。専用のセリフ・演出で緊張感を出します。

🧠 できるようになること

  • ボスは普通の敵より強いことを表現できる
  • セリフ・演出で雰囲気を作れる
  • RPGの「ここぞ」の場面を作れる

🧰 用意するもの

  • パソコン
  • ブラウザ(Chrome / Edge / Safari)
  • インターネット接続
  • このページの「▶ このページで実行」ボタン(コードをそのまま動かせます)
  • Trinket(予備の実行サイト:https://trinket.io/python)

🖼 できあがり

「ドラゴンが現れた!」のドラマチックな登場。HP200の強敵を倒すまでの戦い。

📺 実行結果
🐉🐉🐉 ドラゴンが現れた!🐉🐉🐉
「我こそはドラゴン王!貴様などひとひねりだ!」

⚔ ターン1
(戦闘ログ続く)

🎉 ドラゴンを倒した!
「な…なぜ、人間ふぜいに……」

🚀 やりかた

  1. ドラゴン用の変数(HP200, ATK25)を作る。
  2. 登場演出を print で派手に。
  3. 戦闘ループは普通の敵と同じ。
  4. 勝利時に専用セリフ+"WIN!"演出。

🐍 きょうのコード

Python main.py
import random
import time

player_hp = 100
player_atk = 20
items = ["ポーション", "ポーション", "ポーション"]

boss_name = "ドラゴン"
boss_hp = 200
boss_atk = 25

print("🐉🐉🐉 " + boss_name + "が現れた!🐉🐉🐉")
time.sleep(1)
print("「我こそはドラゴン王!貴様などひとひねりだ!」")
time.sleep(1)
print()

turn = 1
while player_hp > 0 and boss_hp > 0:
    print(f"⚔ ターン{turn}")
    print("1: 攻撃 / 2: ポーション")
    action = input("> ")
    if action == "1":
        damage = player_atk
        if random.random() < 0.1:
            damage *= 2
            print("💥 クリティカル!")
        boss_hp -= damage
        print(f"あなたの攻撃!{boss_name}に{damage}ダメージ")
    elif action == "2" and "ポーション" in items:
        player_hp = min(player_hp + 30, 100)
        items.remove("ポーション")
        print(f"💚 ポーションを使った!HP {player_hp}")

    print(f"ボスHP: {boss_hp}")
    if boss_hp <= 0:
        break

    player_hp -= boss_atk
    print(f"{boss_name}の攻撃!{boss_atk}ダメージ")
    print(f"あなたのHP: {player_hp}")
    print()
    turn += 1

if boss_hp <= 0:
    print(f"🎉 {boss_name}を倒した!")
    print("「な…なぜ、人間ふぜいに……」")
else:
    print("💀 あなたは倒れた…")
▶ Trinketを開いて動かす

このページの「▶ このページで実行」でそのまま動きます。Trinketを使うときは、上のコードをコピーして左のエリアに貼り付け、Runボタン(▶)を押します。

💡 きょうのポイント

ボスは強さで個性を出します。HPと攻撃力を上げる、特殊な演出を入れる、専用セリフ。「物語性」がRPGをドラマにします。

🎮 チャレンジ

  • ボスのHPが半分以下になったら「怒りモード」(攻撃力アップ)
  • ボス戦専用BGM代わりに print("🎵 ") で雰囲気作り
  • 倒したあとに「報酬:金100」を加算

🔁 ふりかえり

  • ボス戦と通常戦闘、何が違う?
  • ゲームのドラマ性をプログラムでどう表現する?
  • 次回はステージ進行

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

  • 準備:コードが長いので、まずサンプルをそのまま動かして勝敗まで確認します。次にHPやダメージだけを変えます。
  • つまずきポイント:コードが長くなるため、どこで止まったかを行番号で確認します。time.sleep(1) を使うには、先頭の import time が必要です。
  • 声かけ例:「強すぎるボスは面白くないこともある」と伝え、勝てるかどうかを数字で調整するゲームデザインにつなげます。