【发布时间】:2015-07-17 12:48:11
【问题描述】:
我正在制作一个小型纸牌游戏。在这个游戏中,新玩家是一个类的实例,AIPlayer 或 HumanPlayer,它扩展了一个通用玩家类。
目前要生成播放器,我有以下代码:
private List<Player> players;
HumanPlayer playerA = new HumanPlayer("playerA");
playerA.addObserver(gameModelObserver);
players.add(playerA);
AIPlayer playerB = new AIPlayer("playerB");
playerB.addObserver(gameModelObserver);
players.add(playerB);
AIPlayer playerC = new AIPlayer("playerC");
playerC.addObserver(gameModelObserver);
players.add(playerC);
HumanPlayer playerD = new HumanPlayer("playerD");
playerD.addObserver(gameModelObserver);
players.add(playerD);
是否可以动态生成这些类? 我可以做一些事情,比如用玩家姓名和布尔值遍历链表的所有元素,以指示他们是 AI 还是 Human,然后为他们生成一个类的实例。如果有,怎么做?
编辑:为了更清楚,我正在寻找这样的事情是否可能:
for(int i=0; i<x; i++){
player i = new Player("i");
i.addObserver(gameModelObserver);
players.add(i); }
【问题讨论】:
-
动态生成这些类是什么意思?您可以通过
instanceof检查List<Player>中的实际对象并做出相应的反应,但这(至少从我的角度来看)是一个不雅的解决方案。为什么您需要知道Player是AIPlayer还是HumanPlayer?也许你的设计有缺陷。 -
创建一个方法
addPlayer(String name)。 -
AIPlayer 和 HumanPlayer 有不同的功能。我也觉得这很奇怪,但我想知道这是否可能。
-
@Turing85 为什么不违法,工厂模式 v.1 是合法的。
-
@HansvanderLaan 也许这就是问题所在。从抽象的角度来看,
AIPlayer和HumanPlayer应该具有相同的(基本)功能(例如一些makeMove-方法)。对于游戏来说,它应该是完全透明的,是人工智能还是人类在移动。