Reputation: 545
I am making a small card game. In this game a new player is an instance of a class, AIPlayer or HumanPlayer which extends a general player class.
Currently to generate players I have the following code:
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);
Is it possible to dynamically generate these classes? Could I do something like iterating over all the elements of a linkedlist with a player name and a boolean to indicate if their are AI or Human and generate an instance of a class for them then. If so, how?
Edit: to make it clearer, I'm looking if something like this is possible:
for(int i=0; i<x; i++){
player i = new Player("i");
i.addObserver(gameModelObserver);
players.add(i); }
Upvotes: 1
Views: 1545
Reputation: 3263
This not answer your question, but, maybe solve your problem:
private List<Player> players;
public void createPlayerByName(String name, Class type) {
Player player = type.equals(HumanPlayer) ? new HumanPlayer(name) : new IAPlayer(name);
player.addObserver(gameModelObserver);
players.add(player);
}
public void createHumanPlayerByName(String name) {
createPlayerByName(name, HumanPlayer.class);
}
public void createIAPlayerByName(String name) {
createPlayerByName(name, AIPlayer.class);
}
So with your list you just need to do this:
for (String name : humanNameList) {
createHumanPlayerByName(name);
}
for (String name : aiNameList) {
createAIPlayerByName(name);
}
Upvotes: 5
Reputation: 802
Probably something like this:
class Player {
String name;
Type type;
public Player(String name, Type type) {
this.name = name;
this.type = type;
}
}
Player[] playersList = { new Player("playerA", Type.HUMAN), new Player("playerB", Type.AI)};
for (Player player: playersList) {
if (player.type == Type.AI) {
AIPlayer aiPlayer = AIPlayer.class.getConstructor(String.class).newInstance(player.name);
aiPlayer.addObserver(gameModelObserver);
players.add(aiPlayer); }
else {
HumanPlayer humanPlayer = HumanPlayer.class.getConstructor(String.class).newInstance(player.name);
humanPlayer.addObserver(gameModelObserver);
players.add(humanPlayer);
}
}
Upvotes: 1