ページ 11

switch文を使った整理

Posted: 2018年10月20日(土) 01:34
by student
自分は今rpgを作っているのですがロードする画像やbgm、セリフ、レベルごとのステータスの上がり値をswitch文を使いまとめようと思っています。
ですが、私は高1の雑魚c言語初心者なのでswitch文の処理の重さがどの程度なのかわかりません。
switch文はデータの整理に適してるのでしょうか?

やろうとしている事
switch (haikei){
case 0://始まりの村の背景
handle=loadgraph("画像/hajimari.png");
break;
case1~つづく

Re: switch文を使った整理

Posted: 2018年10月20日(土) 17:52
by みけCAT
student さんが書きました:
6年前
switch文の処理の重さがどの程度なのかわかりません。

コード:

int input(void);
void func(int);

int main(void) {
    int x = input();
    switch (x) {
        case 0:
            func(123);
            break;
        case 1:
            func(456);
            break;
        case 2:
            func(789);
            break;
    }
    return 0;
}
というコードを書いてCompiler Explorerでコンパイルしてみたところ、
どのコンパイラでも比較と条件分岐の連続になるようでした。
数十個~数百個程度の分岐であれば、おそらく画像のロードの方がはるかに重いでしょう。
student さんが書きました:
6年前
switch文はデータの整理に適してるのでしょうか?
場合によるでしょう。
例えば、文字列をキーにしてデータを取り出したい時には向きません。
「やろうとしている事」は、

コード:

// 関数外
const char* haikei_list[] = {
    "画像/hajimari.png", // 始まりの村の背景
    ~つづく
};

// 関数内
handle=loadgraph(haikei_list[haikei]);
のように配列でまとめる方がいいかもしれません。

Re: switch文を使った整理

Posted: 2018年10月21日(日) 11:37
by 参照魚
switch文でゲーム(シナリオやバトルシーン)の流れそのものを記述したいのであればc言語の機能だけではちょっと厳しいです。c言語は複数フレームにまたがる処理や平行して複数のオブジェクトを同時に処理する機能がないので、プログラマーがその部分を実装する必要があります。ゲームライブラリやスクリプトエンジンを利用する事で解決できますが、勉強や挑戦の意味で自分自身で作成したいのであればそれはそれでアリだと思います。

Re: switch文を使った整理

Posted: 2018年11月07日(水) 17:43
by student
返信遅れてすみません。おかげさまで見やすくまとめることができました。
丁寧に教えていただきありがとうございます。
これから配列を使ってデータをまとめていこうと思います。