Oop 纸牌游戏中的玩家和套牌方法
我正在编写一个纸牌游戏(Uno/Mau-Mau类型),我有一个设计问题: 牌组包含两叠牌,其中一张显示正面,另一张显示背面。当游戏进行中,玩家抛出一张牌时,该牌应进入“脸”牌堆。然而,当游戏结束时,最后一个玩家的牌应该回到“backs”堆栈中 1) 牌组是否有两种添加卡的方法(addToFacesStack和AddToBacksTack) 或 2) 牌组是否应该有一个addCards方法,并自行决定牌应该放在哪个堆栈上(牌组必须知道游戏的状态-进行中/完成) 此外,当游戏进行中,玩家(知道规则并选择相应的牌)将牌扔到“面”牌堆上时,牌堆是否应该“重新检查”玩家的移动是否有效 提前感谢您的建议Oop 纸牌游戏中的玩家和套牌方法,oop,Oop,我正在编写一个纸牌游戏(Uno/Mau-Mau类型),我有一个设计问题: 牌组包含两叠牌,其中一张显示正面,另一张显示背面。当游戏进行中,玩家抛出一张牌时,该牌应进入“脸”牌堆。然而,当游戏结束时,最后一个玩家的牌应该回到“backs”堆栈中 1) 牌组是否有两种添加卡的方法(addToFacesStack和AddToBacksTack) 或 2) 牌组是否应该有一个addCards方法,并自行决定牌应该放在哪个堆栈上(牌组必须知道游戏的状态-进行中/完成) 此外,当游戏进行中,玩家(知道规则并
卡罗琳我想你应该问一个问题:模型应该知道游戏逻辑还是只知道游戏状态? 如果是,则您需要在模型中包含游戏逻辑,因此您只能使用
addCards
方法,而Deck
将决定在何处添加卡。但是,在这种情况下,博弈模型和博弈逻辑是紧密耦合的。如果您要将同一模型用于游戏的另一个变体(具有不同的逻辑),则此选项将不合适
如果否,则可以遵循设计模式。在这里,您需要使用单独的方法将卡添加到第一个或第二个堆栈中。并将游戏逻辑编码到您的控制器对象中,这将了解游戏规则。使用此模式,您可以重用相同的模型,并根据正在玩的游戏使用不同的控制器
关于你的问题:
此外,当游戏进行中,玩家(知道规则并选择相应的牌)将牌扔到“面”牌堆上时,牌堆是否应该“重新检查”玩家的移动是否有效
在这种情况下,您可以使用一个控制器来检查移动是否有效。无需对模型内部的逻辑进行编码。非常感谢您的宝贵意见!我选择了你答案中的“否”选项,并得出以下结论: