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

 

 

class Player implements BelotConstants
{
	Player(String playerName)
	{
		playerCards = new Card [CARDS_IN_HAND];
		name = new String(playerName);
		resetHand();
		totalPoints = 0;   // interface
	}
	public void resetHand()   // interface
	{
		numberCards = 0;
		rawPoints = 0;
		gamePoints = 0;
	}
	public void dealCards(Cards belotCards, int howMany)
	{
		for (int i = 0; i < howMany; i++)
		{
			playerCards[numberCards] = belotCards.getNextCard();
			numberCards++;
		}
	}
	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 findCard (int imageNumber)
	{
		int position = 0;
		while (playerCards[position].getImageNumber() != imageNumber)
		{
			position++;
		}
		return playerCards[position];
	}
	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 hasAllFour (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;
	}
	public void addToRawPoints(Card card)
	{
		rawPoints += card.getValue();
	}
	public void addToRawPoints(int points)
	{
		rawPoints += points;
	}
	public Card getCard(int whichOne)
	{
		return playerCards[whichOne];
	}
	public int getRawPoints()
	{
		return rawPoints;
	}
	public void setRawPoints(int howMany)
	{
		rawPoints = howMany;
	}
	public void addToTotalPoints (int howMany)   // interface
	{
		totalPoints += howMany;
	}
	public int getGamePoints()
	{
		return gamePoints;
	}
	public void setGamePoints(int howMany)
	{
		gamePoints = howMany;
	}
	public int getTotalPoints()  // interface
	{
		return totalPoints;
	}
	public void setTotalPoints(int howMany)    // interface
	{
		totalPoints = howMany;
	}
	public String getName()
	{
		return name;
	}
	public int getNumberCards()                // interface
	{
		return numberCards;
	}
	public void setNumberCards(int howMany)   // interface
	{
		numberCards = howMany;
	}
	private int numberCards;
	private Card [] playerCards;
	private String name;
	private int rawPoints;                   // interface .. name change
	private int gamePoints;                  // interface .. name change
	private int totalPoints;                 // interface ... added
}