【问题标题】:Card Game Player Class OOP Design纸牌游戏玩家类 OOP 设计
【发布时间】:2012-02-10 09:12:47
【问题描述】:

我即将为我的纸牌游戏(杜松子酒)创建 Player 和 AI Players(AIBasicPlayer、AINormalPlayer 和 AIHardPlayer)类。创建上述类的最佳 OOP 或设计模式方法是什么?我检查了一些开源纸牌游戏并比较了他们的方法,以下是我收集的方法:

    ***Classes**


    1. player class only

           public class player{
           }
           public class AIPlayer{
           } 

    2. base class player

           public abstract class player{
           }
           public class HumanPlayer extends player{
           }
           public class APlayer extends player{
           }

    3. interface player

         public interface IPlayer{
         }
         public class Player implements IPlayer{}
         public class AIPlayer implements IPlayer{}


*** Methods**
    takeTurn()    
    doDiscard()
doDraw() //pick from discard pile or deck
doKnock()

我了解上述代码的用法,但我无法决定应用或实施哪一个。我是 OOP 或设计模式的新手,您的建议和代码示例将有很大帮助。

【问题讨论】:

    标签: java oop design-patterns


    【解决方案1】:

    我将从方法 3 开始,它在两个类之间提供了最少的凝聚力。如果您发现有很多通用功能,请使用方法 2,或者将该功能提取到您的 IPlayer 实现所包含的其他类中。我通常倾向于使用组合而不是继承,因为它使您的代码在重构时更容易修改,并且在运行时更具动态性。

    【讨论】:

    • @ggreiner-这是有道理的。不同强度的AIPlayer的设计如何?我的意思是,我有不同的 AIPlayer,例如 AIBasicPlayer、AINormalPlayer 和 AIHardPlayer。我应该使用什么设计模式,因为它们具有不同强度或算法的相同方法?如果您能提供示例代码,我将不胜感激。
    • @Zack 在您的 AIPlayer 类中,您可以按照识别决定他如何玩的 AIBehavior 组件的方式做一些事情。这样你就可以对每个难度使用相同的 AIPlayer 类,并根据需要更新 AIBehavior 组件。
    【解决方案2】:

    我会选择第二个选项,因为玩家会为普通玩家和 AI 玩家定义一些功能(和数据)。

    还要注意,我还要定义一个 Player 将实现的 IPlayer 接口

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多