選択画面

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
エメ

選択画面

#1

投稿記事 by エメ » 14年前

選択画面を作っているのですがキーの処理がうまくいきません。
前の指摘のように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 ;                                               // ソフトの終了
}
 

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 選択画面

#2

投稿記事 by h2so5 » 14年前

このソースだとKey[256]の中身が全く変わりませんよ。
GetHitKeyStateAll_2 をどこかで呼ばないと。

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

Re: 選択画面

#3

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

最初は10月頃質問されていますよね?今までの間はC言語の勉強はされていなかったのでしょうか?
今後、ちゃんとプログラムを組むためにはC言語の学習は絶対必要です。
平行学習で構わないので、C言語の入門書を購入されることをお勧めします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

エメ

Re: 選択画面

#4

投稿記事 by エメ » 14年前

ありがとうこざいます
解決しました
最近までちょっと忙しかったのでプログラミングに触れていませんでした
本を持っているのでちゃんと読んでみようと思います

エメ

Re: 選択画面

#5

投稿記事 by エメ » 14年前

解決済みにするのを忘れていました

閉鎖

“C言語何でも質問掲示板” へ戻る