Player.java
Home Up BelotConstants.java Card.java Cards.java RunInfo.java Player.java Game.java Belot.java

 

 

// -----------------------------
// Player.java
// CS 334
// John Paxton
// -----------------------------
class Player implements BelotConstants
{
        // ------------- constructor ----------

	Player(String playerName)
	{
		numberCards = 0;
		playerCards = new Card [CARDS_IN_HAND];
		name = new String(playerName);
		rawGamePoints = 0;
		convertedGamePoints = 0;
	}  
        // -------------- methods --------------
	public void dealCards(Cards belotCards, int howMany)
	{
		for (int i = 0; i < howMany; i++)
		{
			playerCards[numberCards] = belotCards.getNextCard();
			numberCards++;
		}
	}  
	public void print()
	{
		for (int i = 0; i < numberCards; i++)
		{
			System.out.print( (i+1) + ". ");
			playerCards[i].print();
		}
	}  
	public void discard(Card cardToPlay)
	{
		boolean found = false;
		int position = 0;  
		while (playerCards[position] != cardToPlay)   //equality
			position++;  
		numberCards--;				// subtle indexing trick
		for (int i = position; i < numberCards; i++)
		{
			playerCards[i] = playerCards[i+1];
		}
		playerCards[numberCards] = cardToPlay;  
	}  
	public void sortCards(int trump, int sortField)
	{
		Card temp;
		boolean swapFlag = false;  
		for (int i = 0; i < numberCards - 1; i++)
		{
			for (int j = i + 1; j < numberCards; j++)
			{  
				if (sortField == USE_TRUMP)
					swapFlag = playerCards[i].comesAfter(playerCards[j], trump);
				else if (sortField == DONT_USE_TRUMP)
				    swapFlag = playerCards[i].getSortCode() > playerCards[j].getSortCode();  
				if (swapFlag)
				{
					temp = playerCards[i];
					playerCards[i] = playerCards[j];
					playerCards[j] = temp;
				}
			}
		}
	}	  
	public Card findPlay (Card cardLed)
	{
		for (int i = 0; i < numberCards; i++)
		{
			if ( playerCards[i].getSuit() == cardLed.getSuit() )
				return playerCards[i];
		}  
		return playerCards[0];
	}  
	public int findNumberBelots(int trump)
	{
		int i = 0;
		int numberBelots = 0;  
		while (i < numberCards -1)
		{
			if ( (playerCards[i].getRank() == KING) &&
				( (playerCards[i].getSuit() == trump) ||
				  (trump == EVERYTHING)))
			{
				if ( playerCards[i+1].getRank() == QUEEN &&
				   playerCards[i+1].getSuit() == playerCards[i].getSuit())
				{
					numberBelots++;
					i++;
				}
			}
			i++;
		}  
		return numberBelots;
	}  
	public boolean hasALL_FOUR (int cardName)
	{
		int number = 0;  
		for (int i = 0; i < numberCards; i++)
		{
			if ( playerCards[i].getRank() == cardName )
				number++;
		}  
		return (number == 4);
	}  
	public RunInfo findRunInfo (int trump)
	{
		RunInfo info;  
		int currentRun = 1;
		int longestRun = 1;
		int longestIndex = 0;
  
		sortCards(trump, DONT_USE_TRUMP);  
		for (int i = 1; i < numberCards; i++)
		{
			if (playerCards[i].getSortCode() == playerCards[i-1].getSortCode()+1)
				currentRun++;
			else
				currentRun = 1;  
			int codeOne = playerCards[i].getRank();
			int codeTwo = playerCards[longestIndex].getRank();  
			if ( (currentRun > longestRun) || 
				((currentRun == longestRun) && (codeOne > codeTwo)) ||
				((currentRun == longestRun) && (codeOne == codeTwo) &&
				 (playerCards[i].getSuit() == trump))   )
			{
				longestRun = currentRun;
				longestIndex = i;
			}
		}  
		info = new RunInfo ( longestRun, playerCards[longestIndex] );
		sortCards ( trump, USE_TRUMP );
		return info;
	}         
        // --------------- readers/writers/adders ---------
	public void addToRawGamePoints(Card card)
	{
		rawGamePoints = rawGamePoints + card.getValue();
	}  
	public void addToRawGamePoints(int points)
	{
		rawGamePoints += points;
	}  
	public Card getCard(int whichOne)
	{
		return playerCards[whichOne];
	}  
	public int getRawGamePoints()
	{
		return rawGamePoints;
	}  
	public void setRawGamePoints(int howMany)
	{
		rawGamePoints = howMany;
	}  
	public void addToConvertedGamePoints (int howMany)
	{
		convertedGamePoints += howMany;
	}  
	public int getConvertedGamePoints()
	{
		return convertedGamePoints;
	}  
	public void setConvertedGamePoints(int howMany)
	{
		convertedGamePoints = howMany;
	}  
	public String getName()
	{
		return name;
	}
        // --------------- data fields ----------------  
	private int numberCards;           // number of cards in hand
	private Card [] playerCards;       // cards in hand
	private String name;               // name of player
	private int rawGamePoints;         // points in current game
	private int convertedGamePoints;   // total points earned
}