public int getBid(Letter bidLetter, ArrayList<PlayerBids> playerBidList, ArrayList<String> playerList, SecretState secretState) {

		// Keep track of how many players have exactly 6 letters
		int sixLetterCount = 0;
		
		// Defense factor is to prevent other players from bidding high
		// but getting letters cheaply
		int defenseFactor = 0;
		// Current idea -- if any opponent is bidding, on average, 10 greater
		// than the letter value -- increase Defense Factor to 7
		List<Opponent> opponents = new ArrayList<Opponent>(playerList.size());
		int id = 0;
		// Initialize opponents
		for ( String playerName : playerList ) {
			opponents.add( new Opponent() );
			opponents.get(id).setId(id);
			id++;
		}

		// Iterate over bidding rounds
		for ( PlayerBids round : playerBidList ) {
			Letter targetLetter = round.getTargetLetter();
			int highBid = 0;
			int highBidder = -1;
			id = 0;
			for ( int bid : round.getBidvalues() ) {				
				opponents.get(id).addBid(new Bid(bid,targetLetter.getValue(),targetLetter.getCharacter()));
				if ( bid > highBid ) {
					highBid = bid;
					highBidder = id;
				}
				id++;
			}
			opponents.get(highBidder).addLetter(targetLetter);
		}
		
		
		// Iterate over opponents
		for ( Opponent opponent : opponents ) {
			if ( opponent.getLetterCount() == 6 ) {
				sixLetterCount++;
			}
		}
		
		// We're trying to stop users from getting 7 letters!
		// How much are we willing to risk? In a 2-player game,
		// it makes sense to spend 20 to keep the opponent from
		// getting 50+. But with numerous players--Zero Player could win
		if ( sixLetterCount > 0 )
		{
			return 20;
		}
		
		double st = stats.getStatistics(bidLetter.getCharacter());
		
		return (int)Math.round(3d * (1- st)) + bidLetter.getValue() + defenseFactor;
	}