Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 纸牌游戏中的玩家和套牌方法_Oop - Fatal编程技术网

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

Oop 纸牌游戏中的玩家和套牌方法,oop,Oop,我正在编写一个纸牌游戏(Uno/Mau-Mau类型),我有一个设计问题: 牌组包含两叠牌,其中一张显示正面,另一张显示背面。当游戏进行中,玩家抛出一张牌时,该牌应进入“脸”牌堆。然而,当游戏结束时,最后一个玩家的牌应该回到“backs”堆栈中 1) 牌组是否有两种添加卡的方法(addToFacesStack和AddToBacksTack) 或 2) 牌组是否应该有一个addCards方法,并自行决定牌应该放在哪个堆栈上(牌组必须知道游戏的状态-进行中/完成) 此外,当游戏进行中,玩家(知道规则并

我正在编写一个纸牌游戏(Uno/Mau-Mau类型),我有一个设计问题:

牌组包含两叠牌,其中一张显示正面,另一张显示背面。当游戏进行中,玩家抛出一张牌时,该牌应进入“脸”牌堆。然而,当游戏结束时,最后一个玩家的牌应该回到“backs”堆栈中

1) 牌组是否有两种添加卡的方法(addToFacesStack和AddToBacksTack)

2) 牌组是否应该有一个addCards方法,并自行决定牌应该放在哪个堆栈上(牌组必须知道游戏的状态-进行中/完成)

此外,当游戏进行中,玩家(知道规则并选择相应的牌)将牌扔到“面”牌堆上时,牌堆是否应该“重新检查”玩家的移动是否有效

提前感谢您的建议


卡罗琳

我想你应该问一个问题:模型应该知道游戏逻辑还是只知道游戏状态?

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

如果,则可以遵循设计模式。在这里,您需要使用单独的方法将卡添加到第一个或第二个堆栈中。并将游戏逻辑编码到您的控制器对象中,这将了解游戏规则。使用此模式,您可以重用相同的模型,并根据正在玩的游戏使用不同的控制器

关于你的问题:

此外,当游戏进行中,玩家(知道规则并选择相应的牌)将牌扔到“面”牌堆上时,牌堆是否应该“重新检查”玩家的移动是否有效


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

非常感谢您的宝贵意见!我选择了你答案中的“否”选项,并得出以下结论: