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

乱数でクリティカルヒットを入れよう

🎯 きょうのミッション

10%の確率でクリティカルヒット(ダメージ2倍)になる仕組み。random.random() で0〜1の乱数を出し、0.1未満なら大成功。

🧠 できるようになること

  • random.random() で確率判定ができる
  • クリティカル要素でゲームに「運」を加えられる
  • %ベースの確率設計を理解する

🧰 用意するもの

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

🖼 できあがり

普通は20ダメージのところ、たまに「💥クリティカル!40ダメージ!」と出ます。Run を何度かしてクリティカルを引き当てよう。

📺 実行結果
⚔ ターン2
💥クリティカル!
あなたの攻撃!スライムに40ダメージ
敵のHP: -10
🎉 スライムを倒した!

🚀 やりかた

  1. import random。
  2. 攻撃時に if random.random() < 0.1: でクリティカル判定。
  3. クリティカルなら damage = player_atk * 2。
  4. そうでなければ通常ダメージ。

🐍 きょうのコード

Python main.py
import random

player_hp = 100
player_atk = 20
enemy_hp = 60
enemy_atk = 10
enemy_name = "スライム"
turn = 1

while player_hp > 0 and enemy_hp > 0:
    print(f"⚔ ターン{turn}")
    if random.random() < 0.1:
        damage = player_atk * 2
        print("💥クリティカル!")
    else:
        damage = player_atk
    enemy_hp -= damage
    print(f"あなたの攻撃!{enemy_name}に{damage}ダメージ")
    print(f"敵のHP: {enemy_hp}")
    if enemy_hp <= 0:
        break
    player_hp -= enemy_atk
    print(f"{enemy_name}の攻撃!あなたに{enemy_atk}ダメージ")
    print(f"あなたのHP: {player_hp}")
    turn += 1

if enemy_hp <= 0:
    print(f"🎉 {enemy_name}を倒した!")
▶ Trinketを開いて動かす

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

💡 きょうのポイント

random.random() は0以上1未満の小数を返します。< 0.1 なら10%、< 0.5 なら50%。確率設計の基本パターン。

🎮 チャレンジ

  • 敵もクリティカルを出すようにしよう
  • 確率を5%にしてクリティカルを貴重にしよう
  • 「会心の一撃でHP10%以下なら3倍」のような追加ルールを

🔁 ふりかえり

  • 確率があるとゲームはどう変わる?
  • 10%は感覚的に多い?少ない?
  • 本当に「運の悪い」プレイヤーをどうフォローする?

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

  • 準備:なし。
  • つまずきポイント:random.random() と random.randint() の違い。
  • 声かけ例:「ガチャの確率を作っているのと同じ感覚」と関連付けて。