以下は私が製作中のRPGのメニュー画面を簡素化した物です。
DxLibを用いています。
void title_gamen()
{
int y = 300;
int title = LoadGraph("dat/gazou/ini/title.png"); // タイトル画像ハンドル
int White = GetColor(255,255,255);
while(!ProcessMessage() && !GetHitKeyStateAll_2(Key) && !ClearDrawScreen() && !Key[KEY_INPUT_ESCAPE]){
DrawGraph( 0 , 0 , title , FALSE ) ; //タイトル表示
DrawString( 260 , y , "→" , White ); // 矢印(選択を示す)
DrawString( 280 , 300 , "はじめから" , White );
DrawString( 280 , 320 , "つづきから" , White );
// もし『はじめから』(y=300)でボタンが押されたら
if(y == 300 && Key[KEY_INPUT_RETURN] == 1){
/* 初期化処理 */
ClearDrawScreen();
return ;
}
// もし『つづきから』(y=320)でボタンが押されたら
if(y == 320 && Key[KEY_INPUT_RETURN] == 1){
bool hh = load_gamen(mc_temp); // ロード画面へ
ClearDrawScreen();
if(hh == true) return; // もしロード成功したらゲーム開
else continue; // そうでなければループを続ける。
}
if( Key[KEY_INPUT_DOWN]==1 || ( Key[KEY_INPUT_UP]%5==0 && Key[KEY_INPUT_UP]>30)){
// たった今押したか、30カウンター以上押しっぱなしかつ5回に一度
y+=20;
if(y==340){ // y座標が200なら(選択が一番下なら)
y=300; // 選択座標を一番上に
}
}
if( Key[KEY_INPUT_UP]==1 || ( Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30)){
// たった今押したか、30カウンター以上押しっぱなしかつ5回に一度
y-=20;
if(y==280){ // y座標が200なら(選択が一番下なら)
y=320; // 選択座標を一番上に
}
}
ScreenFlip();
}
}
↓↓ソースの説明↓↓
緑
画面を表示しています。
ここではタイトルの名前を出したり、『初めから』『続きから』などを表示してます。
矢印のy座標に変数を用いていますが、これは現在どこを指し示しているかを表すために変数としています。
青
ここでは矢印のy座標がある場所でReturn(Enter)キーが押されたら、それに見合う処理を行うようにしています。
私の場合は『初めから』では主人公に関するデータを初期化し、この関数を抜けてゲーム開始としています。
『続きから』ではロード画面に飛んでデータをロードするようにしています。
赤
矢印のy座標を変化させる働きを担っています。
↓キーや↑キーが押されたらy座標の値を変化させています。
私は上記の様に3つの役割に分けています。
ただ、このソースでは選択肢の選択をするために矢印を用いていますが、画像を用いたり、選択されている物は色を変えるなどをすると見た目が良くなると思います。
参考になれば幸いです。
