構造化プログラミングからオブジェクト指向へ繋ぐブリッジ練習問題セット(ゲームキャラクター版)

ソリューション、プロジェクトの新規作成

練習用に次のようなプロジェクトを作成します

BridgeExercises_Character   (ソリューション)
├─ Step1_StructuredDisplay      (プロジェクト:ステップ1 変数だけでキャラクター表示)
├─ Step2_MethodRefactor         (プロジェクト:ステップ2 ShowStatus メソッド化)
├─ Step3_CharacterClass         (プロジェクト:ステップ3 Character クラス化)
└─ Step4_LevelUpExtension       (プロジェクト:ステップ4 LevelUp メソッド追加)

✅ 前提

  • 変数・条件分岐・繰り返し・配列まで学習済み  
  • メソッドの基本をひととおり理解した段階  
  • 「データと処理を“ひとまとまり”にする」感覚を養う

■ 練習問題構成

ステップ目的
1. 構造化のみで書く構造化だけで書き、データと処理が分離した形を体験
2. メソッドで整理メソッド化して処理を部品化・再利用できることを体験
3. クラスにまとめるクラス化して「モノ」に束ねる感覚を体験

✅ 【ステップ1】構造化でゲームキャラクター表示

お題

  • 名前とレベルを変数で保持  
  • 画面に「◯◯ のレベルは Lv.△△」と表示 
  • 3人分のデータを順に表示する

ヒント

  • 配列を使ってもOK
  • メソッドは使わない
using System;

class Program
{
    static void Main()
    {
        string name1 = "Aria";
        int level1 = 5;

        string name2 = "Bolt";
        int level2 = 7;

        string name3 = "Cid";
        int level3 = 3;

        Console.WriteLine($"{name1} のレベルは Lv.{level1}");
        Console.WriteLine($"{name2} のレベルは Lv.{level2}");
        Console.WriteLine($"{name3} のレベルは Lv.{level3}");
    }
}

✅ 【ステップ2】メソッド化で整理

お題

  • 【ステップ1】の表示処理を ShowStatus メソッドにまとめる
  • 引数で名前と年齢を受け取り表示する
  • 引数で名前とレベルを受け取り表示

追加条件

  • 3人分を繰り返し呼び出して表示する
using System;

class Program
{
    static void ShowStatus(string name, int level)
    {
        Console.WriteLine($"{name} のレベルは Lv.{level}");
    }

    static void Main()
    {
        ShowStatus("Aria", 5);
        ShowStatus("Bolt", 7);
        ShowStatus("Cid", 3);
    }
}

✅ 【ステップ3】クラス化でオブジェクト指向に変換

お題

  • Character クラスを作成
  • Name と Level をプロパティとして持つ
  • ShowStatus() をクラスのメソッドにする
  • 3 人の Character オブジェクトを生成し、順に ShowStatus を呼ぶ
using System;

class Character
{
    public string Name {get; set;}
    public int Level {get; set;}

    public void ShowStatus()
    {
        Console.WriteLine($"{Name} のレベルは Lv.{Level}");
    }
}

class Program
{
    static void Main()
    {
        Character c1 = new Character { Name = "Aria", Level = 5 };
        Character c2 = new Character { Name = "Bolt", Level = 7 };
        Character c3 = new Character { Name = "Cid",  Level = 3 };

        c1.ShowStatus();
        c2.ShowStatus();
        c3.ShowStatus();
    }
}

✅ 【ステップ4】少し発展(レベルアップ)

お題

  • Character クラスに LevelUp() メソッドを追加
  • このメソッドはレベルを 1 上げて「◯◯ は Lv.△△ にアップ!」と表示
  • 任意の 1 人をレベルアップ後、もう一度 ShowStatus() を呼ぶ
using System;

class Character
{
    public string Name {get; set;}
    public int Level {get; set;}

    public void ShowStatus()
    {
        Console.WriteLine($"{Name} のレベルは Lv.{Level}");
    }

    public void LevelUp()
    {
        Level++;
        Console.WriteLine($"{Name} は Lv.{Level} にアップ!");
    }
}

class Program
{
    static void Main()
    {
        Character aria = new Character { Name = "Aria", Level = 5 };
        Character bolt = new Character { Name = "Bolt", Level = 7 };
        Character cid  = new Character { Name = "Cid",  Level = 3 };

        aria.ShowStatus();
        bolt.ShowStatus();
        cid.ShowStatus();

        Console.WriteLine("--- レベルアップイベント ---");
        bolt.LevelUp();

        Console.WriteLine("--- 再表示 ---");
        bolt.ShowStatus();
    }
}

✅ 【振り返りワーク】

構造化で書いたときとクラス化したときの 「見やすさ」「変更のしやすさ」 を比較し、気づいたことを箇条書きにしてみましょう。

「クラス化するとデータと処理が近づき、どのコードがどのキャラクターを扱うか一目で分かった」など。  

✅ 【オプション】

内容できれば
UMLで描くCharacter クラス図を手書きしてみる
Excelで考える行=キャラクター、列=プロパティと捉えてみる
チーム開発想定誰がどの部分を担当すると効率的か考える

✏️ 【まとめの一言】

データと振る舞いを「箱」にまとめると、後々の拡張・保守が圧倒的に楽になる――小さなサンプルでもこれを体験しておくと、実際のゲーム開発でクラス設計の重要性が実感できます。

訪問数 3 回, 今日の訪問数 4回