トップページ > 記事閲覧
変数が多いので、減らす方法ありませんか。
名前:たりお 日時: 2016/09/03 23:53

早速ですが質問させてください。ちなみにプログラミングは初心者です。 題名の通りなんですが、最近変数が多くなってきていて困っています。 数字を入れるための変数や、???=LoadGraph(), ???=LoadSoundMem() など、???のための変数など。 そこで思いついたのですが、むやみに変数をたくさん作らず、配列の中にこれらを格納できればいいなと思いました。 しかし、実際に試してみたところ、うまくいきませんでした。 以下がその大雑把なコードです int Hairetsu[10][50]{ LoadGraph("1.jpg"), . . LoadSoundMem("music.ogg"), . . } こんな感じで書いてみたのですが、案の定エラーです。 というわけで、どうすれば変数を減らすことができるのかという質問です。 できれば配列を使って、減らしたいです。それ以外の方法があれば、ぜご教授ください。。。 お願いします。
メンテ

Page: 1 |

Re: 変数が多いので、減らす方法ありませんか。 ( No.1 )
名前:管理人 日時:2016/09/04 17:08

データ定義の部分で関数を呼び出すのはできないので、LoadGraph や LoadSoundMem を 呼び出すのは関数内となりますが、一応このような方法で 配列にハンドルを入れることができます 〜〜〜 データ定義と宣言 // 1ファイルの情報を格納する構造体を定義 struct DATA { int Type; // 0:画像 1:音 const char *FilePath; // ファイルパス int Handle; // ハンドル }; // 画像の場合は 0, 音の場合は 1 を指定する配列を定義 DATA Hairetsu[10] = { { 0, "1.jpg" }, { 0, "2.jpg" }, { 0, "3.jpg" }, { 1, "music.ogg" }, { 1, "se.wav" }, { 0, "4.bmp" }, { 0, "5.png" }, { 1, "se2.wav" }, { 0, "title.jpg" }, { 1, "se3.wav" }, }; 〜〜〜 プログラム初期化処理 int i; // 画像の数だけ繰り返し for( i = 0 ; i < 10 ; i ++ ) { // Type が 0(画像) か 1(音) かで分岐 switch( Hairetsu[ i ].Type ) { case 0: // 画像の場合は LoadGraph で読み込み Hairetsu[ i ].Handle = LoadGraph( Hairetsu[ i ].FilePath ); break; case 1: // 音の場合は LoadSoundMem で読み込み Hairetsu[ i ].Handle = LoadSoundMem( Hairetsu[ i ].FilePath ); break; } }
メンテ
Re: 変数が多いので、減らす方法ありませんか。 ( No.2 )
名前:初期状態 日時:2016/09/04 18:05

どのようなゲームを作っていらっしゃるか存じませんが、大概の場合は構造体やクラスを使うと管理が楽になると思います 配列は、それぞれの内容を同じように扱えるときには便利ですが、 そうでないときには結局何番目にどんなデータが入っているかを把握しなくてはならないので、 変数以上に管理が厄介になります。 構造体を使うなら、 struct Enemy { int NormalGraph; int DamagedGraph; int AttackingGraph; int DamagedSE; int AttackSE; } 等のように、種類ごとに必要な画像や効果音をまとめたうえで、 Enemy enemies[ENEMY_NUM]; という配列を作成し、それに適宜ロードしていくといった方法があります。 これは、敵以外にも、マップチップや立ち絵にも有効です ただし、構造体では、必要な画像や音声の数が変わったときに対応しづらい(この敵は2種類攻撃方法があるんだけどなあ、とか)ので、 描画やロードなどの関数を宣言した基底クラスをつくり、敵の種類のかずだけ派生クラスを作って対応するというのがよいでしょう もしクラスを学習していないなら、学習しこれを使いこなせるようになることで、ソースコードの管理が素早くなります(書く量も減るはずです)
メンテ
Re: 変数が多いので、減らす方法ありませんか。 ( No.3 )
名前:たりお 日時:2016/09/04 20:52

管理人さん、初期状態さん、ご返答ありがとうございます。 なるほど、構造体ですか! 最近勉強したところなので、いきなり使えるとは・・・嬉しいです。 クラスで配列が使えるとは知っていたのですが、構造体でも可能なのですね!! ADVゲームを作っているので、これで変数を大量に作らずに音と画像を使えそうです。 本当にありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存