我目前是从Python背景转入学习C#的,还在逐渐掌握其内部机制。
现在,假如我要开发一个游戏,以Magic: the Gathering或其他流行的收集卡牌游戏为基础进行简单说明。在这样的游戏中,有多张可以使用的卡牌,这些卡牌都有不同的类型和效果。例如,可以有生物卡牌或法术卡牌等。
这些不同类型的卡牌具有不同的属性。例如,生物卡牌会有攻击值(attack
)和生命值(health
)两种属性,而法术卡牌可能只有一个效果属性(effect
)。然而,所有这些卡牌仍然都是卡牌,在某些方面还是有共性的,比如说花费属性(cost
)。这些不同的卡牌可能由管理者类(Manager
)来管理。下面是这款游戏的代码样例:
public class Manager
{
public CreatureCard card1 = new CreatureCard();
public SpellCard card2 = new SpellCard();
}
public class Card
{
public int cost;
}
public class CreatureCard : Card
{
public int attack;
public int health;
}
public class SpellCard : Card
{
public SpellEffect effect;
}
我想做的基本上是创建卡片并将它们存储在管理类中,而不预先知道它们是法术还是生物。管理类可能如下所示:
public class Manager
{
public Card card1;
public Card card2;
}
这些卡牌将从其他地方分配。
现在,这并不真正有效。例如,没有办法访问卡的health
属性。这是相当合理的,因为卡片甚至可能没有health
属性。
这就是为什么我正在寻找一种可以运行的方法,同时保持结构大致相同。所以会有一个Card
类,其中包含了很多东西,并从中派生出其他类(CreatureCard
, SpellCard
)。
是否有一种方法使其工作?我来自Python,所以这种方法在C#中可能完全错误。如果是这样,请告诉我我可以使用哪种方法来代替我现在试图使其正常工作的方法。
health
还是effect
字段? - rae1