前の指摘のようにint Key[256];にしたのですがいまだに動きません。
C言語はいまいち知識がないのでこれをどう対処すればいいのかわかりません。
ご教授お願いします。
#include "DxLib.h"
//グローバル変数の宣言と初期化
int counter = 0;
int color_white; //どこかで使っているのか?
int y = 0;
int White; //色とy座標の宣言
int count = 0;
int FontHandle;
int image = 0; //ハンドルを受け取るためのint型変数を宣言
int image2 = 0; //ハンドルを受け取るためのint型変数を宣言
int image3 = 0; //ハンドルを受け取るためのint型変数を宣言
int Sound; //音楽データへのハンドル
int MenuExec;
int OptionExec;
int function_status = 0;
int Key[256];
#define DISPLAY_POS_X 500
#define DISPLAY_POS_Y(i) (200 + 50 * (i))
#define N 5 // 項目数
#define M -1
void message_box(){ //スクリーン設定
int flag;
flag=MessageBox(
NULL ,
TEXT("Yでフルスクリーン、Nでウィンドウモードです。") ,
TEXT("スクリーン設定") ,
MB_YESNO | MB_ICONQUESTION );
if(flag==IDNO)
ChangeWindowMode( TRUE );
}
void SetColor(){
color_white = GetColor(255,255,255); //白色ハンドルを取得
}
void char_disp(int White,int y){
DrawString( DISPLAY_POS_X - 20 , DISPLAY_POS_Y(y) , "■" , White );
DrawString( DISPLAY_POS_X , DISPLAY_POS_Y(0) , "SHOOTING" , White );
DrawString( DISPLAY_POS_X , DISPLAY_POS_Y(1) , "MUSICROOM" , White );
DrawString( DISPLAY_POS_X , DISPLAY_POS_Y(2) , "OPTION" , White );
DrawString( DISPLAY_POS_X , DISPLAY_POS_Y(3) , "MANUAL" , White );
DrawString( DISPLAY_POS_X , DISPLAY_POS_Y(4) , "QUIT" , White );
}
void Backmusic(){
Sound = LoadSoundMem( "music/harutoman.wav" ); //wavファイルを読み込み、ハンドルをint型変数へ格納
PlaySoundMem( Sound , DX_PLAYTYPE_BACK );//バックグラウンド再生
}
void wait_fanc(){
int term;
static int t=0;
term = GetNowCount()-t;
if(16-term>0)
Sleep(16-term);
t=GetNowCount();
return;
}
void fps(){
int i;
static int t=0,ave=0,f[60];
f[count%60]=GetNowCount()-t;
t=GetNowCount();
if(count%60==59){
ave=0;
for(i=0;i<60;i++)
ave+=f[i];
ave/=60;
}
if(ave!=0){
DrawFormatString(0, 0,GetColor(255,255,255),"%.1fFPS",1000.0/(double)ave);
DrawFormatString(0,20,GetColor(255,255,255),"%dms" ,ave);
}
return;
}
int GetHitKeyStateAll_2(int KeyStateBuf[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) KeyStateBuf[i]++;
else KeyStateBuf[i]=0;
}
return 0;
}
void Opening(){
DrawFormatString(0,0,GetColor(255,255,255),"%d",Key[KEY_INPUT_RETURN]);//エンター入力カウント
DrawGraph( 0 , 0 , image , FALSE ) ; //gazo/taitoru2.pngを表示
DrawGraph( 10 , 10 , image2 , TRUE ) ; //gazo/rogo.pngを表示
char_disp(White,y); // 文字を描画
DrawString(300,450, "TCC festival" , White);//文字列表示
fps();
count++;
if( Key[KEY_INPUT_DOWN]==1 ||( Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30)){
// たった今押したか、30カウンター以上押しっぱなしかつ5回に一度
y++;
if(y==N) // y座標がNなら(選択が一番下なら)
y=0; // 選択座標を一番上にy++;
}
if( Key[KEY_INPUT_UP]==1 ||( Key[KEY_INPUT_UP]%5==0 && Key[KEY_INPUT_UP]>30)){
// たった今押したか、30カウンター以上押しっぱなしかつ5回に一度
y--;
if(y==M) // y座標がNなら(選択が一番下なら)
y=4; // 選択座標を一番上にy++;
}
if( Key[KEY_INPUT_X]==1 ||( Key[KEY_INPUT_X]%5==0 && Key[KEY_INPUT_X]>30)){
// たった今押したか、30カウンター以上押しっぱなしかつ5回に一度
y=4; // 選択座標を一番上にy++;
}
if( Key[KEY_INPUT_P]==1 ||( Key[KEY_INPUT_P]%5==0 && Key[KEY_INPUT_P]>30)){
// たった今押したか、30カウンター以上押しっぱなしかつ5回に一度
SaveDrawScreen( 0 , 0 , 640 , 480 , "snapshot/th000.bmp" ) ; // 画面全体を snapshot/th000.bmp として保存
}
} //Opening終了
void Menu(){
DrawGraph( 0 , 0 , image3 , TRUE ) ; //gazo/rogo.pngを表示
if(Key[KEY_INPUT_X]==1)
function_status=2;
}
void Danjon(){
DrawString(100,180,"ダンジョン画面 (cをプッシュ)",White);
if(Key[KEY_INPUT_C]==1)
function_status=3;
}
void attack(){
DrawString(100,220,"戦闘画面 (vをプッシュ)",White);
if(Key[KEY_INPUT_V]==1)
function_status=4;
}
void Ending(){
DrawString(100,260,"エンディング画面 (bをプッシュ)",White);
if(Key[KEY_INPUT_B]==1)
function_status=5;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
message_box(); //ウィンドウかフルスクリーンか変更する
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了
Backmusic(); //演奏
White = GetColor( 255 , 255 , 255 ) ; //色の取得
SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面に設定
SetMainWindowText( "時鏡 鉢帳録" ) ;// タイトルを変更
image = LoadGraph( "gazo/taitoru2.png" ); //gazo/taitoru2.pngのハンドルを代入
image2 = LoadGraph( "gazo/shot/nc16156.png" ); //gazo/rogo.pngのハンドルを代入
image3 = LoadGraph( "gazo/option.png" ); //gazo/option.pngのハンドルを代入
DrawFormatString(0,0,GetColor(255,255,255),"%d",Key[KEY_INPUT_RETURN]);//エンター入力カウント
while( 1 ){
ClearDrawScreen(); // 裏画面のデータを全て削除
; switch(function_status){
case 0:
Opening();
break;
case 1:
Menu();
break;
case 2:
Danjon();
break;
case 3:
attack();
break;
case 4:
Ending();
break;
default:
DxLib_End() ; // DXライブラリ使用の終了処理
return 0;
break;
}
if( ProcessMessage() == -1 ) break ; //エラーが起きたら終了
ScreenFlip() ; // 裏画面データを表画面へ反映
wait_fanc();
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}