Dixqさん問題4,5の回答

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

Dixqさん問題4,5の回答

#1

投稿記事 by ひよこ » 16年前

4. Zキーが押された瞬間一度だけ「押されました」とprintfDxで表示するプログラムを書いて下さい。(裏画面処理使う)
5. Aキーが押された瞬間一度だけドの音が鳴るプログラムを書いて下さい。(裏画面処理使う)

#include "DxLib.h"

int GetHitKeyStateAll_2(int KeyStateBuf[/url]){
        char GetHitKeyStateAll_Key[256];
        GetHitKeyStateAll( GetHitKeyStateAll_Key );
        for(int i=0;i<256;i++){
                if(GetHitKeyStateAll_Key==1) KeyStateBuf++;
                else                            KeyStateBuf=0;
        }
        return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
    int Key[256];
    
    ChangeWindowMode(TRUE);//ウィンドウモード
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

    while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
          //↑メッセージ処理         ↑画面をクリア            ↑入力状態を保存       ↑ESCが押されていない

        DrawFormatString(0,0,GetColor(255,255,255),"%d",Key[KEY_INPUT_Z]);//エンター入力カウント

        if(Key[KEY_INPUT_Z]==1)//今の瞬間押されたら
           printfDx( "押されました" ) ;

        ScreenFlip();
	
    }



    DxLib_End();
    return 0;
}

#include "DxLib.h"

int GetHitKeyStateAll_2(int KeyStateBuf[/url]){
        char GetHitKeyStateAll_Key[256];
        GetHitKeyStateAll( GetHitKeyStateAll_Key );
        for(int i=0;i<256;i++){
                if(GetHitKeyStateAll_Key==1) KeyStateBuf++;
                else                            KeyStateBuf=0;
        }
        return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
    int Key[256];
    
    ChangeWindowMode(TRUE);//ウィンドウモード
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
   int Sound;
    Sound = LoadSoundMem("do.ogg");
    while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
          //↑メッセージ処理         ↑画面をクリア            ↑入力状態を保存       ↑ESCが押されていない

        DrawFormatString(0,0,GetColor(255,255,255),"%d",Key[KEY_INPUT_Z]);//エンター入力カウント

        if(Key[KEY_INPUT_A]==1)//今の瞬間押されたら
           PlaySoundMem(Sound, DX_PLAYTYPE_BACK);
        ScreenFlip();
	
    }



    DxLib_End();
    return 0;
}

これでよろしいのでしょうか?

box

Re:Dixqさん問題4,5の回答

#2

投稿記事 by box » 16年前

> これでよろしいのでしょうか?

まず「ご自分で」テストしてみる、というわけにはいきませんか?

ひよこ

Re:Dixqさん問題4,5の回答

#3

投稿記事 by ひよこ » 16年前

>まず「ご自分で」テストしてみる、というわけにはいきませんか?
問題4で一瞬だけ表示するか?わからないので上のように質問しました。
問題5はいちおうテストしてあります。

Dixq (管理人)

Re:Dixqさん問題4,5の回答

#4

投稿記事 by Dixq (管理人) » 16年前

だいたいあってます。
ただ、少しおしいのが、Keyが初期化されていないので、おかしな値が出る場合があります。
館のサンプルではKeyがグローバル変数だったので、初期化の必要がありませんでしたが、
ローカル変数を使う時は初期化しないといけません。

int Key[256]={0,};

このように書くか、memset関数で0で初期化して下さい。

後はよさそうです。
ここまで出来たら最初できなかった問題が出来ると思いますが、どうでしょう?

ひよこ

Re:Dixqさん問題4,5の回答

#5

投稿記事 by ひよこ » 16年前

Dixqさんありがとうございます。実は3の. Zキーが押されれいる間DrawStringで「押されています」と表示するプログラムを書いて下さい。(裏画面処理使う) がわからないのですが。

閉鎖

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