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