用计算机和人类玩家进行简单游戏中玩家模型的设计

时间:2015-03-10 19:15:47

标签: java design-patterns architecture

让我们说我有一个简单的游戏,其中玩家可以选择对象X.人类显然可以通过gui和计算机通过一些策略来做。他们都共享相同的模型类,播放器:

public class Player {
    private String name;
    private X x;

    public Player(name, x) {
        ...
    }
}   

注意没有setter,这意味着每次他们做出选择时我都要创建一个Player的新对象,其名称相同但X不同。

现在,这个策略是一个界面,

public interface PlayerXChoiceStrategy {
    public X getPlayersChoice();
}

并且有两个实现此目的的类,HumanXChoiceStrategySomeBotXChoiceStrategy。我不想在模型中使用这些策略而我不想使用Map<Player, PlayerXChoiceStrategy>这样的东西,因为Player是不可变的,因此会产生一些问题。我怎样才能以快速的方式检索策略而不依赖于模型/地图?我显然使用这些策略,比如说一个Controller类,我调用每个玩家getPlayersChoice()

我唯一的想法是拥有Map<String name, PlayerXChoiceStrategy>,我可能会实施,除非有人提出更好的答案。

1 个答案:

答案 0 :(得分:1)

  

人类显然可以通过gui和计算机通过某种策略来实现它

嗯,这是最深的OOP,不是吗? ;)

我会使Player类成为一个带有getStrategy抽象方法的基类,并从中下降两个类:HumanPlayerComputerPlayer return new XXXStrategy()不同的实现它