DXライブラリを使って簡単なシューティングゲームを作ろうと思っています。
(現在は設計を考えている段階で、まともに動くものはまだありません)
現在、自機が弾を発射する部分の設計をしており、
以下の様に作成しました。
#include <vector>
enum class BulletKind
{
TypeA,
TypeB
};
class BaseBullet
{
private:
float angle, speed;
public:
BaseBullet() {};
};
class BulletA : public BaseBullet
{
public:
BulletA() {};
};
class BulletB : public BaseBullet
{
public:
BulletB() {};
};
class BulletMgr
{
private:
std::vector<BaseBullet*> m_bullet;
public:
// 弾の発射
void Shoot(BulletKind kind)
{
// Bulletの種類が増えるにつれ、以下の処理が長くなる
switch (kind)
{
case BulletKind::TypeA: {
BulletA* a = new BulletA();
m_bullet.push_back(a);
break;
}
case BulletKind::TypeB: {
BulletB* b = new BulletB();
m_bullet.push_back(b);
break;
}
}
// いろいろ~
}
};
弾を発射する際は、BulletMgrのShoot関数を使用し
BulletMgrクラスで全部の弾を管理するような仕組みにしようと思っています。
ただし、弾は複数種類用意したいので、弾のクラスをそれぞれ作っています(BulletA, BulletB)
そこで、質問なのですが、上記のコードではswitch文でそれぞの弾のインスタンス(?)を作成していますが、
この方法だと弾の種類が増えた場合(BulletC, BulletDなど)どんどんcase文が増えていき、増やすたびに手動でcase文を追加しないといけません。
上記のkindの種類によって、生成するクラスを変える方法(?)や、もしくは他に適切な方法があれば、
ご教授頂きたくお願い致します。
使用環境
・windows10
・visual studio 2019