@Override
	public Card chooseCard(Player player, Card[] cards, GameState state) {
		
		//If it's the start of a new week, we need a fresh cache
		if(state.getDay() == 0)
		{
			cache = new HashMap<GameState, Integer>();
		}
		
		//If there's only one choice, we have no choice but to do it
		if(cards.length == 1)
		{
			return cards[0];
		}
		
		int alpha = Integer.MIN_VALUE;
		int beta = Integer.MAX_VALUE;
		Card choice = null;
		
		ArrayList<Color> playerList = new ArrayList<Color>();
		for(Player p : state.getPlayerList())
		{
			playerList.add(p.getFaction());
		}
		playerList.remove(player.getFaction());
		
		//We perform alpha beta search on each state to see if
		//it's the best
		for(Card card : cards)
		{
			
			ArrayList<Card> cardChoices = new ArrayList<Card>();
			cardChoices.add(card);
			
			int check = alphabetaCardPicking(new GameState(state), 
					new ArrayList<Color>(playerList), cardChoices, alpha, beta, 
					player.getFaction());
			
			System.out.println("\ncheck: " + check);
			
			//Check to see if this state is better
			if(check > alpha)
			{
				alpha = check;
				choice = card;
			}
		}
		return choice;
	}