素朴な質問ですが

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

素朴な質問ですが

#1

投稿記事 by dic » 17年前

ただいまシューティングを制作しているのですが、ソースコードの美しさというか、
保守的な目で見て、どのようなコーティングスタイルをとるのか迷っています

具体例を挙げると
img[0]=LoadGraph("test00.bmp");
img[1]=LoadGraph("test01.bmp");
img[2]=LoadGraph("test02.bmp");
img[3]=LoadGraph("test03.bmp");
img[4]=LoadGraph("test04.bmp");
img[5]=LoadGraph("test05.bmp");
img[6]=LoadGraph("test06.bmp");
img[7]=LoadGraph("test07.bmp");
img[8]=LoadGraph("test08.bmp");
img[9]=LoadGraph("test09.bmp");
//-------------------------------------------------------------------
char str[80];
for(inti=0;i<10;i++){
 wsprintf(str,"test%02d.bmp",i);
 img=LoadGraph(str);
}
//-------------------------------------------------------------------
char *filename[/url] = {
"test00.bmp",
"test01.bmp",
"test08.bmp",
"test09.bmp",
};
for( int i=0; i<sizeof(filename)/sizeof(filename[0]); i++ ) {
img = LoadGraph( filename );
}


のように3通りの方法があるのですが、どのコーティングスタイルにするか迷っています
「これがいいよ」とか意見ないでしょうか?

御津凪

Re:素朴な質問ですが

#2

投稿記事 by 御津凪 » 17年前

こういう手はどうでしょうか?
// 読み込む画像の数
#define IMGLIST_COUNT 10

// 画像IDの配列
int img[IMGLIST_COUNT];

// 画像読み込みリスト
const char* ImgFileList[IMGLIST_COUNT] = {
	// 長くなるのでここは省略...
};

// 読み込み処理
for(int i = 0;i < IMGLIST_COUNT;++i){
	img=LoadGraph(ImgFileList);
}

後で画像数が変わったとき、変更する部分が少なくて手間が省けます。

dic さんの3番目の手も同じように手間が省けますが、省ける箇所が違いますね。

Justy

Re:素朴な質問ですが

#3

投稿記事 by Justy » 17年前

 諸々考えると、3ですね。


>保守的な目で見て、どのようなコーティングスタイルをとるのか迷っています

 1つ目は1~3個くらいならともかく、10個もあったら「ない」です。

 確実に連番に出来る(後々欠番が出来たりしない)のなら、2つ目は問題なしです。

 3つ目は普通にいいと思います。
 強いて言うなら、配列 imgの要素数が 配列 filenameの要素数以上に
なっている保証が欲しい(forループ回数のように配列 filenameに連動するといいですね)かな、
ということと、出来れば filename配列はconst char * const texture_file_list[/url]のように constをつけて
あると尚良しです。

 ちなみに、この配列 filenameは関数の中に書きますか? 外に書きますか?

dic

Re:素朴な質問ですが

#4

投稿記事 by dic » 17年前

>御津凪さん
なるほどさらに改良できるのですね
参考になります

>Justyさん
これは関数の中に書きますね

たかぎ

Re:素朴な質問ですが

#5

投稿記事 by たかぎ » 17年前

C++らしくするなら、
const char* const filename[/url] = {
    "test00.bmp",
    "test01.bmp",
    "test08.bmp",
    "test09.bmp",
  };
  const std::size_t n = sizeof filename / sizeof filename[0];
  std::vector<int> img;
  std::transform(filename + 0, filename + n, std::back_inserter(img), &LoadGraph);
ですね。
後から動的にimgに追加を行うのでなければ、std::vectorの代わりにstd::tr1::arrayを使ってもよいでしょう。

Justy

Re:素朴な質問ですが

#6

投稿記事 by Justy » 17年前

>これは関数の中に書きますね
 なら、staticも付けてあげると、関数が呼ばれる度に配列を作らなくて
済むようになります。

dic

Re:素朴な質問ですが

#7

投稿記事 by dic » 17年前

なるほどそういう手法もあるのですね
参考になりました
ありがとうございました

閉鎖

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