エンディング処理追加
ついにミニゲーム制作もこれで最後になります。
とはいっても基本中の基本の技術ばかりなので、徐々にレベルアップしていきます。
さっそく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#の言語の基本とオブジェクト指向のポリモーフィズム、カプセル化、継承を学ぶことができました。次回はもう少し規模の大きいゲームの設計の仕方を学んでいきます。