我正在做一些 OO 分析来找出游戏组件之间的关系,这样我就可以设计类了。 我最终会使用 C#。
要求
我的游戏将包括:
棋子:方 block 、卡片、筹码
地方:网格、堆栈
可能的棋子放置:
- block 可以放在网格上(需要网格,x,y)
- 卡片可以堆叠放置(需要堆叠、位置)
- 计数器可以放在网格上(需要网格,x,y)
- 计数器也可以放在堆栈的顶部(需要堆栈、位置)
分析
- 作为接口(interface) (IPiece) 或抽象类 (Piece) 的 Piece。 (哪个最好?)
- Block、Card 和 Counter 作为 IPiece 或 Piece 子类的实现。
- 作为接口(interface) (IPlace) 或抽象类 (Place) 放置。 (哪个最好?)
- Grid 和 Stack 作为 IPlace 或 Place 子类的实现。
然后我就糊涂了...
每一件作品都有一个位置,所以那里有一种关系。 这是一对一的关系,因为每件作品都必须有一个且只有一个位置。
但我如何确保 block 只能放在网格上,卡片只能放在堆栈上,而计数器只能放在任何一个上?
在此先感谢您的帮助。
最佳答案
But how do I ensure that Blocks can only go on grids, Cards only on stacks and Counters on either?
您可以利用泛型和 generic type constraints在编译时执行这些规则
public interface IPiece<TPlace> where TPlace : IPlace
{
TPlace Place { get; }
void PlaceOn(TPlace place);
}
public class Block : IPiece<Grid>
{
private Grid _place;
public Grid Place
{
get { return _place; }
}
public void PlaceOn(Grid place)
{
_place = place;
}
}
关于c# - 两个相关继承层次结构的OOAD(游戏组件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29606582/