纸牌游戏中的玩家和套牌方法

时间:2017-05-08 18:36:59

标签: oop

我正在编写一款纸牌游戏(Uno / Mau Mau型)并且我遇到了这个设计问题:

牌组包含两叠牌,其中一张显示面,另一张显示背面。当一个游戏正在进行中并且玩家投掷一张牌时,它应该进入"面部"堆。然而,当游戏结束时,最后一位玩家的牌应该回到"后退"叠加。

1)套牌是否有两种添加卡片的方法(addToFacesStack和addToBacksStack)

2)甲板上是否应该有一个addCards方法,并决定自己应该使用哪个堆叠(牌组必须知道游戏的状态 - 正在进行/已完成)?

此外,当游戏正在进行中并且玩家(知道规则并选择相应的牌)将牌扔到"脸上时#34;堆栈,甲板应该重新检查"玩家的举动是否有效?

提前感谢您的建议!

卡罗琳

1 个答案:

答案 0 :(得分:1)

我认为你应该问这个问题: 模特应该知道游戏逻辑还是游戏状态?

如果,那么您需要在模型中包含游戏逻辑,因此您只能使用addCards方法,Deck将决定添加位置卡片。但是,在这种情况下,游戏模型和游戏逻辑紧密耦合。如果您将相同的模型用于另一种游戏变体(使用不同的逻辑),则此选项将不合适。

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

关于你的问题:

  

此外,当游戏正在进行中并且玩家(知道规则并选择相应的牌)将牌扔到"脸上时#34;堆栈,甲板应该重新检查"玩家的举动是否有效?

在这种情况下,您可以让控制器检查移动是否有效。无需在模型中对逻辑进行编码。