|
class Game implements BelotConstants
{
Game ()
{
belotCards = new Cards();
players = new Player[NUMBER_OF_PLAYERS];
players[PLAYER_1] = new Player("You");
players[PLAYER_2] = new Player("Computer");
dealer = NO_ONE;
}
public void selectDealer () // interface
{
dealer = otherPlayer (dealer);
trump = UNKNOWN;
}
public void dealFiveCards()
{
players[PLAYER_1].resetHand(); // interface
players[PLAYER_2].resetHand(); // interface
whoseTurn = otherPlayer(dealer);
belotCards.assignValues(trump);
belotCards.shuffle();
for (int i = 0; i < NUMBER_OF_PLAYERS; i++)
{
players[i].dealCards(belotCards, 5);
players[i].sortCards(trump, USE_TRUMP);
}
flippedCard = belotCards.showNextCard();
}
public void callTrump(int what, int who) // interface parameters
{
trump = what;
caller = who;
belotCards.assignValues(trump);
}
public void finishDealing()
{
players[caller].dealCards(belotCards, 3);
players[otherPlayer(caller)].dealCards(belotCards, 3);
for (int i = 0; i < NUMBER_OF_PLAYERS; i++)
{
players[i].sortCards(trump, USE_TRUMP);
}
flippedCard = belotCards.showNextCard();
}
public void scoreBonuses()
{
boolean bonusesDone = false;
int numberBelots;
int card = 0;
for (int i = 0; i < NUMBER_OF_PLAYERS; i++)
{
numberBelots = players[i].findNumberBelots(trump);
if (numberBelots > 0)
{
players[i].addToRawPoints(numberBelots * BELOT_BONUS);
}
}
while ((!bonusesDone) && (card < ALL_FOUR.length))
{
for (int i = 0; i < NUMBER_OF_PLAYERS; i++)
{
if ( players[i].hasAllFour(ALL_FOUR[card]) )
{
players[i].addToRawPoints(ALL_FOUR_BONUSES[card]);
bonusesDone = true;
}
}
card++;
}
RunInfo bestRun = new RunInfo();
RunInfo currentRunInfo;
int winner = -1;
if (!bonusesDone)
{
for (int i = 0; i < NUMBER_OF_PLAYERS; i++)
{
currentRunInfo = players[i].findRunInfo(trump);
if ( currentRunInfo.betterThan(bestRun, trump) )
{
winner = i;
bestRun = currentRunInfo;
}
}
if ( winner >= 0 )
{
players[winner].addToRawPoints(bestRun.calculateValue());
}
}
}
public void startPlay() // interface
{
cards = new Card [NUMBER_OF_PLAYERS];
wins = new int [NUMBER_OF_PLAYERS];
for (int i = 0; i < NUMBER_OF_PLAYERS; i++)
wins[i] = 0;
}
public void assignPlayerCard(Card playedCard, int who)
{
cards[who] = playedCard;
}
public void determineWinner() // interface
{
otherPlayer = otherPlayer(whoseTurn);
if (!cards[whoseTurn].isHigher(cards[otherPlayer], trump))
whoseTurn = otherPlayer;
for (int j = 0; j < NUMBER_OF_PLAYERS; j++)
{
players[j].discard(cards[j]);
players[whoseTurn].addToRawPoints(cards[j]);
}
wins[whoseTurn]++;
}
public void finishPlay() // interface
{
players[whoseTurn].addToRawPoints(LAST_TRICK_BONUS);
if (wins[whoseTurn] == CARDS_IN_HAND)
{
otherPlayer = otherPlayer(whoseTurn);
players[whoseTurn].addToRawPoints(ALL_TRICKS_BONUS);
players[whoseTurn].addToRawPoints
(players[otherPlayer].getRawPoints());
players[otherPlayer].setRawPoints(0);
}
}
public void calculateScores()
{
int defender = otherPlayer(caller);
int pointsForCaller = players[caller].getRawPoints();
int pointsForDefender = players[defender].getRawPoints();
if (pointsForDefender >= pointsForCaller)
{
if (pointsForDefender > pointsForCaller)
{
players[defender].setRawPoints
(pointsForCaller + pointsForDefender);
}
players[caller].setRawPoints(0);
}
for (int i = 0; i < NUMBER_OF_PLAYERS; i++)
{
players[i].setGamePoints
(((players[i].getRawPoints() + 5) / 10) * trump);
players[i].addToTotalPoints(players[i].getGamePoints()); // interface
}
}
private int otherPlayer (int player)
{
if ((player == NO_ONE) || (player == PLAYER_2))
return PLAYER_1;
else
return PLAYER_2;
}
public Cards getBelotCards() // interface
{
return belotCards;
}
public Player getPlayer (int whichOne) // interface
{
return players[whichOne];
}
public String getTrump() // interface
{
return TRUMP_NAMES[trump];
}
public String getCaller() // interface
{
if (trump == UNKNOWN)
return "-----";
else return players[caller].getName();
}
public String getDealer() // interface
{
if (dealer == NO_ONE)
return "-----";
else return players[dealer].getName();
}
public int getDealerNumber() // interface
{
return dealer;
}
public Card getFlippedCard() // interface
{
return flippedCard;
}
public int getWhoseTurn() // interface
{
return whoseTurn;
}
public int getNumberCards() // interface
{
return players[PLAYER_1].getNumberCards();
}
public void setNumberCards(int howMany) // interface
{
players[PLAYER_1].setNumberCards(howMany);
}
private Cards belotCards;
private Player[] players;
private int dealer;
private int trump;
private Card flippedCard;
private int whoseTurn;
private int caller;
Card [] cards; // interface
int otherPlayer; // interface
int [] wins; // interface
}
|