我正在用C#设计纸牌游戏。每张卡都是Card
类的一个实例,它包含两个属性:卡的唯一ID和对CardData
对象的引用。类型CardData
的对象实现了关于Card
在游戏规则中如何运作的方法。许多卡(例如,如果有多个俱乐部的插孔)可以引用相同的卡数据。
public class Card {
public int id;
public CardData card;
}
我的问题是我应该如何实施CardData
课程。我的第一直觉是设计一个抽象基类CardData
,其中包含一些方法,如WhenPlayed()
和WhenRemoved()
,然后为每个实现它们的卡都有一个子类。
public abstract class CardData () {
public abstract void WhenPlayed();
public abstract void WhenRemoved();
}
public class JackOfClubs : CardData () {
public override void WhenPlayed() {
Console.WriteLine( "You played a Jack of Clubs!" );
}
public override void WhenRemoved() {
Console.WriteLine( "Bye for now" );
}
}
但是,因为我从来不想实际实例化JackOfClubs
对象,而是实例化Card
并给它们引用JackOfClubs
类,所以有意义CardData
类和所有子类static
。这会产生一个问题,因为据我所知,静态类无法继承。
此外,我考虑使用interface
,但我想要默认方法的可能性。例如,如果我的CardData
个对象中有90%将WhenRemoved()
实现为“fore for now”,那么为每个子类重新键入它将会很烦人。我可以使用非抽象CardData
类来实现这一点,但不能使用接口。
我的问题是如果有的话,处理类结构的最佳或正确的方法是什么。
答案 0 :(得分:0)
我会做一个像please refer the diagram这样的设计,这样你就不会创建与许多卡一样多的类,实际上它们是同一个类的不同对象。因此,我们的工厂拥有一个名为Cards的自定义集合,它是具有类型和值的Card类的集合。您可以根据卡的类型和值实现播放方法。如果您正在玩一款不涉及所有卡片的游戏,这种设计工作正常,如果您将其扩展到多个纸牌游戏,如果您再添加一个类别卡片类别,此设计包含为好。希望这会有所帮助。