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