至少在概念上,您需要区分敌人类别(咕噜声、虫子等)和敌人实例。该类定义了一个敌人的初始生命值/生命值,而一个实例代表了一个实际生成的具有个人统计数据和位置的敌人。
有两个选项可以对此进行建模。
类/实例模型
您创建了两个类:一个用于敌人类,一个用于敌人实例。这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();
原型模型
只有一类,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();