マップエディタの作成
[1]基本仕様
プロジェクト名:mapediter
出力データはバイナリ
出力ファイル名は固定(追加機能で入力式or選択式にする)
地形チップの画像サイズ 50×50(初期は固定 追加機能で指定可能にする)
配置したい地形を選んでマップエリアに配置できるようにする
[2]画面レイアウトイメージ
ウインドウサイズ:1024x960
編集エリアと情報エリアを別々に生成して貼り付ける形で作成。
・追加機能として
塗りつぶし、範囲指定、など…
[3]作業内容抜粋
①ウインドウ内に編集エリア、情報エリアを表示するために別々のScreenを作成してそれぞれに描画を行う。
[4]クラス構成
Application Class
↓
EditScene Class
↓ ↓
EditArea Class InfoArea Class
ヘッダーファイルを作成。

(Application.h)
#pragma once
class Application
{
public:
static constexpr int WINDOW_SIZE_WID = 1024; //ウインドウ幅
static constexpr int WINDOW_SIZE_HIG = 768; //ウインドウ高さ
//コンストラクタ・デストラクタ
Application(void);
~Application(void);
//初期化・実行・更新・描画・破棄 はほぼ必要になるので作っておく。
bool SystemInit(void);
void Run(void);
void Update(void);
void Draw(void);
bool Release(void);
private:
};
関数定義を作成していく。
(Application.cpp)
//----------------------------------------------------
// map editor
// name:ゆき
//----------------------------------------------------
//Application class
#include<DxLib.h>
#include"Application.h"
Application::Application(void)
{
}
Application::~Application(void)
{
}
/*
*--------------------------------------------------
* 初期化処理(最初の一回のみ実行)
* Input:
* なし
* Output:
* bool true = 正常終了 / false = エラー
* ------------------------------------------------
*/
bool Application::SystemInit(void)
{
//システム設定処理
SetWindowText("MapEditor"); //ウインドウのタイトルテキスト ※DxLib内の関数だが、初期化前に使用可能
SetGraphMode(WINDOW_SIZE_WID, WINDOW_SIZE_HIG, 32); //ウインドウのサイズと色モード ※DxLib内の関数だが、初期化前に使用可能
ChangeWindowMode(true); //ウインドウの表示方法 true=ウインドウ false=フルスクリーン) ※DxLib内の関数だが、初期化前に使用可能
if (DxLib_Init() == -1)return false; //DxLibの初期化処理
return true;
}
void Application::Run(void)
{
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) {
Update(); //更新
Draw(); //描画
}
}
void Application::Update(void)
{
}
void Application::Draw(void)
{
}
bool Application::Release(void)
{
if (DxLib_End() == -1)return false;
return true;
}
(main.cpp)
//----------------------------------------------------
// map editor
// name:ゆき
//----------------------------------------------------
#include<DxLib.h>
#include"Application.h"
//---------------------------------
// WinMain関数
//---------------------------------
int WINAPI WinMain(HINSTANCE nInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
// アプリケーションクラスの実体化したオブジェクトの作成
Application apl;
// 初期化処理
if (apl.SystemInit() == false)return -1;
// ゲームの起動
apl.Run();
// 解放処理(終了処理)
if (apl.Release() == false)return -1;
return 0;
}
(StDefine.h)
#pragma once
const int MAP_CHIP_WID = 32; // マップチップ画像1個の幅
const int MAP_CHIP_HIG = 32; // マップチップ画像1個の高さ
const int EDIT_AREA_SX = 16; // 編集エリアの表示開始位置X
const int EDIT_AREA_SY = 16; // 編集エリアの表示開始位置Y
const int EDIT_AREA_WID = 768; // 編集エリアの幅
const int EDIT_AREA_HIG = 736; // 編集エリアの高さ
const int INFO_AREA_SX = (EDIT_AREA_SX + EDIT_AREA_WID + 8);
// 情報表示エリアの表示開始位置X
const int INFO_AREA_SY = EDIT_AREA_SY;
// 情報表示エリアの表示開始位置Y
const int INFO_AREA_WID = 216;
// 情報表示エリアの幅
const int INFO_AREA_HIG = EDIT_AREA_HIG;
// 情報表示エリアの高さ
// マップの最大サイズ
const int MAP_SIZE_X = 50;
const int MAP_SIZE_Y = 50;
//-------------------------
// 列挙型定義
//-------------------------
enum eLandFormKind {
E_LAND_NON = -1,
E_LAND_SEA, // 0:海
E_LAND_ASHORE, // 1:浅瀬
E_LAND_SAND, // 2:砂地
E_LAND_GRASS, // 3:草地
E_LAND_DARK_GRASS, // 4:濃い草地
E_LAND_BRIDGE_VER, // 5:橋(縦)
E_LAND_WATERSIDE, // 6:水際
E_LAND_FOREST, // 7:森
E_LAND_MOUNT_1, // 8:山1
E_LAND_BRIDGE_H, // 9:橋(横)
E_LAND_FLOOR_1, // 10:ダンジョン床1
E_LAND_FLOOR_2, // 11:ダンジョン床2
E_LAND_FLOOR_3, // 12:ダンジョン床3
E_LAND_FLOOR_4, // 13:ダンジョン床4
E_LAND_FLOOR_5, // 14:ダンジョン床5
E_LAND_WALL_HOR, // 15:ダンジョン壁(横)
E_LAND_WALL_CORNER, // 16:ダンジョン壁(角)
E_LAND_MOUNT_2, // 17:山2
E_LAND_MOUNT_3, // 18:山3
E_LAND_MOUNT_4, // 19:山4
E_LAND_STAIRS_1, // 20:階段1
E_LAND_STAIRS_2, // 21:階段2
E_LAND_STAIRS_3, // 22:階段3
E_LAND_STAIRS_4, // 23:階段4
E_LAND_STAIRS_5, // 24:階段5
E_LAND_WALL, // 25:ダンジョン壁
E_LAND_WALL_VER, // 26:ダンジョン壁(縦)
E_LAND_MOUNT_5, // 27:山5
E_LAND_MOUNT_6, // 28:山6
E_LAND_MOUNT_7, // 29:山7
E_LAND_MAX,
E_LAND_CLEAR, // 消去
};

コメント