2017-05-08 34 views
2

我编写一个纸牌游戏(宇野/茅茅型),我有这样的设计问题:在纸牌游戏玩家和甲板方法

甲板包含卡两重叠,其中一个显示面,另一个显示背部。当游戏进行中并且玩家掷出一张牌时,它应该进入“面孔”堆栈。但是,当游戏结束时,最后一名玩家的牌应该回到“后退”牌堆上。

1)如果该甲板有两种方法用于添加卡(addToFacesStack和addToBacksStack)

2)如果该甲板具有addCards方法和决定本身其中堆叠的卡片应该去到(在甲板必须知道比赛的状态 - 正在进行/完成)?另外,当游戏正在进行时,并且玩家(知道规则并选择相应玩牌的玩家)将牌扔到“牌面”堆叠上,如果牌组“重新检查”玩家的牌移动有效吗?

在此先感谢您的建议!

卡罗琳

回答

1

我想你应该问的问题是:应该模型了解游戏的游戏逻辑或只是状态?

如果,那么你需要包括你的模型里面的游戏逻辑,因此你可以只addCards方法和Deck将自行决定添加网卡(一个或多个)。但是,在这种情况下,游戏模型和游戏逻辑紧密结合。如果您使用相同的模型来进行游戏的其他变体(使用不同的逻辑),则此选项将不合适。

如果NO,那么你就可以按照Boundary - Control - Entity设计模式。在这里,你需要有单独的方法来将卡添加到第一个或第二个堆栈。并将游戏逻辑编码到您的控制器对象中,这将知道游戏的规则。使用这种模式,您可以重复使用相同的模型,并根据正在玩的游戏使用不同的控制器。

关于你的问题:

另外,当比赛进行中,运动员(谁知道的规则,并选择卡相应地播放)抛出卡(S)到“面”栈,应牌组“重新检查”球员的移动是否有效?

在这种情况下,您可以有一个控制器来检查移动是否有效。无需编码模型内部的逻辑。

+0

非常感谢您的宝贵意见! – Caroline

+0

不客气! @Caroline – ahoxha

+0

我选择了你的答案的“NO”选项,并提出这个问题:[question](http://stackoverflow.com/questions/43977777/cards-and-deck-in-a-card-game -inherit有或没有) – Caroline