🔥JavaScript for文演習課題:「勇者と10体の魔王軍」🔥
🎮 課題の概要
勇者「アルス」は、魔王を倒すために10体の魔王軍のモンスターを倒しながら城の最上階を目指します。
モンスターにはそれぞれ「HP」があり、勇者の攻撃(atk)で1体ずつダメージを与えて倒していきます。
ただし!
- 一部の敵は 「防御力(def)」 を持っており、勇者の攻撃力ではダメージを与えられないかもしれません。
- また、HPが高い敵には複数回の攻撃が必要です。
📝 仕様
勇者のステータス:
javascriptコピーする編集するlet hero = {
name: "アルス",
atk: 15
};
魔王軍の配列(10体):
javascriptコピーする編集するlet enemies = [
{ name: "スライム", hp: 10, def: 2 },
{ name: "ゴブリン", hp: 25, def: 5 },
{ name: "オーク", hp: 30, def: 8 },
{ name: "ガーゴイル", hp: 35, def: 10 },
{ name: "ドラゴンの子", hp: 45, def: 12 },
{ name: "シャドウ", hp: 20, def: 6 },
{ name: "ミノタウロス", hp: 50, def: 14 },
{ name: "メデューサ", hp: 40, def: 10 },
{ name: "デスナイト", hp: 60, def: 18 },
{ name: "魔王", hp: 100, def: 20 }
];
💡 やること(for文とロジックの課題)
- for文を使って1体ずつ戦う。
- 勇者の攻撃力と敵の防御力を比較して、
ダメージ = atk – def(ただし0未満になったら0にする) - 敵のHPを0以下になるまで攻撃(while文も組み合わせOK)
- 何回で倒したかも表示する。
- 全部倒したら「魔王を倒した!世界に平和が戻った!」と表示。
🔍 出力イメージ(例)
python-replコピーする編集するスライムと戦う!
→ ダメージ 13!残りHP: -3
→ スライムを1回で倒した!
ゴブリンと戦う!
→ ダメージ 10!残りHP: 15
→ ダメージ 10!残りHP: 5
→ ダメージ 10!残りHP: -5
→ ゴブリンを3回で倒した!
...
魔王を倒した!世界に平和が戻った!
👑 発展課題(ロジック強化したい人向け)
- 勇者に「HP」を追加し、敵の攻撃も毎ターン受けるようにする。
- 勇者が倒されたらゲームオーバー。
- レベルアップしてatkが上がる機能を追加してもOK。
🧠 教訓
for
とwhile
の違いを体験できる- 条件分岐や繰り返し処理の大切さが実感できる
- オブジェクト・配列の操作が自然に学べる
- なにより楽しい!
✅ ヒント1. インデックスを使ってアクセスする
javascriptコピーする編集するlet enemies = [
{ name: "スライム", hp: 10, def: 2 },
{ name: "ゴブリン", hp: 25, def: 5 }
];
// for文でインデックス(i)を使ってアクセス
for (let i = 0; i < enemies.length; i++) {
console.log("敵の名前は:" + enemies[i].name);
console.log("HP:" + enemies[i].hp);
console.log("防御力:" + enemies[i].def);
}
👉 enemies[i]
で、i番目のモンスター(オブジェクト)を取り出せます。
✅ ヒント2. for...of
文で1体ずつ取り出す(シンプル)
javascriptコピーする編集するfor (let enemy of enemies) {
console.log("敵が現れた!:" + enemy.name);
}
👉 enemy
には配列の中の1つ1つのオブジェクトが順番に入ります。