ちょー簡単RPG講座の場合は大雑把に概要を決めてあるだけなので、とても行き当たりばったりで詳細設計と製作をしています。
みんながこんないい加減な設計しているんじゃなくて私なりの方法ですのでお断りしておきます。
作るものの概要を書く。
ほんとに簡単に書きます。
ウィンドウ・システム(メニュー選択・会話用)
バトルシステムでもシナリオでも使用する。
必要な機能を羅列する。
単に思いつくまま羅列して、後でカテゴリごとにまとめます。
任意サイズの窓を任意の場所に表示。
半透明?
メッセージ表示の機能
枠内に収めるのと禁則機能。
一文字づつモード/一括モード
キー待ち機能
メニュー選択、縦と横
マルチウィンドウで管理
ウィンドウの階層処理が必要
アクティブなウィンドウを最前面に描画
16ウィンドウぐらい管理できたら良いかも(根拠なし。たぶん5個ぐらいで足りる)。
関数と引数を仮に決めてみる。
必要な機能の羅列から機能を満たす関数を書きだしています。
気に入るまで何回も書きなおした結果です。
// ウィンドウの生成・破棄
ウィンドウ番号 = window_NewWin(サイズ、表示座標、ウィンドウ名); マルチなウィンドウを管理できる。
window_DelWin(ウィンドウ番号);
window_DelAllWin();
// ウィンドウの切り替え
window_SetActiveWin(ウィンドウ番号); アクティブ(前面)なウィンドウを番号で切り替える。
ウィンドウ番号 = window_GetActiveWin();
// ウィンドウにメッセージを表示。アクティブなウィンドウに表示する。
window_SetMsg(文字列);
BOOL 出力終了フラグ = window_UpdateMsg(SPEED); 文字列の表示位置をスピードに合わせて進める。
// ウィンドウにメニューを表示。アクティブなウィンドウに表示する。
window_SetMenu(メニュー項目リスト);
選択番号 = window_SelectMenu();
// 有効なウィンドウの描画。全てのウィンドウを表示する。
window_Draw();
実際に利用例を書いてみて問題がないか検証します。
static int msg_winno = -1;
// 最初のフレーム?
if( frame == 0 ) {
// ウィンドウを生成してメッセージを設定。
msg_winno = window_NewWin(20,5,10,10,"テスト");
window_SetMsg("テストメッセージですよ。");
}
// 毎フレームの更新
if( window_UpdateMsg(50) ) {
// メッセージが終了ならばウィンドウを消去。
window_DelWin(msg_winno);
// シナリオを次に進める。
未定
}
// 有効なウィンドウの描画
window_Draw();
この後に問題が出たら関数のところに戻って修正します