|
// ---------------------------------- // Game.java // CS 334 // John Paxton // ---------------------------------- class Game implements BelotConstants { // ----------- constructor --------- Game () { belotCards = new Cards(); players = new Player[NUMBER_OF_PLAYERS]; players[0] = new Player("Player One"); players[1] = new Player("Player Two"); dealer = 0; } // --------------- methods ----------- public void dealFiveCards() { whoseTurn = dealer; dealer = otherPlayer(dealer); trump = UNKNOWN; 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() { trump = EVERYTHING; caller = 0; 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) { System.out.println(players[i].getName() + " has " + numberBelots + " belot(s)"); players[i].addToRawGamePoints(numberBelots * BELOT_BONUS); } } while ((!bonusesDone) && (card < ALL_FOUR.length)) { for (int i = 0; i < NUMBER_OF_PLAYERS; i++) { if ( players[i].hasALL_FOUR(ALL_FOUR[card]) ) { System.out.println(players[i].getName() + " has all four " + RANK_NAMES[card] + "s"); players[i].addToRawGamePoints(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 ) { System.out.print(players[winner].getName() + " has a "); bestRun.print(); players[winner].addToRawGamePoints(bestRun.calculateValue()); } } System.out.println(); } public void playCards() { Card [] cards = new Card [NUMBER_OF_PLAYERS]; int otherPlayer; int [] wins = new int [NUMBER_OF_PLAYERS]; for (int i = 0; i < NUMBER_OF_PLAYERS; i++) wins[i] = 0; for (int i = 0; i < CARDS_IN_HAND; i++) { otherPlayer = otherPlayer(whoseTurn); cards[whoseTurn] = players[whoseTurn].getCard(0); cards[otherPlayer]= players[otherPlayer].findPlay(cards[whoseTurn]); printResult(cards[whoseTurn], cards[otherPlayer], whoseTurn, otherPlayer, trump); 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].addToRawGamePoints(cards[j]); } wins[whoseTurn]++; printStatus(false); } players[whoseTurn].addToRawGamePoints(LAST_TRICK_BONUS); if (wins[whoseTurn] == CARDS_IN_HAND) { otherPlayer = otherPlayer(whoseTurn); players[whoseTurn].addToRawGamePoints(ALL_TRICKS_BONUS); players[whoseTurn].addToRawGamePoints (players[otherPlayer].getRawGamePoints()); players[otherPlayer].setRawGamePoints(0); } printStatus(false); } public void calculateScores() { int defender = otherPlayer(caller); int pointsForCaller = players[caller].getRawGamePoints(); int pointsForDefender = players[defender].getRawGamePoints(); if (pointsForDefender >= pointsForCaller) { if (pointsForDefender > pointsForCaller) { players[defender].setRawGamePoints (pointsForCaller + pointsForDefender); } players[caller].setRawGamePoints(0); } for (int i = 0; i < NUMBER_OF_PLAYERS; i++) { players[i].addToConvertedGamePoints (((players[i].getRawGamePoints() + 5) / 10) * trump); } } public void printStatus(boolean printPlayers) { if (printPlayers) { System.out.println(); System.out.print("Flipped card = "); flippedCard.print(); System.out.println("Trump = " + TRUMP_NAMES[trump]); if (trump != UNKNOWN) System.out.println("Caller = " + players[caller].getName()); } for (int i = 0; i < NUMBER_OF_PLAYERS; i++) { System.out.println(); System.out.print(players[i].getName()); System.out.println(", current game points: " + players[i].getRawGamePoints() + ", total match points: " + players[i].getConvertedGamePoints()); if (printPlayers) players[i].print(); } System.out.println("**************************"); pause(); } private int otherPlayer (int player) { return NUMBER_OF_PLAYERS - player - 1; } private void printResult (Card cardLed, Card cardFollowed, int leader, int follower, int trump) { if (cardLed.isHigher(cardFollowed, trump)) System.out.print(" * "); else System.out.print(" "); System.out.print(players[leader].getName() + " plays "); cardLed.print(); if (!cardLed.isHigher(cardFollowed, trump)) System.out.print(" * "); else System.out.print(" "); System.out.print(players[follower].getName() + " plays "); cardFollowed.print(); } private void pause() { // synchronized (this) { try {wait(5000);} // catch (InterruptedException e) {} try { System.in.read(); } catch (java.io.IOException e) {} } // -------------- instance variables -------------- private Cards belotCards; // deck of cards private Player[] players; // each player private int dealer; // who deals private int trump; // signifies trump private Card flippedCard; // card on top of deck private int whoseTurn; // whose turn to bid or play private int caller; // caller of trump } |