講義メモ

・オブジェクト指向演習①
・ゲーム開発演習①

オブジェクト指向演習①

・コンソールアプリケーションによるRPGを題材にして、テキスト10章までのノウハウとテクニックを確認&実習しましょう。

RPG演習1 仕様

・プロジェクトはコンソールアプリケーションで「rpg」とします
・魔導士とプレイヤーが戦うゲーム
・詳細はスケルトンのコメントを読み解いて理解を

実行例

魔道士(HP=10)が現れた。
攻撃しますか?(1:はい 0:やめる):1
あなたの攻撃!
魔道士(HP=10)に5のダメージを与えた!
魔道士(HP=5)は消費MP4の魔法を唱えた!
あなたは16のダメージを受けた!
攻撃しますか?(1:はい 0:やめる):1
あなたの攻撃!
魔道士(HP=5)に7のダメージを与えた!
魔道士を倒した!

プログラム ver.0(穴埋めになっています)

//オブジェクト指向演習 RPG演習1
using System;
class Madoshi {
    int mp; //MP
    int hp; //HP
    Random rnd = new Random(); //乱数用のRandomクラスのインスタンスを生成
    public ● () { //コンストラクタ
        mp = rnd.Next(10); //0~9の間のランダムな整数を得てMPの初期値とする
        hp = 10 + rnd.Next(10); //10~19の間のランダムな整数を得てHPの初期値とする
    }
    public int GetHP() { return hp; } //HPを返すメソッド
    public void DispInfo() { //魔導士の情報を表示する
        Console.Write("魔道士(HP=" + hp + ")"); //HPを表示(改行しない)
    }
    public int Fight() { //魔道士があなたを攻撃し、あなたのダメージ値を返す
        if (rnd.Next(2) == 1) { //確率1/2で魔法攻撃かどうかを選ぶ
            int j = rnd.Next(5) + 1; //消費MPは1~5の乱数
            DispInfo(); // 魔導士の情報を表示する
            Console.WriteLine("は消費MP" + j + "の魔法を唱えた!");
            if (mp < j) { // MP不足?
                Console.WriteLine("MPが足りない!");
                return 0; // あなたのダメージ=0を返す(攻撃終了)
            } else { // MP充足?
                Console.WriteLine("あなたは" + j * 4 + "のダメージを受けた!");
                mp -= j; //MP消費
                return j * 4; //あなたのダメージ=消費MPの4倍を返す(攻撃終了)
            }
        } else { //通常攻撃?
            int k = rnd.Next(5) + 1; //攻撃力は1~5の乱数
            DispInfo(); //魔導士の情報を表示する
            Console.WriteLine("の攻撃!");
            Console.WriteLine("あなたは" + k + "のダメージを受けた!");
            return k; //あなたのダメージ=1~50を返す(攻撃終了)
        }
    }
    public void Damage() { //魔道士があなたからダメージをくらう
        int k = 5 + rnd.Next(5); //あなたの攻撃力は5~9の乱数
        Console.WriteLine("あなたの攻撃!");
        DispInfo(); //魔導士の情報を表示する(攻撃を受けた後の魔道士のHPを表示)
        Console.WriteLine("に" + k + "のダメージを与えた!");
        hp -= k; //魔道士のHPをダウン
    }
}
class minimadou { //ゲーム本体のクラス
    public static void Main() { //ゲームを進行するメソッド
        string ans; //入力用
        // 戦闘開始
        int myhp = 20; // あなたのHP
        Madoshi m = new Madoshi(); // 魔道士を生成
        m.DispInfo(); // 魔道士の情報を表示する
        Console.WriteLine("が現れた。");
        // 戦闘中(あなたが死ぬか,魔道士が死ぬまで繰り返す)
        ● (myhp > 0 && m.GetHP() > 0) { //あなたのHPがあり、魔導士のHPがある間
            Console.Write("攻撃しますか?(1:はい 0:やめる):");
            ans = Console.ReadLine(); // 攻撃するかどうかを得る
            if (ans == "1") { // はい?
                m.Damage(); // 魔道士を攻撃する
                if (m.GetHP() > 0) { // 魔道士は死んでない?
                    myhp -= m.Fight(); // 魔道士の攻撃!あなたのHPをマイナス
                    if (myhp <= 0) { // あなたのHPがもうない?
                        Console.WriteLine("あなたは死にました。");
                    }
                } else { // 魔道士のHPがもうない?
                    Console.WriteLine("魔道士を倒した!");
                }
            } else { // やめる?
                ●// 繰り返し終了
            }
        }
    }
}

作成例

//オブジェクト指向演習 RPG演習1
using System;
class Madoshi { //魔導士を表すクラス
    int mp; //MP(カプセル化(p.166)のためにpublicにしない)
    int hp; //HP(〃)
    Random rnd = new Random(); //乱数用のRandomクラスのインスタンスを生成(後述)
    public Madoshi() { //コンストラクタ(p.167)
        mp = rnd.Next(10); //0~9の間のランダムな整数を得てMPの初期値とする
        hp = 10 + rnd.Next(10); //10~19の間のランダムな整数を得てHPの初期値とする
    }
    public int GetHP() { return hp; } //HPを返すメソッド
    public void DispInfo() { //魔導士の情報を表示する
        Console.Write("魔道士(HP=" + hp + ")"); //HPを表示(改行しない)
    }
    public int Fight() { //魔道士があなたを攻撃し、あなたのダメージ値を返す
        if (rnd.Next(2) == 1) { //確率1/2で魔法攻撃かどうかを選ぶ
            int j = rnd.Next(5) + 1; //消費MPは1~5の乱数
            DispInfo(); // 魔導士の情報を表示する
            Console.WriteLine("は消費MP" + j + "の魔法を唱えた!");
            if (mp < j) { // MP不足?
                Console.WriteLine("MPが足りない!");
                return 0; // あなたのダメージ=0を返す(攻撃終了)
            } else { // MP充足?
                Console.WriteLine("あなたは" + j * 4 + "のダメージを受けた!");
                mp -= j; //MP消費
                return j * 4; //あなたのダメージ=消費MPの4倍を返す(攻撃終了)
            }
        } else { //通常攻撃?
            int k = rnd.Next(5) + 1; //攻撃力は1~5の乱数
            DispInfo(); //魔導士の情報を表示する
            Console.WriteLine("の攻撃!");
            Console.WriteLine("あなたは" + k + "のダメージを受けた!");
            return k; //あなたのダメージ=1~50を返す(攻撃終了)
        }
    }
    public void Damage() { //魔道士があなたからダメージをくらう
        int k = 5 + rnd.Next(5); //あなたの攻撃力は5~9の乱数
        Console.WriteLine("あなたの攻撃!");
        DispInfo(); //魔導士の情報を表示する(攻撃を受けた後の魔道士のHPを表示)
        Console.WriteLine("に" + k + "のダメージを与えた!");
        hp -= k; //魔道士のHPをダウン
    }
}
class minimadou { //ゲーム本体のクラス
    public static void Main() { //ゲームを進行するメソッド
        string ans; //入力用
        // 戦闘開始
        int myhp = 20; // あなたのHP
        Madoshi m = new Madoshi(); // 魔道士を生成
        m.DispInfo(); // 魔道士の情報を表示する
        Console.WriteLine("が現れた。");
        // 戦闘中(あなたが死ぬか,魔道士が死ぬまで繰り返す)
        while (myhp > 0 && m.GetHP() > 0) { //あなたのHPがあり、魔導士のHPがある間
            Console.Write("攻撃しますか?(1:はい 0:やめる):");
            ans = Console.ReadLine(); // 攻撃するかどうかを得る
            if (ans == "1") { // はい?
                m.Damage(); // 魔道士を攻撃する
                if (m.GetHP() > 0) { // 魔道士は死んでない?
                    myhp -= m.Fight(); // 魔道士の攻撃!あなたのHPをマイナス
                    if (myhp <= 0) { // あなたのHPがもうない?
                        Console.WriteLine("あなたは死にました。");
                    }
                } else { // 魔道士のHPがもうない?
                    Console.WriteLine("魔道士を倒した!");
                }
            } else { // やめる?
                break; // 繰り返し終了(p.125)
            }
        }
    }
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です