自分だけのクイズ作成 - Quipha公開中

【#5】C#でゲームを作ろう【敵クラスの作成1】

C#
スポンサーリンク

敵クラスについて

それでは敵クラスを作成します。

仕様
  • インスタンスを生成するとランダムな場所に出現する。
  • 出現場所はあるコンポーネントの上のみ(今回はF_MainのパネルP_Enemyの上)
  • 出現する敵は三種類あり、どれかランダムに一つ選ばれる。
  • 敵は画像で表示されそれぞれ違う。
  • それぞれやっつけた(クリックされた)際に、得点が得られる。
  • 敵は倒されたらまた違う敵になって出現する。
  • それぞれの敵の動きは種類によって違う。

クラス作成

メニューの「プロジェクト」→「クラスの追加」をクリックします。

ファイル名は任意で結構ですが、「Class1.cs」のまま追加ボタンを押します。

初期では以下のようになっております。

namespace ClickBuster_cs
{
    class Class1
    {
    }
}

Class1の部分がクラス名となっておりますので、敵クラス(CEnemy)に名前を変更します。

namespace ClickBuster_cs
{
    class CEnemy
    {
    }
}

コンストラクタを定義

コンストラクタを定義します。
敵クラスが生成されたときに呼び出されますので、初期化を行います。

コンストラクタとは、クラスのインスタンス生成時に実行されるメソッドです。

以降、以下のように、クラスの中に定義していきます。

    class CEnemy
    {

        public CEnemy()
        {

        }
    }

まずはこのクラスで使用する変数を定義します。

        // 敵の画像
        private PictureBox _pbImgEnemy;
        // 敵が出現するオーナー
        private Control _enemyOwner;
        // ランダム変数
        private Random _rnd;
        // 敵を倒した時の得点
        private int _intTokuten;
        // 敵が動く際の幅
        private int _intMvwd;
        // 上下左右に動く
        private int _intMvud;
        // 敵のパターン
        private int _intMovePattern;

コンストラクタに引数を二つ追加し、以下のようにコーディングします。
引数は、敵が移動できるコンポーネント(パネル)と、ランダム変数です。

        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="owner">敵が出現するオーナー</param>
        /// <param name="rand"></param>
        public CEnemy(Control owner, Random rand)
        {
            // 敵の画像を表示する変数を初期化
            _pbImgEnemy = new PictureBox();
            // オーナーの取得
            _enemyOwner = owner;
            // ランダム変数
            _rnd = rand;
            // 敵が動く際の幅の初期化
            _intMvwd = 10;
            // 上下左右に動く
            _intMvud = 0;

            // 敵画像がクリックされたイベント
            _pbImgEnemy.Click += new EventHandler(DoClick);
            // ランダムな場所に出現
            _RandPlace();
            // オーナーに画像を貼り付け
            _enemyOwner.Controls.Add(_pbImgEnemy);
        }

先頭に以下を宣言しておきましょう。

using System.Drawing;
using System.Windows.Forms;

DoClickと_RandPlaceメソッドの実装

まずクリックイベントを実装します。
敵画像をクリックされた際に処理するためです。
変数宣言の下あたりにクリックイベントを宣言します。

        // クリックイベント
        public event EventHandler OnClick;

次にクリックイベントの実装です。

        /// <summary>
        /// 画像クリックイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DoClick(object sender, EventArgs e)
        {
            OnClick(this, e);
        }

上記を実装することで、敵画像(_pbImgEnemy)のクリックイベントがこのクラスのクリックイベントになります。

次に敵をランダムな場所に出現するメソッド「_RandPlace」を追加します。

敵自体もランダムに選択されます。ここでは三種類の敵にします。
他のクラスから呼ばれる必要がないのでPrivateにしておきます。

        /// <summary>
        /// 敵画像をランダムな場所に作成
        /// </summary>
        private void _RandPlace()
        {

            // 出現場所はオーナーの範囲内にする
            // 高さ
            var intTop = _rnd.Next(_enemyOwner.Size.Height - _pbImgEnemy.Size.Height);
            _pbImgEnemy.Top = intTop;
            // 横
            var intLeft = _rnd.Next(_enemyOwner.Size.Width - _pbImgEnemy.Size.Width);
            _pbImgEnemy.Left = intLeft;

            // 敵のパターン(画像と得点)をランダムに指定する
            _intMovePattern = _rnd.Next(1, 4);
            _pbImgEnemy.SizeMode = PictureBoxSizeMode.AutoSize;

            switch (_intMovePattern)
            {
                case 1:
                    // 画像読み込み
                    _pbImgEnemy.Image = Image.FromFile("enemy1.gif");
                    // 得点
                    _intTokuten = 500;
                    break;
                case 2:
                    // 画像読み込み
                    _pbImgEnemy.Image = Image.FromFile("enemy2.gif");
                    // 得点
                    _intTokuten = 1000;
                    break;
                case 3:
                    // 画像読み込み
                    _pbImgEnemy.Image = Image.FromFile("enemy3.gif");
                    // 得点
                    _intTokuten = 3000;
                    break;
            }

        }

_intMovePatternが1の場合、画像は「enemy1.gif」が選択され、倒した際の得点は500点になります。

ひとまず敵クラスの初期化の実装はここまでです。
少しコーディングしてきましたが、一行ずつ解読してみてください。

コメント

タイトルとURLをコピーしました