簡単RPG講座11-4。メニューの総仕上げ編。その4

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

簡単RPG講座11-4。メニューの総仕上げ編。その4

投稿記事 by softya(ソフト屋) » 14年前

[gameMain.cpp]
いよいよゲーム本編に組み込みます。

●ヘッダです
今回追加した、パーティとメニューを追加します。

CODE:

#include "party.h"
#include "menu.h"
●定数
メニュー側に移したので以下のenumを削除します。

CODE:

//	メニューの状態
enum  {
	MENU_STATE_TOP,		//メニューTOP
	MENU_STATE_POWER,	//つよさ
	MENU_STATE_ITEM,	//アイテム
	MENU_STATE_MAGIC,	//まほう

	MENU_STATE_MAX,	//メニューの状態の数
};
●構造体
ゲーム本編のデータの構造体ですが、メニューの状態管理オブジェクトがなくなっていて主人公のパラメータが追加されました。

CODE:

//	ゲーム本編のデータの構造体。
typedef struct {
	GameMainInitType_t initType;	//初期化タイプ
	int bFirstInit;					//一回目の初期化済みのフラグ。
	STATEMNG_OBJECT StateObj;		//ゲーム本編の状態管理オブジェクト
	int beforeBattleInState;		//バトル開始前の状態
	//	主人公のパラメータ(セーブ対象)
	PlayerParam_t playerParam;		//プレイヤーパラメータ
	//	マップ移動に関連したデータ(セーブ対象を含む)
	MapMoveInfo_t mapMoveData;
} GameMainData_t;
●GameMain_Init
初期化は、メニューの状態管理オブジェクトが無くなって代わりにメニューの初期化とパーティ(プレーヤーのパラメータ)を初期化が追加されています。

CODE:

//----------------------------------------------------------------------
//	ゲーム本編の初期化
//----------------------------------------------------------------------
void GameMain_Init(GameMainInitType_t initType)
{
	//	モードの設定
	s_GameMainData.initType = initType;
	
	//	初回?
	if( s_GameMainData.bFirstInit == FALSE ) {
		s_GameMainData.bFirstInit = TRUE;
		//	ゲーム本編の状態管理オブジェクトの作成。
		//	オブジェクトと言ってもC++のクラスとは無関係です。
		s_GameMainData.StateObj = STM_Init(GAMEMAIN_STATE_MAX);
		//	主人公キャラオブジェクトの作成。
		s_GameMainData.mapMoveData.PlayerObj = char_Load(PLAYER_FILENAME,PLAYER_CHAR_XNUM,PLAYER_CHAR_YNUM);
		//	主人公キャラオブジェクトの仮の初期座標や向き
		s_GameMainData.mapMoveData.player_px = ((SCREEN_X/CHAR_PIXEL_SIZEX)/2-1) * CHAR_PIXEL_SIZEX;
		s_GameMainData.mapMoveData.player_py = ((SCREEN_Y/CHAR_PIXEL_SIZEY)/2+2) * CHAR_PIXEL_SIZEY;
		s_GameMainData.mapMoveData.player_muki = CHAR_MUKI_DOWN;
		//	マップ管理の初期化
		map_Init(g_MapDefDatas);
		//	イベント処理の初期化
		event_Init("town");	//初期スタートのマップ情報
		//	起動するイベントの情報を設定する。
		event_SetEvent(EVENT_TYPE_NEW_START,0);	//初期スタート時イベント
		//	パーティ(プレーヤーのパラメータ)を初期化
		party_init(&(s_GameMainData.playerParam));
		//	メニュー初期化
		menu_Init();
	}
	
	//	ゲーム本編の状態を初期化
	STM_ChangeState(s_GameMainData.StateObj,GAMEMAIN_STATE_MAPLOAD);//マップロード処理へ遷移。
}
●GameMain_End
ゲーム本編の終了は、メニューの状態管理オブジェクトが無くなって代わりにメニュー終了が追加されています。

CODE:

//----------------------------------------------------------------------
//	ゲーム本編の終了
//----------------------------------------------------------------------
void GameMain_End()
{
	//	ゲーム本編の状態管理オブジェクトの破棄
	STM_End(s_GameMainData.StateObj);
	//	主人公キャラオブジェクトの破棄。
	char_Delete(s_GameMainData.mapMoveData.PlayerObj);
	//	マップ管理の終了
	map_End();
	//	メニュー終了
	menu_End();
}
●GameMain_Menu
メニューはmenu.cppに中身が引っ越したので凄くシンプルでになりました。
menu_Main()からの戻り値がTUREならメニューを閉じでマップ移動に遷移します。
それ以外はメニューを継続します。

CODE:

//----------------------------------------------------------------------
//	メニュー中
//----------------------------------------------------------------------
static void GameMain_Menu()
{
	//	今のフレーム
	int frame = STM_GetFrameCount(s_GameMainData.StateObj);
	
	//	実際のメニュー処理
	if( menu_Main(frame,&(s_GameMainData.playerParam)) ) {
		//	メニューが終了ならば全ウィンドウを消去。
		winmng_DelAllWin();
		//	次のフレームで遷移。
		STM_ChangeState(s_GameMainData.StateObj,GAMEMAIN_STATE_MOVE);//マップ移動へ遷移。
	}
	
	//	マップとキャラクタ表示処理
	mapMove_Draw(&s_GameMainData.mapMoveData,frame,FALSE);
	
	//	有効なウィンドウの描画
	winmng_Draw();
}
以上メニューでした。

最後に、今回のプロジェクトです。

[拡張子 zip は無効化されているため、表示できません]

今回は、TKOZさんに頼んでマップを変更してもらっていますので前回と変わっています。
なのでデータとしてもダウンロードして下さい。

次回はダンジョンの接続とお店、宝箱処理をお届けする予定です。

コメントはまだありません。