与OOP相关的问题

DalTXColtsFan

新成员
已加入
2018年1月25日
留言内容
1
编程经验
10+
这个问题与C#有关的问题更多与OOP有关。

假设我要用C#编写一个扑克模拟器。 AI玩家可以适应某些特征,例如被动鱼,积极进取的疯子,平衡玩家,紧张玩家甚至随机玩家。

显然,作为我代码的一部分,我将创建一个名为玩家的类,其属性包括开放式加注范围,开放式lim回范围,连续下注百分比,翻牌加注百分比yada yada yada(对论坛上不懂扑克的人表示歉意) 。

我正在尝试决定如何处理这样一个事实,即大多数AI玩家几乎可以完美地满足上述类别之一,但我希望能够灵活地为任何玩家调整任何属性。

我认为继承和/或多态性(尽管我承认我绝对不理解100%的多态性)是不必要的。无需创建名为疯子,鱼,紧身玩家,随机玩家等的类,并且可以多态化为称为玩家的类,并且无需创建一系列类玩家并可以使其成为疯子等。不论玩家类型如何,"action"将会是一样的,并且取决于他们的牌,他们的范围和他们的频率-在任何给定的点,我们进行计算,结果是检查,跟注,加注或弃牌。

我认为我想做的是使用接受字符串的重载构造函数创建player类。字符串必须是鱼,疯子,紧张的玩家或随机的(或其他我想出的东西),并且我只是根据该玩家类型的默认设置来设置所有属性。一旦所有属性都具有基于传递给构造函数的字符串的默认值,我便可以随意调整其中的任何一个。

这听起来像是一种可接受的方法吗?-创建一个名为Player的类,并使用重载的构造函数,属性和一个名为CalculateAction的方法,该方法将根据他的范围,频率,棋盘和直到该点的动作来计算下注,加注或弃牌。手?

我确定以后还会有其他问题,有关为纸牌组创建类别,为翻牌组创建类别等,但现在我很高兴能收到关于我对玩家类的思考的反馈。

希望这是有道理的,
DTXCF
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,567
地点
悉尼,澳大利亚
编程经验
10+
构造函数绝对不应将String作为参数。在这种情况下,没有什么可以阻止创建实例进行传递的代码"Hello World"。如果您想那样做,那么至少要使用一个枚举来限制可能传递给仅有效值的可能值。
 
最佳 底部