package edu.marlboro.cs.prisoner; /** *

A player in an iterated prisoner's dilemma simulation.

*

Just to keep it simple, this one always does the same thing.

*

More interesting strategies should be implemented in * classes that inherit from this one.

* * @author Jim Mahoney * @version $Id: Player.java 12775 2007-04-17 15:23:12Z mahoney $ */ public class Player { private static int nextId = 0; private int id; private int score; private int fixedStrategy; // generic Player returns this for getNextMove() private String name; private static final String DEFAULT_NAME = "anonymous"; private static final int DEFAULT_FIXED_STRATEGY = Game.DEFECT; private static final int ANONYMOUS_OPPONENT_ID = -1; public Player(){ init(); } public Player(String inputName){ init(inputName); } public Player(String inputName, int strategy){ init(inputName, strategy); } public void init(){ init(DEFAULT_NAME, DEFAULT_FIXED_STRATEGY); } public void init(String inputName){ init(inputName, DEFAULT_FIXED_STRATEGY); } public void init(String inputName, int strategy){ name = inputName; score = 0; id = getUniqueId(); fixedStrategy = strategy; } public String toString(){ return "Player (name=" + name + ", id=" + id + ")"; } public String getName(){ return name; } public int getId(){ return id; } public int getScore(){ return score; } public void setScore(int inputScore){ score = inputScore; } public String getInternalState(){ return toString() + " : state=none; score=" + getScore(); } public Player clone(){ return new Player(name + " - clone"); } public Player mutate(int newId){ return new Player(name + " - mutate"); } public Player createChild(Player mate){ return new Player("(" + name + "-" + mate.name + ")"); } /** * Return Game.COOPERATE or Game.DEFECT. * The opponent's ID is input to allow our behavior to depend on his. * The generic Player allways does the same as defined when created. */ public int getNextMove(int opponentId){ return fixedStrategy; } public int getNextMove(){ return getNextMove(ANONYMOUS_OPPONENT_ID); } /** * generate a unique player ID. (Don't override this method.) */ public static int getUniqueId(){ nextId++; return nextId; } }