タイトル画面で一考
Posted: 2010年5月30日(日) 16:03
ちょこちょことDXライブラリについて勉強して、(おそらく)一番簡単(であろう)クイズゲームを作ってみることにしました。タイトル画面で選択肢を選ぶところで、下のようなプログラムを作成しました。
GAMESTARTの値の増減で選択肢を選ぶという流れなのですが、パソコンの処理速度のせいか、上下キーでGAMESTARTの値を変えると、いっきにGAMESTARTの値が2くらい増えたりして、うまくありません。
どんなテクニックを使えばうまくいくでしょうか?
最初は分岐をGAMESTART=1,3,5の値をとるとき、選択肢として処理をして、2,4の場合は自動的に1増やす、あるいは減らすというプログラムにしたのですが、これもいまいちな操作性で……
よろしくお願いいたします。
---------------
#include "DxLib.h"
int FontHandle[20];//FontHandle配列を宣言
char Key[256];//Key配列を宣言
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
int GAMESTART=1;
SetGraphMode(1024,768,32) ;// 画面モードの変更
FontHandle[0]= CreateFontToHandle("MS 明朝" , 30 , 2 , DX_FONTTYPE_NORMAL);//FontHandle[0]がフォントデータを取得
FontHandle[1]= CreateFontToHandle("MS 明朝" , 20 , 2 , DX_FONTTYPE_NORMAL);//FontHandle[0]がフォントデータを取得
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されていない
if(GAMESTART==1){
DrawStringToHandle( 290 , 150 ,"(仮名前)クイズゲーム", GetColor(255,255,255) , FontHandle[0] ) ;
DrawStringToHandle( 400 , 300 ,"ゲームを始める", GetColor(255,255,255) , FontHandle[1] ) ;
DrawStringToHandle( 400 , 350 ,"記録を見る", GetColor(0,255,255) , FontHandle[1] ) ;
DrawStringToHandle( 400 , 400 ,"ゲームを終わる", GetColor(0,255,255) , FontHandle[1] ) ;
if(Key[KEY_INPUT_DOWN]){
GAMESTART++;
}
ScreenFlip();//裏画面を表画面に反映
}
if(GAMESTART==2){
DrawStringToHandle( 290 , 150 ,"(仮名前)クイズゲーム", GetColor(255,255,255) , FontHandle[0] ) ;
DrawStringToHandle( 400 , 300 ,"ゲームを始める", GetColor(0,255,255) , FontHandle[1] ) ;
DrawStringToHandle( 400 , 350 ,"記録を見る", GetColor(255,255,255) , FontHandle[1] ) ;
DrawStringToHandle( 400 , 400 ,"ゲームを終わる", GetColor(0,255,255) , FontHandle[1] ) ;
if(Key[KEY_INPUT_DOWN]){
GAMESTART++;
}
if(Key[KEY_INPUT_UP]){
GAMESTART--;
}
ScreenFlip();//裏画面を表画面に反映
}
if(GAMESTART==3){
DrawStringToHandle( 290 , 150 ,"(仮名前)クイズゲーム", GetColor(255,255,255) , FontHandle[0] ) ;
DrawStringToHandle( 400 , 300 ,"ゲームを始める", GetColor(0,255,255) , FontHandle[1] ) ;
DrawStringToHandle( 400 , 350 ,"記録を見る", GetColor(0,255,255) , FontHandle[1] ) ;
DrawStringToHandle( 400 , 400 ,"ゲームを終わる", GetColor(255,255,255) , FontHandle[1] ) ;
if(Key[KEY_INPUT_UP]){
GAMESTART--;
}
if(Key[KEY_INPUT_RETURN]){//Enterキーを押すとゲーム終了。
break;
}
ScreenFlip();//裏画面を表画面に反映
}
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
---------------------------------
GAMESTARTの値の増減で選択肢を選ぶという流れなのですが、パソコンの処理速度のせいか、上下キーでGAMESTARTの値を変えると、いっきにGAMESTARTの値が2くらい増えたりして、うまくありません。
どんなテクニックを使えばうまくいくでしょうか?
最初は分岐をGAMESTART=1,3,5の値をとるとき、選択肢として処理をして、2,4の場合は自動的に1増やす、あるいは減らすというプログラムにしたのですが、これもいまいちな操作性で……
よろしくお願いいたします。
---------------
#include "DxLib.h"
int FontHandle[20];//FontHandle配列を宣言
char Key[256];//Key配列を宣言
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
int GAMESTART=1;
SetGraphMode(1024,768,32) ;// 画面モードの変更
FontHandle[0]= CreateFontToHandle("MS 明朝" , 30 , 2 , DX_FONTTYPE_NORMAL);//FontHandle[0]がフォントデータを取得
FontHandle[1]= CreateFontToHandle("MS 明朝" , 20 , 2 , DX_FONTTYPE_NORMAL);//FontHandle[0]がフォントデータを取得
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されていない
if(GAMESTART==1){
DrawStringToHandle( 290 , 150 ,"(仮名前)クイズゲーム", GetColor(255,255,255) , FontHandle[0] ) ;
DrawStringToHandle( 400 , 300 ,"ゲームを始める", GetColor(255,255,255) , FontHandle[1] ) ;
DrawStringToHandle( 400 , 350 ,"記録を見る", GetColor(0,255,255) , FontHandle[1] ) ;
DrawStringToHandle( 400 , 400 ,"ゲームを終わる", GetColor(0,255,255) , FontHandle[1] ) ;
if(Key[KEY_INPUT_DOWN]){
GAMESTART++;
}
ScreenFlip();//裏画面を表画面に反映
}
if(GAMESTART==2){
DrawStringToHandle( 290 , 150 ,"(仮名前)クイズゲーム", GetColor(255,255,255) , FontHandle[0] ) ;
DrawStringToHandle( 400 , 300 ,"ゲームを始める", GetColor(0,255,255) , FontHandle[1] ) ;
DrawStringToHandle( 400 , 350 ,"記録を見る", GetColor(255,255,255) , FontHandle[1] ) ;
DrawStringToHandle( 400 , 400 ,"ゲームを終わる", GetColor(0,255,255) , FontHandle[1] ) ;
if(Key[KEY_INPUT_DOWN]){
GAMESTART++;
}
if(Key[KEY_INPUT_UP]){
GAMESTART--;
}
ScreenFlip();//裏画面を表画面に反映
}
if(GAMESTART==3){
DrawStringToHandle( 290 , 150 ,"(仮名前)クイズゲーム", GetColor(255,255,255) , FontHandle[0] ) ;
DrawStringToHandle( 400 , 300 ,"ゲームを始める", GetColor(0,255,255) , FontHandle[1] ) ;
DrawStringToHandle( 400 , 350 ,"記録を見る", GetColor(0,255,255) , FontHandle[1] ) ;
DrawStringToHandle( 400 , 400 ,"ゲームを終わる", GetColor(255,255,255) , FontHandle[1] ) ;
if(Key[KEY_INPUT_UP]){
GAMESTART--;
}
if(Key[KEY_INPUT_RETURN]){//Enterキーを押すとゲーム終了。
break;
}
ScreenFlip();//裏画面を表画面に反映
}
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
---------------------------------