少なくとも概念的には、敵のクラス(うなり声、バグなど) と敵のインスタンスを区別する必要があります。クラスは敵の初期のヘルス/ヒットポイントを定義しますが、インスタンスは個々の統計と位置を持つ実際にスポーンされた敵を表します。
これをモデル化するには、2 つのオプションがあります。
クラス/インスタンス モデル
2 つのクラスを作成します。1 つは敵のクラス用、もう 1 つは敵のインスタンス用です。はインスタンスEnemyClass
のファクトリーです。Enemy
class EnemyClass
{
public string Name { get; }
public int InitialHealth { get; }
public Enemy Spawn();
}
class Enemy
{
public EnemyClass Class { get; }
public int CurrentHealth { get; }
public Vector2D Position { get; }
}
// define enemy classes
EnemyClass gruntClass = new EnemyClass(...);
EnemyClass bugClass = new EnemyClass(...);
// spawn an enemy
Enemy enemy = gruntClass.Spawn();
プロトタイプモデル
クラスは 1 つだけEnemy
です。各敵クラスには、そのクラスの敵インスタンスのプロトタイプがあります。このプロトタイプはゲームには存在しません。敵をスポーンするには、プロトタイプのクローンを作成します。
class Enemy
{
public string Name { get; }
public int InitialHealth { get; }
public int CurrentHealth { get; }
public Vector2D Position { get; }
public Enemy Clone();
}
// define enemy prototypes
Enemy gruntPrototype = new Enemy(...);
Enemy bugPrototype = new Enemy(...);
// spawn an enemy
Enemy enemy = gruntPrototype.Clone();