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

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

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

#1

投稿記事 by bonbo » 12年前

先日はありがとうございました。
早速ですが質問させていただきます。
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;
}
-------------------------------------------------------------------------------------------
わかりにくくてすみません。よろしくおねがいします。

nil
記事: 428
登録日時: 12年前

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

#2

投稿記事 by nil » 12年前

この3行をヘッダファイルにして扱いたい、とありますが
どういうことですか? 詳しくお願いします

bonbo

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

#3

投稿記事 by bonbo » 12年前

>涼雅さん
ありがとうございます。
たとえばなんですが、

コード:

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;
} 

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

アバター
ookami
記事: 214
登録日時: 13年前
住所: 東京都

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

#4

投稿記事 by ookami » 12年前

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

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#5

投稿記事 by みけCAT » 12年前

bonbo さんが書きました:みたいなことがやりたいのですがうまくいかなくて…
具体的に、どううまくいかないのですか?
(期待した実行結果と実際の実行結果、エラーメッセージなどを書いてください)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

bonbo

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

#6

投稿記事 by bonbo » 12年前

>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;
} 



beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

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

#7

投稿記事 by beatle » 12年前

解決しているようですが一つ指摘させていただきますと、ヘッダファイルに関数定義を書くのはよくありません。関数のプロトタイプ宣言だけをヘッダファイルに書いて、関数定義は.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);
}
なぜこうしたほうがいいかを理解するには、ソースコードをビルドする過程(コンパイル、リンクなど)を詳しく勉強する必要があります。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

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

#8

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

この辺の説明は

http://dixq.net/g/

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

閉鎖

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