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

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

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

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

とりあえず仮組みで組んでみましょう。
どんな動作をするかはコメントで書いてあります。
それと、あまりにOS的な名前なのでwindow_からwinmng_に変えました。

まずヘッダの宣言です。
[winmng.h]
●関数の宣言
関数の宣言です。ほとんど設計で書いた通りです(一部修正)。

CODE:

#ifndef INCLUDE_WINMNG_H
#define INCLUDE_WINMNG_H

//----------------------------------------------------------------------
//	関数の宣言
//----------------------------------------------------------------------

//	ウィンドウの生成・破棄
extern int winmng_NewWin(int px,int py,int sizex,int sizey,char *winName);	//ウィンドウを生成します。
extern void winmng_DelWin(int winno);										//ウィンドウを破棄します。
extern void winmng_DelAllWin();												//全てのウィンドウを破棄します。

//	ウィンドウの切り替え
extern void winmng_SetActiveWin(int winno);	//	アクティブ(前面)なウィンドウを番号で切り替えます。
extern int winmng_GetActiveWin();			//	今アクティブなウィンドウ番号を得ます。

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

//	ウィンドウにメッセージを表示。アクティブなウィンドウに表示する。
extern void winmng_SetMsg(char *msg);		//	ウィンドウに表示するメッセージを設定
extern BOOL winmng_UpdateMsg(int speed);	//	文字列の表示位置をスピードに合わせて進める。

//	ウィンドウにメニューを表示。アクティブなウィンドウに表示する。
extern void winmng_SetMenu(char **menulist);//	ウィンドウに表示するメニューを設定。
extern int winmng_SelectMenu();				//	ウィンドウのメニューを変更する。

//	有効なウィンドウの描画。全てのウィンドウを表示する。
extern void winmng_Draw();

#endif /*INCLUDE_WINMNG_H*/
[winmng.cpp]
プログラム側は本当に仮組みです。

●先頭部分です。
前回で書いたものとほとんど同じですが、メッセージの部分だけは設計変更されています。

CODE:

#include 

#include "main.h"
#include "winMng.h"


//----------------------------------------------------------------------
//	内部関数
//----------------------------------------------------------------------

//----------------------------------------------------------------------
//	定数
//----------------------------------------------------------------------

//	ウィンドウの最大登録個数
#define WINDOW_MNG_MAX	16

//	表示モード
enum {
	WIN_MODE_MSG,	//メッセージ・モード
	WIN_MODE_MENU,	//メニュー・モード
};

//----------------------------------------------------------------------
//	構造体
//----------------------------------------------------------------------

//	ウィンドウ毎の情報構造体
typedef struct {
	int bLive;		//	有効なウィンドウ
	//	ウィンドウ情報
	int px;			//	ウィンドウのピクセル位置X
	int py;			//	ウィンドウのピクセル位置Y
	int sizex;		//	ウィンドウのピクセルサイズX
	int sizey;		//	ウィンドウのピクセルサイズY
	char *winName;	//	ウィンドウ名
	//	処理モード
	int mode;		//	現在のモード(メッセージ、メニュー)
	//	メッセージ
	char *msg;			//	文字列
	int msgStartPoint;	//	表示開始位置
	int msgNowPoint;	//	表示現在位置
	int startFrame;		//	開始フレーム
	//	メニュー
	char **menuList;//メニュー項目リスト
	int menuNums;	//メニュー項目数
	int menuNo;		//選択番号
} WindowData_t;

//	Windowの制御構造体
typedef struct {
	WindowData_t win[WINDOW_MNG_MAX];	//	ウィンドウ毎のデータ
	int ActiveNo;	//	アクティブ・ウィンドウの番号
	int frame;		//	今のフレーム
} WindowMng_t;
●変数の宣言です

CODE:

//----------------------------------------------------------------------
//	変数
//----------------------------------------------------------------------

//	Windowの制御構造体の実体。
static WindowMng_t s_winData = {
	{FALSE},-1,-1,
};
●関数の仮組み
仮組みですが関数内にコメントで動作を書いてあります。

CODE:

//----------------------------------------------------------------------
//	ウィンドウを生成します。
//----------------------------------------------------------------------
int winmng_NewWin(int px,int py,int sizex,int sizey,char *winName)
{
	//	bLiveがFALSEなウィンドウをサーチします。
	
		//	仮にメッセージのないメッセージウィンドウとして、
		//	ウィンドウをパラメータを設定します。
	
	return -1;
}

//----------------------------------------------------------------------
//	ウィンドウを破棄します。
//----------------------------------------------------------------------
void winmng_DelWin(int winno)
{
	//	該当番号のウィンドウのbLiveをFALSEにします。
	//	もしアクティブ番号と同じだったら
		//	アクティブ番号を無効にします。
		//	最後からbLive==TRUEなウィンドウを探して、その番号をアクティブとします。
}

//----------------------------------------------------------------------
//	全てのウィンドウを破棄します。
//----------------------------------------------------------------------
void winmng_DelAllWin()
{
	//	全てのウィンドウのbLiveをFALSEにします。
}

//----------------------------------------------------------------------
//	アクティブ(前面)なウィンドウを番号で切り替えます。
//----------------------------------------------------------------------
void winmng_SetActiveWin(int winno)
{
	//	指定されたウィンドウ番号のウィンドウがbLive==TRUEななら
	//	アクティブ番号として登録します。
}

//----------------------------------------------------------------------
//	今アクティブなウィンドウ番号を得ます。
//----------------------------------------------------------------------
int winmng_GetActiveWin()
{
	//	アクティブ番号を戻り値として返します。
	
	return -1;
}

//----------------------------------------------------------------------
//	基準フレーム設定。一番最初に呼び出すこと。
//----------------------------------------------------------------------
void winmng_SetFrame(int frame)
{
	//	基準となるフレームを設定します。
}

//----------------------------------------------------------------------
//	ウィンドウに表示するメッセージを設定
//----------------------------------------------------------------------
void winmng_SetMsg(char *msg)
{
	//	アクティブなウィンドウにメッセージを設定して
	//	パラメータを初期化します。開始フレームは、ここで記録します。
}

//----------------------------------------------------------------------
//	文字列の表示位置をスピードに合わせて進める。
//----------------------------------------------------------------------
BOOL winmng_UpdateMsg(int speed)
{
	//	開始フレームと今フレームから経過フレーム数を求めます。
	//	それをスピードで割れば今の表示ポイントが分かります。
	//	文字描画を描画なしの仮で呼び出して、文字列端で決定ボタンを
	//	押されたらTRUEで戻ります。
	
	//	文字列終端に達していない。
	return FALSE;
}

//----------------------------------------------------------------------
//	ウィンドウに表示するメニューを設定。
//----------------------------------------------------------------------
void winmng_SetMenu(char **menulist)
{
	//	メニューリストを設定します。
	//	メニュー項目数を数えます。
	//	選択番号は0に仮定します。
}

//----------------------------------------------------------------------
//	ウィンドウのメニューを変更する。
//----------------------------------------------------------------------
int winmng_SelectMenu()
{
	//	キー入力で選択します。今のところ上下のみ予定。
	//	決定ボタンを押されたら、押されたときに指していたメニュー番号を持ち帰ります。
	
	//	選択が決定されていない。
	return -1;
}

//----------------------------------------------------------------------
//	有効なウィンドウの描画。全てのウィンドウを表示する。
//----------------------------------------------------------------------
void winmng_Draw()
{
	//	bLiveなウィンドウを若い番号から表示します。ただし、アクティブウィンドウは後回しに。
	//	アクティブなウィンドウを表示します。
}
次回は色々と変わりそうなので、ちゃんと組み上げたものをお届けします。
最後に編集したユーザー softya(ソフト屋) on 2010年11月21日(日) 09:37 [ 編集 1 回目 ]

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