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

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

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

#1

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

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

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

しかし、今のプログラムだとオプションの数、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;
                }
            }
        }

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

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

#2

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

20 行目から 52 行目は、

コード:

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

そういう問題じゃないの ?
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

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

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

#3

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

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

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

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

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

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

#4

投稿記事 by Tatu » 11年前

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

閉鎖

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