|
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
}
|