ページ 11

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

Posted: 2012年10月28日(日) 18:38
by クールアイス
こんばんは、お久しぶりなクールアイスです。
今回はシューティングゲームでのオプションの攻撃についての質問です。

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

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

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

Posted: 2012年10月28日(日) 19:33
by あたっしゅ
20 行目から 52 行目は、

コード:

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

そういう問題じゃないの ?

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

Posted: 2012年10月28日(日) 19:51
by クールアイス
>>あたっしゅさん ご回答ありがとうございます。

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

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

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

Posted: 2012年10月28日(日) 23:23
by Tatu
一つの弾を出す処理を関数にしてまとめるとよいのではないでしょうか。
引数を使って簡単にパラメータを変更できるようにするとよいでしょう。