ちょー簡単RPG講座 設計・製作の手順公開2

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

ちょー簡単RPG講座 設計・製作の手順公開2

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

まず、前回の関数に抜けがあったので追加します。
フレーム値を渡さないとタイミングが管理できません。

関数と引数を仮に決めてみる。
必要な機能の羅列から機能を満たす関数を書きだしています。
気に入るまで何回も書きなおした結果です。

CODE:

//	ウィンドウの生成・破棄
ウィンドウ番号 = window_NewWin(サイズ、表示座標、ウィンドウ名);		マルチなウィンドウを管理できる。
window_DelWin(ウィンドウ番号);
window_DelAllWin();

//	ウィンドウの切り替え
window_SetActiveWin(ウィンドウ番号);	アクティブ(前面)なウィンドウを番号で切り替える。
ウィンドウ番号 = window_GetActiveWin();

//	基準フレーム設定。一番最初に呼び出すこと。
window_SetFrame(フレーム);

//	ウィンドウにメッセージを表示。アクティブなウィンドウに表示する。
window_SetMsg(文字列);
BOOL 出力終了フラグ = window_UpdateMsg(SPEED);	文字列の表示位置をスピードに合わせて進める。

//	ウィンドウにメニューを表示。アクティブなウィンドウに表示する。
window_SetMenu(メニュー項目リスト);
選択番号 = window_SelectMenu();

//	有効なウィンドウの描画。全てのウィンドウを表示する。
window_Draw();
仮のプログラムにもwindow_SetFrameを追加。
使うプログラムを仮に書いてみる。
実際に利用例を書いてみて問題がないか検証します。

CODE:

static int msg_winno = -1;

test_msg(int frame)
{
	//	最初のフレーム?
	window_SetFrame(frame);
	if( frame == 0 ) {
		//	ウィンドウを生成してメッセージを設定。
		msg_winno = window_NewWin(20,5,10,10,"テスト");
		window_SetMsg("テストメッセージですよ。");
	}
	//	毎フレームの更新
	if( window_UpdateMsg(50) ) {
		//	メッセージが終了ならばウィンドウを消去。
		window_DelWin(msg_winno);
		//	シナリオを次に進める。
		未定
	}
	//	有効なウィンドウの描画
	window_Draw();
}
以上、修正でした。


内部の管理変数や構造体を作る。
じゃあ、今回は構造体や定数を作っていきましょう。

まず最大ウィンドウ数は決め打ちです。

CODE:

//	ウィンドウの最大登録個数
#define WINDOW_MNG_MAX	16
で表示モードもメッセージ、メニューの2種類。

CODE:

//	表示モード
enum {
	WIN_MODE_MSG,	//メッセージ・モード
	WIN_MODE_MENU,	//メニュー・モード
};
ウィンドウ毎に必要な情報は

CODE:

//	ウィンドウ毎の情報構造体
typedef struct {
まず有効かどうかのフラグです。
	int bLive;		//	有効なウィンドウ
それとウィンドウの位置やサイズですね。あとウィンドウ名。
	//	ウィンドウ情報
	int px;			//	ウィンドウのピクセル位置X
	int py;			//	ウィンドウのピクセル位置Y
	int sizex;		//	ウィンドウのピクセルサイズX
	int sizey;		//	ウィンドウのピクセルサイズY
	char *winName;	//	ウィンドウ名
で先程も書いたモードです。
	//	処理モード
	int mode;		//	現在のモード(メッセージ、メニュー)
メッセージの時必要そうな要素。時間経過の計測や表示した位置を覚えます。
	//	メッセージ
	char *msg;		//	文字列
	int msgPoint;	//	表示位置
	int startFrame;	//	開始フレーム
メニューは、メニューのリストと今の選択番号が必要ですね。
	//	メニュー
	char **menuList;//メニュー項目リスト
	int menuNums;	//メニュー項目数
	int menuNo;		//選択番号
} WindowData_t;
で他に保持するものは、アクティブなウィンドウの番号と今のフレーム数が必要だと思います。

CODE:

//	Windowの制御構造体
typedef struct {
	WindowData_t win[WINDOW_MNG_MAX];	//	ウィンドウ毎のデータ
	int ActiveNo;	//	アクティブ・ウィンドウの番号
	int frame;		//	今のフレーム
} WindowMng_t;
とこんな感じでしょうか。今回は以上です。
どんな風に使うか関数と見比べて想像してみてください。
次回は、プログラムを発表します。

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