package prisoner;

import java.util.ArrayList;
import java.util.List;

public class Arena {
	private int m_tt = 1;
	private int m_tf = 3;
	private int m_ft = 0;
	private int m_ff = 2;
	
	private int m_times = 100;
	
	public Pair<Integer, Integer> score(boolean a_move, boolean b_move)
	{
		if(a_move)
		{
			if(b_move) return new Pair<Integer, Integer>(m_tt, m_tt);
			else return new Pair<Integer, Integer>(m_tf, m_ft);
		}
		else
		{
			if(b_move) return new Pair<Integer, Integer>(m_ft, m_tf);
			else return new Pair<Integer, Integer>(m_ff, m_ff);
		}

	}
	
	public Pair<Integer, Integer> go(IPlayer a, IPlayer b)
	{
		boolean a_move = a.play();
		boolean b_move = b.play();
		
		a.opponent(b_move);
		b.opponent(a_move);
		
		return score(a_move, b_move);
	}
	
	public Pair<Integer, Integer> go_times(IPlayer a, IPlayer b)
	{
		a.newGame();
		b.newGame();
		
		int a_result = 0;
		int b_result = 0;
		
		for(int i = 0 ; i < m_times ; i++)
		{
			Pair<Integer, Integer> result = go(a, b);
			a_result += result.fst();
			b_result += result.snd();
		}
		
		return new Pair<Integer, Integer>(a_result, b_result);
	}
	
	public int[] tournament(List<IPlayer> players)
	{
		int[] results = new int[players.size()];
		
		for(int i = 0 ; i < players.size() ; i++)
		{
			for(int j = i ; j < players.size() ; j++)
			{
				Pair<Integer, Integer> result = go_times(players.get(i), players.get(j));
				results[i] += result.fst();
				results[j] += result.snd();
			}
		}
		
		return results;
	}
	
	public static void main(String[] args)
	{
		Arena arena = new Arena();
		
		List<IPlayer> players = new ArrayList<IPlayer>();
		
		players.add(new TitForTatPlayer(true));
		//players.add(new TitForTatPlayer(false));
		players.add(new ConstantPlayer(true));
		players.add(new ConstantPlayer(false));
		
		int results[] = arena.tournament(players);

		for(int i = 0 ; i < results.length ; i++)
		{
			System.out.println(i + " wynik: " + results[i]);
		}
		
	}
	
}
