オプションからのショット

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
クールアイス
記事: 34
登録日時: 8年前

オプションからのショット

#1

投稿記事 by クールアイス » 8年前

こんばんは、お久しぶりなクールアイスです。
今回はシューティングゲームでのオプションの攻撃についての質問です。

現在、グラディウスのような追尾するオプションを付け、そこから攻撃をさせようとしています。

しかし、今のプログラムだとオプションの数、1度に出すショットの数に応じて関数を作らないといけない、非常に非効率的なプログラムになってしまっています(コピペしておいて非常に失礼な言い方ですが・・・)。

以下のプログラムをもっと効率のいい書き方にするにはどのようにすればいいでしょうか。

現在のプログラム

コード:

        private void OptionShot0()
        {
            int num = 0;

            //  ショット数分
            for (int i = 0; i < shot.Length; ++i)
            {
                //  フラグが立っていなかったら
                if (!shot[i].flag)
                {
                    //  共通な要素
                    shot[i].flag = true;
                    shot[i].count = 0;
                    shot[i].power = player.Power;
                    shot[i].speed = 20.0f;
                    shot[i].color = Color.White;
                    shot[i].angle = (float)(270 * Math.PI / 180);

                    //  弾によって違うもの
                    switch (num)
                    {
                        case 0:
                            {
                                shot[i].position.X = pOption.OpstionPosition[0].X;
                                shot[i].position.Y = pOption.OpstionPosition[0].Y - 10;
                                break;
                            }
                        case 1:
                            {
                                shot[i].position.X = pOption.OpstionPosition[1].X;
                                shot[i].position.Y = pOption.OpstionPosition[1].Y - 10;
                                break;
                            }
                        case 2:
                            {
                                shot[i].position.X = pOption.OpstionPosition[2].X;
                                shot[i].position.Y = pOption.OpstionPosition[2].Y - 10;
                                break;
                            }
                        case 3:
                            {
                                shot[i].position.X = pOption.OpstionPosition[3].X;
                                shot[i].position.Y = pOption.OpstionPosition[3].Y - 10;
                                break;
                            }
                        case 4:
                            {
                                shot[i].position.X = pOption.OpstionPosition[4].X;
                                shot[i].position.Y = pOption.OpstionPosition[4].Y - 10;
                                break;
                            }
                    }

                    //  個数カウント
                    ++num;

                    //  最大個数分カウントしたら抜ける
                    if (num == 5) break;
                }
            }
        }

アバター
あたっしゅ
記事: 334
登録日時: 10年前
住所: 東京23区
連絡を取る:

Re: オプションからのショット

#2

投稿記事 by あたっしゅ » 8年前

20 行目から 52 行目は、

コード:

                                shot[i].position.X = pOption.OpstionPosition[num].X;
                                shot[i].position.Y = pOption.OpstionPosition[num].Y - 10;
で、いいんじゃないですか ?

そういう問題じゃないの ?
手提鞄あたっしゅ、[MrAtassyu] http://ameblo.jp/mratassyu/
手提鞄屋魚有店(てさげかばんやうおありてん)
レスがついていないものを優先して、レスしています。時々、見当外れなレスをします。

クールアイス
記事: 34
登録日時: 8年前

Re: オプションからのショット

#3

投稿記事 by クールアイス » 8年前

>>あたっしゅさん ご回答ありがとうございます。

確かにcaseで分ける必要ありませんでしたね・・・。修正しました。

もう一つ問題があるのですが、このあとオプションから弾を出す時に2発、3発、・・・と増やしたいときは、どこを変更するのが拡張しやすくなるでしょうか。

アバター
Tatu
記事: 445
登録日時: 9年前
住所: 北海道

Re: オプションからのショット

#4

投稿記事 by Tatu » 8年前

一つの弾を出す処理を関数にしてまとめるとよいのではないでしょうか。
引数を使って簡単にパラメータを変更できるようにするとよいでしょう。

閉鎖

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