Day34 ウォームアップ(10分)【Unity 橋渡し②:回復と実行順】

広告

第2部:Unity 橋渡し(Day33〜Day35)

※10分の使い方は、「進め方(10分の使い方)」を参照
※生成AIは使いません
※全部できなくてOK
※今日のゴール目安:提出A(問題1が動く)で合格、提出B(1・2)で標準到達、提出C+発展で上位到達


今日の準備(ウォームアップの前に)

  1. Day34.cs を追加する(ソリューションエクスプローラーで、プロジェクト「MiniPractice」を右クリック → 追加 → クラス → Day34.cs
  2. Program.cs を開き、Main 内を Day33.Run() から Day34.Run() に書き換える

最初に:コードの形を確認

Day33 の Enemy に **Heal(回復)**を足します。Unity でも「ダメージ」「回復」は 別のメソッドとして書くことが多いです。

internal class Day34
{
    class Enemy
    {
        public string Name { get; set; }
        public int Hp { get; set; }

        public void TakeDamage(int amount)
        {
            Hp -= amount;
            if (Hp < 0)
            {
                Hp = 0;
            }
        }

        public void Heal(int amount)
        {
            Hp += amount;
        }

        public bool IsAlive()
        {
            return Hp > 0;
        }
    }

    public static void Run()
    {
        // ここに書く
    }
}
  • Heal … Hp が amount だけ増えます(教材では 上限なしです)
  • 実行順 … 先に TakeDamage、あとで Heal と、先に Heal、あとで TakeDamage では Hp の結果が変わります。問題文の順番どおりに呼び出してください

🔹 出力について(教材共通)

教材では 簡潔な出力例(個数だけ・該当語のみ・数値のみなど)を載せています。条件・数え方・集約が正しければ、ラベル付きで出しても構いません。


🔹 Day33 の振り返り(1分)

  • TakeDamage で Hp が減り、0 未満にはならない
  • 今日のポイントHeal を足し、呼び出す順序が結果に効くことを確認する

進め方(10分の使い方)

  • 最初の5分:自分の力だけで書いてみましょう。
  • 後半5分:過去の自分のコード・教材を見てOKです。

1限の過ごし方(目安)

時間(目安)内容
0〜15分ウォームアップ
15〜45分学習時間(Slack・スライド・口頭の指示を最優先)
45〜50分振り返りなど

提出ルール(重要)

  • 提出A:問題1だけ / 提出B:問題1・2 / 提出C:問題1・2・3(+発展)
  • GitHub:Commit → Push。Slack:「Day34 完了しました」

■ 問題1(基礎)

Enemy を1体Run() の中で作ってください。

  • Name … "スライム"
  • Hp … 40

つづけて、つぎの順番どおりに 1回ずつ呼び出してください。

  1. TakeDamage(50)
  2. Heal(12)

そのあと、つぎの 2行 を表示してください。

  1. Name
  2. Hp(教材の例では TakeDamage で 0 になり、Heal で 12 になるので 12

■ 問題2(条件)

次の enemies 配列を用意し、各 Enemy についてつぎの順番どおりに呼び出してください。

1体の Enemy につき先に 下の1を1回、つづけて 2を1回、という順に呼び出し、同じ要領で 配列の先頭から順に、体を1体ずつ処理してください(全員分の TakeDamage を先にまとめて呼び出さないでください)。

  1. TakeDamage(20) を1回
  2. Heal(5) を1回
Enemy[] enemies =
{
    new Enemy { Name = "スライム",  Hp = 45 },
    new Enemy { Name = "ゴブリン", Hp = 12 },
    new Enemy { Name = "オーク",   Hp = 20 },
};

IsAlive() が true になる Enemy の Name を1行ずつ表示してください。

  • 教材のデータでは 3体とも生存スライムゴブリンオーク の 3行

■ 問題3(集計)

同じ enemies 配列(問題2と同じ処理のあと)について、IsAlive() が true の 体数を 1行で表示してください。

  • 教材のデータでは 3

■ 発展A(余裕がある人)

次の enemies2 について、各 Enemy に対して TakeDamage(15) のあと Heal(4) の順で1回ずつ呼び出してください。

Enemy[] enemies2 =
{
    new Enemy { Name = "スライム",  Hp = 50 },
    new Enemy { Name = "ゴブリン", Hp = 8 },
    new Enemy { Name = "オーク",   Hp = 22 },
    new Enemy { Name = "ボス",     Hp = 60 },
};

IsAlive() が true だけを List<Enemy> に入れ、つぎの 順序どおりに表示してください。

  1. 各 Name(1行ずつ)
  2. Hp の合計(1行)
  3. Hp の平均(整数割り算、1行)
  4. Hp の最大(1行)
  5. Hp の最小(1行)

数値の目安:生存は 4体。合計 103、平均 25、最大 49、最小 4


■ 発展B(発展Aが動いたらチャレンジ)

Enemy に IsHealthy() メソッドを追加してください。

  • 戻り値:bool
  • IsAlive() が true かつ Hp が 30 以上のときだけ true

enemies2 の処理のあとIsHealthy() が true になる Enemy の Name を1行ずつ表示してください。

  • 教材の目安:スライム と ボス の 2行(数値は発展Aの処理後の Hp に依存します)

⚠️ つまずきやすい点

  • 問題1は必ず TakeDamage → Heal の順(問題文どおり)
  • Heal は Hp を増やすだけ … 上限クリップはしません(教材どおり)

🎯 今日の目的

  • 複数メソッドを 順番に呼ぶと状態が変わる、を体感する(Unity の Start / Update など「いつ呼ばれるか」の土台)

次へ

Day35 では Player が Enemy を攻撃する別インスタンスへメソッド)に進みます。

訪問数 20 回, 今日の訪問数 20回

広告

C#,Unity

Posted by hidepon