スイッチを作りたくて

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

スイッチを作りたくて

#1

投稿記事 by OP » 14年前

あるプログラムがあるのですが、その画像と音をZキーが押されると発動するようにしたいのです。このプログラムです。↓

コード:

#include "DxLib.h"
 
typedef struct{
	int x,y,img;
}ch_t;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
    int image[2];
	char Key[256];
	ch_t ch;

    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
 
	ch.x =180;
	ch.y =0;

    SetDrawScreen( DX_SCREEN_BACK ) ;   //描画先を裏画面に設定

		PlayMusic( "サウンド/テスト.wav" , DX_PLAYTYPE_LOOP ) ; //マスタースパーク効果音
	LoadDivGraph( "画像/テスト.png" , 2 , 2 , 1 , 256 , 512 , image );//画像を分割してimage配列に保存

    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
            //↑メッセージ処理        ↑画面をクリア         ↑キーボード入力状態取得       ↑ESCが押されると終了
 
		if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右のボタンが押されたら
			ch.x++; //xの値を1増やす
		else if( Key[ KEY_INPUT_LEFT ] == 1 )
			ch.x--;
		else if(Key[ KEY_INPUT_DOWN ] == 1 )
			ch.y++;
		else if(Key[ KEY_INPUT_UP ] == 1 )
			ch.y--;

		ch.img=image[0];

                DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;
 
                ScreenFlip();//裏画面を表画面に反映
    }
 
    DxLib_End();
    return 0;
}
もしわかる人がいましたらわかりやすい返信お願いします。

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

Re: スイッチを作りたくて

#2

投稿記事 by h2so5 » 14年前

まずZキーが押されているかどうかの判定を入れましょう。

OP

Re: スイッチを作りたくて

#3

投稿記事 by OP » 14年前

こうでしょうか?

コード:


#include "DxLib.h"
 
typedef struct{
	int x,y,img;
}ch_t;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
    int image[2];
	char KeyBuf[256];
	ch_t ch;

    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
 
	ch.x =180;
	ch.y =0;

	GetHitKeyStateAll( Buf );

    SetDrawScreen( DX_SCREEN_BACK ) ;   //描画先を裏画面に設定

	if( Buf[ KEY_INPUT_Z ] == 1 )
		PlayMusic( "サウンド/テスト.wav" , DX_PLAYTYPE_LOOP ) ; //マスタースパーク効果音
	LoadDivGraph( "画像/テスト.png" , 2 , 2 , 1 , 256 , 512 , image );//画像を分割してimage配列に保存

    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
            //↑メッセージ処理        ↑画面をクリア         ↑キーボード入力状態取得       ↑ESCが押されると終了
 
		if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右のボタンが押されたら
			ch.x++; //xの値を1増やす
		else if( Key[ KEY_INPUT_LEFT ] == 1 )
			ch.x--;
		else if(Key[ KEY_INPUT_DOWN ] == 1 )
			ch.y++;
		else if(Key[ KEY_INPUT_UP ] == 1 )
			ch.y--;

		ch.img=image[0];

                DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;
 
                ScreenFlip();//裏画面を表画面に反映
    }
 
    DxLib_End();
    return 0;
}

アバター
沖 滉均
記事: 237
登録日時: 14年前
住所: K県F市

Re: スイッチを作りたくて

#4

投稿記事 by 沖 滉均 » 14年前

こうでしょうかと聞く前に自分で動作を確認してみましたか?
コードを見る限りでは確認していなさそうですね。
そもそも、ビルドが通らないはずです。
There is no royal road to learning.
codeタグで指定できる言語
画像

OP

Re: スイッチを作りたくて

#5

投稿記事 by OP » 14年前

ビルドしたところKeyとBufが定義されてないと出ました。どうやって宣言するのでしょうか?

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

Re: スイッチを作りたくて

#6

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

OPさんはC言語から勉強中なんですよね?
だったら、まずどの関数でエラーが出ているか正確に書いてください。
で、その関数では、どの様な引数が要求されるか調べてみましょう。

「DXライブラリ置き場 リファレンスページ」
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html

どうですか?KeyとBufってどんな定義が必要ですか?
回答をお待ちしています。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

白い時空
記事: 18
登録日時: 14年前
住所: 埼玉県さいたま市

Re: スイッチを作りたくて

#7

投稿記事 by 白い時空 » 14年前

コード:

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
    int image[2];
    char KeyBuf[256];
    ch_t ch;
ここを見ればわかりますが、宣言されているのはKeyでもBufでもなくKeyBufになっています。
KeyとBufをKeyBufに変更するか、または
char Key[256],Buf[256];
と宣言を変更するかしてください。

OP

Re: スイッチを作りたくて

#8

投稿記事 by OP » 14年前

ビルドできました。

コード:


#include "DxLib.h"
 
typedef struct{
	int x,y,img;
}ch_t;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
    int image[2];
	char Key[256],Buf[256];
	ch_t ch;

    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
 
	ch.x =180;
	ch.y =0;

	GetHitKeyStateAll( Buf );

    SetDrawScreen( DX_SCREEN_BACK ) ;   //描画先を裏画面に設定

	if( Buf[ KEY_INPUT_Z ] == 1 )
		PlayMusic( "サウンド/テスト.wav" , DX_PLAYTYPE_LOOP ) ; //マスタースパーク効果音
	LoadDivGraph( "画像/テスト.png" , 2 , 2 , 1 , 256 , 512 , image );//画像を分割してimage配列に保存

    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
            //↑メッセージ処理        ↑画面をクリア         ↑キーボード入力状態取得       ↑ESCが押されると終了
 
		if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右のボタンが押されたら
			ch.x++; //xの値を1増やす
		else if( Key[ KEY_INPUT_LEFT ] == 1 )
			ch.x--;
		else if(Key[ KEY_INPUT_DOWN ] == 1 )
			ch.y++;
		else if(Key[ KEY_INPUT_UP ] == 1 )
			ch.y--;

		ch.img=image[0];

                DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;
 
                ScreenFlip();//裏画面を表画面に反映
    }
 
    DxLib_End();
    return 0;
}

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

Re: スイッチを作りたくて

#9

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

目的のことは実現されましたか?
なぜ、こんなことを聞くかというと論理的に状況を説明するクセを付ける必要があるからです。
プログラムというのはコンピュータにやりたい事を論理的に記述するってことですからね。

それと
char Key[256],Buf[256];
は無駄があります。
それは何でしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

OP

Re: スイッチを作りたくて

#10

投稿記事 by OP » 14年前

すいません…わかりませんでした。なんかちょっと勉強してできるかなと思ってしまいました。
また勉強しなおしてみます。

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

Re: スイッチを作りたくて

#11

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

ここで諦めずに、このプログラムを前に言った日本語で書きだしてみてみませんか?
なんか、同じようなことを繰り返しているので日本語での書き出し自体がちゃんと出来ていない気がします。
問題があればアドバイスしますので、挑戦してみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

OP

Re: スイッチを作りたくて

#12

投稿記事 by OP » 14年前

日本語で訳してみました。コメントで書いてないところはわからないとこです。

コード:

#include "DxLib.h" //含むDXライブラリ
 
typedef struct{
    int x,y,img;
}ch_t;
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
    int image[2]; //イメージの2を表示
    char Key[256],Buf[256];
    ch_t ch;
 
    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
 
    ch.x =180; //Xの180
    ch.y =0; //Yの0表示
 
    GetHitKeyStateAll( Buf );
 
    SetDrawScreen( DX_SCREEN_BACK ) ;   //描画先を裏画面に設定
 
    if( Buf[ KEY_INPUT_Z ] == 1 )
        PlayMusic( "サウンド/テスト.wav" , DX_PLAYTYPE_LOOP ) ; //テスト効果音
    LoadDivGraph( "画像/テスト.png" , 2 , 2 , 1 , 256 , 512 , image );//画像を分割してimage配列に保存
 
    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
            //↑メッセージ処理        ↑画面をクリア         ↑キーボード入力状態取得       ↑ESCが押されると終了
 
        if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右のボタンが押されたら
            ch.x++; //xの値を1増やす
        else if( Key[ KEY_INPUT_LEFT ] == 1 ) //左のボタンが押されたら
            ch.x--; //Xの値を1減らす
        else if(Key[ KEY_INPUT_DOWN ] == 1 ) // 下のボタンが押されたら
            ch.y++; // Yの値を増やす
        else if(Key[ KEY_INPUT_UP ] == 1 ) // 上のボタンが押されたら
            ch.y--; // Yの値を減らす
 
        ch.img=image[0];
 
                DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;
 
                ScreenFlip();//裏画面を表画面に反映
    }
 
    DxLib_End();
    return 0;
}

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

Re: スイッチを作りたくて

#13

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

日本語化するには、このプログラムは難しすぎたかもしれませんね。

コード:

#include "DxLib.h" //含むDXライブラリ
 
typedef struct{	←これは構造体(struct)でtypedefで型名を新たに付与しています。それぞれ調べてみてください。調べて分からなければ構造体ってなんですか?ぐらいから聞いてもらって構いません。
    int x,y,img;
}ch_t;
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
    int image[2]; //イメージの2を表示	←ちがいます。int型の配列で、ある情報を蓄えます。
    char Key[256],Buf[256]; ← char型の配列です。ある情報を蓄えるために使います。
    ch_t ch; ← 上の構造体と関係しています。
 
    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
 
    ch.x =180; //Xの180 ←具体的に行っていることを書いてくださいね。何が起こるのでしょうか?
    ch.y =0; //Yの0表示
 
    GetHitKeyStateAll( Buf ); ← DXライブラリのリファレンスを調べられましたか?で、調べた分からないことがあれば聞いてください。
 
    SetDrawScreen( DX_SCREEN_BACK ) ;   //描画先を裏画面に設定
 
    if( Buf[ KEY_INPUT_Z ] == 1 ) ← ここにあるZキーの処理はいつ動作するでしょうか? プログラムの流れ、動作タイミングを理解してそれを書きましょう。
        PlayMusic( "サウンド/テスト.wav" , DX_PLAYTYPE_LOOP ) ; //テスト効果音
    LoadDivGraph( "画像/テスト.png" , 2 , 2 , 1 , 256 , 512 , image );//画像を分割してimage配列に保存
 
 	
 	それぞれの関数や一行毎の機能を元からのコメントを消して自分の言葉で書いてください。それでやっと理解したことになります。
 	なので、調べる、日本語で書くを徹底的に行なってください。最初のうちは、こんな短いコメントになるはずは無いんですよ。
 	いろいろ調べても分からなかれば質問してください。
 	以下の部分も、同様です。
 	
    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
            //↑メッセージ処理        ↑画面をクリア         ↑キーボード入力状態取得       ↑ESCが押されると終了
 
        if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右のボタンが押されたら
            ch.x++; //xの値を1増やす
        else if( Key[ KEY_INPUT_LEFT ] == 1 ) //左のボタンが押されたら
            ch.x--; //Xの値を1減らす
        else if(Key[ KEY_INPUT_DOWN ] == 1 ) // 下のボタンが押されたら
            ch.y++; // Yの値を増やす
        else if(Key[ KEY_INPUT_UP ] == 1 ) // 上のボタンが押されたら
            ch.y--; // Yの値を減らす
 
        ch.img=image[0];
 
                DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;
 
                ScreenFlip();//裏画面を表画面に反映
    }
 
    DxLib_End();
    return 0;
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

OP

Re: スイッチを作りたくて

#14

投稿記事 by OP » 14年前

ありがとうございます!!これを元にどうしたらいいか考えたいと思います!!

閉鎖

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