今回はシューティングゲームでのオプションの攻撃についての質問です。
現在、グラディウスのような追尾するオプションを付け、そこから攻撃をさせようとしています。
しかし、今のプログラムだとオプションの数、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;
}
}
}