class RoundRobinTournament {

    private Prisoner[] prisoners;
    
    public RoundRobinTournament(Prisoner[] prisoners) {
        this.prisoners = prisoners;
    }

    public void displayLeagueTable() {
        for (int i = 0; i < prisoners.length; i = i + 1) {
            System.out.println(prisoners[i]);
        }
    }

    public void run(int numOfIterations) {
        // Every prisoner plays Iterated Prisoner's Dilemma with every other prisoner (excluding itself)
        // (This is not faithful to Axelrod's original program. He had a prisoner play a copy of itself. 
        // I've simplified.)
        for (int i = 0; i < prisoners.length; i = i + 1) {
            for (int j = i + 1; j < prisoners.length; j = j + 1) {
                Bout bout = new Bout(prisoners[i], prisoners[j]);
                // The next loop implements a tournament between i and j
                for (int k = 0; k < numOfIterations; k = k + 1) {
                    bout.play();
                }
                prisoners[i].forgetHistory();
                prisoners[j].forgetHistory();
            }
        }
    }

}
