ページ 11

DrawGraphなどをヘッダファイルにして扱う

Posted: 2012年6月22日(金) 13:34
by bonbo
先日はありがとうございました。
早速ですが質問させていただきます。
Dxライブラリについて質問です。画像を扱うDrawGraph関数などをヘッダファイルとして一つの関数にまとめるのはどうすればよいのでしょうか。
今は下のような状態です。
--------------------------------------------------------------------------------

コード:

#include "DxLib.h"
 
char Key[256];
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
        SetDrawScreen( DX_SCREEN_BACK );        //裏画面に設定
             int test[3];
             test[0]=LoadGraph("test00.png");
             test[1]=LoadGraph("test01.png");
             test[2]=LoadGraph("test02.png");
        while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
              //↑メッセージ処理         ↑画面をクリア          ↑キーボード入力状態取得       ↑ESCが押されていない

             DrawGraph(10,10,test[0],TRUE);               //この3行をヘッダファイルにして扱いたい
             DrawGraph(10,10,test[1],TRUE);                        //
                     DrawGraph(10,10,test[2],TRUE);                //  


        ScreenFlip();//裏画面を表画面に反映
        }
 
        DxLib_End();
        return 0;
}
-------------------------------------------------------------------------------------------
わかりにくくてすみません。よろしくおねがいします。

Re: DrawGraphなどをヘッダファイルにして扱う

Posted: 2012年6月22日(金) 18:18
by nil
この3行をヘッダファイルにして扱いたい、とありますが
どういうことですか? 詳しくお願いします

Re: DrawGraphなどをヘッダファイルにして扱う

Posted: 2012年6月22日(金) 18:48
by bonbo
>涼雅さん
ありがとうございます。
たとえばなんですが、

コード:

int gazou(int test[],int n){
for(int i=0;i<n;i++)
       DrawGraph(10,10,test[i],TRUE);               //この3行をヘッダファイルにして扱いたい
};
こういうヘッダファイルを作って

コード:



#include "DxLib.h"
#include "gazou.h"
char Key[256];
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
        SetDrawScreen( DX_SCREEN_BACK );        //裏画面に設定
             int test[3];
             test[0]=LoadGraph("test00.png");
             test[1]=LoadGraph("test01.png");
             test[2]=LoadGraph("test02.png");
             const int n=3;
        while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
              //↑メッセージ処理         ↑画面をクリア          ↑キーボード入力状態取得       ↑ESCが押されていない
               gazou(test,n);
        ScreenFlip();//裏画面を表画面に反映
        }
 
        DxLib_End();
        return 0;
} 

みたいなことがやりたいのですがうまくいかなくて…

Re: DrawGraphなどをヘッダファイルにして扱う

Posted: 2012年6月22日(金) 21:19
by ookami
こんにちは。ookamiです。
処理をいくつかまとめて別のファイルに動かして、メインプログラムをすっきりさせたい、ということですよね。
http://www33.ocn.ne.jp/~loreley/FSB/c04.html
↑このあたりは参考になりますでしょうか?

Re: DrawGraphなどをヘッダファイルにして扱う

Posted: 2012年6月22日(金) 21:48
by みけCAT
bonbo さんが書きました:みたいなことがやりたいのですがうまくいかなくて…
具体的に、どううまくいかないのですか?
(期待した実行結果と実際の実行結果、エラーメッセージなどを書いてください)

Re: DrawGraphなどをヘッダファイルにして扱う

Posted: 2012年6月23日(土) 00:27
by bonbo
>ookamiさん
そうでした、#include"DxLib.h"入れ忘れてました。ありがとうございます。
>みけCATさん
ありがとうございます。
エラーメッセージを書くのを忘れていました。
すみませんでした。

みなさんありがとうございました。また何かあったらよろしくお願いします。
以下成功したプログラム
--------------------------------------------------
ヘッダファイル

コード:

#include "DxLib.h"
int gazou(int test[],int n){
for(int i=0;i<n;i++)
       DrawGraph(10,10,test[i],TRUE);               //この3行をヘッダファイルにして扱いたい
return(0);
}; 
メイン関数

コード:

#include "DxLib.h"
#include "gazou.h"
char Key[256];
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
        SetDrawScreen( DX_SCREEN_BACK );        //裏画面に設定
             int test[3];
             test[0]=LoadGraph("test00.png");
             test[1]=LoadGraph("test01.png");
             test[2]=LoadGraph("test02.png");
             const int n=3;
        while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
              //↑メッセージ処理         ↑画面をクリア          ↑キーボード入力状態取得       ↑ESCが押されていない
               gazou(test,n);
        ScreenFlip();//裏画面を表画面に反映
        }
 
        DxLib_End();
        return 0;
} 



Re: DrawGraphなどをヘッダファイルにして扱う

Posted: 2012年6月23日(土) 09:05
by beatle
解決しているようですが一つ指摘させていただきますと、ヘッダファイルに関数定義を書くのはよくありません。関数のプロトタイプ宣言だけをヘッダファイルに書いて、関数定義は.cファイルに書くのが通例です。

現状ではヘッダファイルの中身が以下ですね。

コード:

#include "DxLib.h"
int gazou(int test[],int n){
for(int i=0;i<n;i++)
       DrawGraph(10,10,test[i],TRUE);               //この3行をヘッダファイルにして扱いたい
return(0);
};
これを、ヘッダファイルには以下の部分だけを書きます。(ちなみに最後のセミコロンは余分です。たまたまエラーにはなっていませんけど)

コード:

int gazou(int test[],int n);
これが関数gazouのプロトタイプ宣言です。そして、.cファイル(どのファイルでも構いませんが、僕ならgazou.cファイルを作ると思います)に以下の内容を書きます。

コード:

#include "DxLib.h"
int gazou(int test[],int n){
for(int i=0;i<n;i++)
       DrawGraph(10,10,test[i],TRUE);               //この3行をヘッダファイルにして扱いたい
return(0);
}
なぜこうしたほうがいいかを理解するには、ソースコードをビルドする過程(コンパイル、リンクなど)を詳しく勉強する必要があります。

Re: DrawGraphなどをヘッダファイルにして扱う

Posted: 2012年6月24日(日) 14:09
by Dixq (管理人)
この辺の説明は

http://dixq.net/g/

の「ゲームプログラミング設計」に書いていますのでよければご覧ください。