アマゾンバナーリンク

エンディング処理追加

2019年12月25日

ついにミニゲーム制作もこれで最後になります。
とはいっても基本中の基本の技術ばかりなので、徐々にレベルアップしていきます。
さっそくCGameMain.csを書き換えましょう。やってることは簡単でMove関数内で終了判定を行い、終了なら、Stateを1の終了状態に切り替えてエンディングにしてます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DxLibDLL;
using System.Windows.Forms;

namespace DxLibGame
{
    public static class CMainGame
    {
        public const int MIN_X = 0;
        public const int MAX_X = 8;
        public const int MIN_Y = 0;
        public const int MAX_Y = 8;
        public static CPlayer Player;
        public static CEnemy[] Enemy;
        private static int State = 0;
        private static int[] MapGraph = new int[3];
        private static int[] Map = new int[]
        {
            1,1,1,0,0,1,1,1,
            1,2,2,1,0,2,2,2,
            1,2,0,0,0,2,0,1,
            1,2,1,0,0,0,0,1,
            1,2,2,2,0,0,0,1,
            1,1,0,2,0,0,0,1,
            1,0,0,2,0,0,0,1,
            1,1,1,1,0,1,1,1
        };
        private static void DrawMap()
        {
            for(int i = 0; i < Map.Length; ++i)
            {
                DX.DrawGraph(i % MAX_X * 32,i/ MAX_Y * 32, MapGraph[Map[i]], 1);
            }
        }
        public static void Initialize()
        {
            for(int i = 0; i < MapGraph.Length; ++i)
            {
                MapGraph[i] = DX.LoadGraph($"image/{i}.jpg");
            }
            
            MapGraph[1] = DX.LoadGraph("image/1.jpg");
            Player = new CPlayer(x: 4, y: 7, hp: 10, image_name:"image/fighter.png");
            Enemy = new CEnemy[] { new CEnemy(x: DX.GetRand(MAX_X), y: DX.GetRand(MAX_Y), hp: 1, image_name:"image/slime0.png"), 
                new CEnemy(x: DX.GetRand(MAX_X), y: DX.GetRand(MAX_Y), hp: 1, image_name:"image/slime1.png")
            ,new CEnemy(x: DX.GetRand(MAX_X), y: DX.GetRand(MAX_Y), hp: 1, image_name:"image/slime2.png")
            ,new CEnemy(x: DX.GetRand(MAX_X), y: DX.GetRand(MAX_Y), hp: 1, image_name:"image/dragon.png")};
        }
        private static void MoveTask(CMover[] mover)
        {
            for (int i = 0; i < mover.Length; ++i)
            {
                if (!mover[i].Move())
                {
                    mover[i].Show = false;
                }
            }
        }
        private static void DrawTask(CMover[] mover)
        {
            for (int i = 0; i < mover.Length; ++i)
            {
                mover[i].Draw();
            }
        }
        public static void Move()
        {
            // ゲーム中
            if(State == 0)
            {
                Player.Move();
                MoveTask(Enemy);
                int cnt = 0;
                for (int i = 0; i < Enemy.Length; ++i)
                {
                    if (Enemy[i].Show == false)
                    {
                        ++cnt;
                    }
                }
                if (cnt == Enemy.Length)
                {
                    MessageBox.Show("クリア");
                    State = 1;
                }
            }
            else // ゲーム終了時
            {

            }
        }
        static int AddX = 0;
        static int Cnt = 0;
        public static void Draw()
        {
            // ゲーム中
            if (State == 0)
            {
                DrawMap();
                Player.Draw();
                DrawTask(Enemy);
            }
            else // ゲーム終了時
            {
                DX.DrawString(10, 170+ AddX, "無事ドラゴンを退治できた", DX.GetColor(255, 255, 255));
                DX.DrawString(10, 190+ AddX, "村には平和が戻った", DX.GetColor(255, 255, 255));
                DX.DrawString(10, 210+ AddX, "制作スタッフ", DX.GetColor(255, 255, 255));
                DX.DrawString(10, 240+ AddX, "ジェイ", DX.GetColor(255, 255, 255));
                Cnt = (Cnt + 1) % 2;
                if (Cnt == 1)
                {
                    --AddX;
                }
            }
        }
    }
}

実行結果

https://gyazo.com/e1617732fd2c97ee58d115d0de3f127d

今回作ったプロジェクトはこちらからダウンロードできます。
お疲れさまでした!このゲーム制作でC#の言語の基本とオブジェクト指向のポリモーフィズム、カプセル化、継承を学ぶことができました。次回はもう少し規模の大きいゲームの設計の仕方を学んでいきます。