C言語Ⅱ④(2025/10/15)

マップエディタの作成

[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,				// 消去
};

コメント

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