import java.io.*; /** * The HallOfFame class represents a hall of fame that * saves and retrieves high scores for a game. The HallOfFame * has five entries, each containing a name and a score. * A person can be added if their score is * within the range of high scores, or higher. New scores are * inserted into the array in the appropriate high-to-low * position (dropping the lowest high score and name from the * arrays if there are already 5 high scores in the hall of * fame). */ public class HallOfFame implements Serializable { /** * An array of names corresponding 1-to-1 to an array of scores. */ private String[] names; /** * An array of scores, ordered from highest to lowest, corresponding 1-to-1 * to an array of names. */ private int[] scores; /** * Creates a default HallOfFame object with 5 names "-" and score 0. */ public HallOfFame() { names = new String[5]; for (int i = 0; i < 5; i++) names[i] = "-"; scores = new int[5]; for (int i = 0; i < 5; i++) scores[i] = 0; } /** * Returns a score at a given position. * @param pos The array position of the requested score * @return The int scores */ public int getScore(int pos) { return scores[pos]; } /** * Returns a name at a given position. * @param pos The array position of the requested name * @return The String name. */ public String getName(int pos) { return names[pos]; } /** * Private Helper method to assign a score to a given position. * @param pos The array position to place the score * @param score The player's score */ void setScore(int pos, int score) { scores[pos] = score; } /** * Private Helper method to assign a name to a given position. * @param pos The array position to place the name * @param name The player's name */ void setName(int pos, String name) { names[pos] = name; } /** * Receives a score, and name, to add to the Hall of Fame arrays. *
Pre-condition: hall of fame constructed *
Pre-condition: isScoreWorthy (newScoreP) is TRUE *
Post-condition: * newScoreP, newNameP are inserted into the Hall of Fame. *
Post-condition: * Hall of Fame is sorted in descending order and has 5 items. * @param mewScoreP int score to add to the hall of fame * @param newNameP String player name to add to the hall of fame */ public void addScore(int newScoreP, String newNameP) { int newScore = newScoreP; String newName = newNameP; boolean updated = false; String nameTemp; int scoreTemp; // Beginning at first index of score array // FOR index of score array = start to finish for (int i = 0; i < scores.length; i++) { if (!updated) { // IF current index of scores is empty if (scores[i] == 0) { scores[i] = newScore; names[i] = newName; updated = true; } // ENDIF // ELSE IF newScore belongs at this spot else if (newScore > scores[i]) { // THEN // FOR index of score array = index to finish for (int j = i; j < scores.length; j++) { // swap the array items scoreTemp = scores[j]; nameTemp = names[j]; scores[j] = newScore; names[j] = newName; newScore = scoreTemp; newName = nameTemp; } // ENDFOR updated = true; } // ENDIF } // ENDIF } // ENDFOR } /** * Checks to see if user's score is higher than scores in array or if the * array is empty * @return True if the user's score is worthy of entering the Hall of Fame */ public boolean isScoreWorthy(int currentScore) { // INITIALIZE flag as false boolean flag = false; // Examine all scores in the array for (int i = 0; i < scores.length; i++) { // IF Score belongs in this spot if (currentScore > scores[i] || scores[i] == 0) { return true; } // ENDIF } // ENDFOR return flag; } // *** saveToDisk and loadFromDisk methods omitted *** /** * Checks if the object being passed in is equal to this Hall of Fame object *
Pre-condition: hall of fame constructed, ready for checking & * input. *
Post-condition: none. * @param op2 The object being compared * @return a boolean value indiciating whether the object was equal to this Hall * of Fame object */ public boolean equals (Object op2) { // IF op2 is an instance of HallOfFame if (op2 instanceof HallOfFame) { // Copy op2 into theHOF HallOfFame theHOF = (HallOfFame)op2; // FOR the beginning int 1 to the last index of scores for (int i = 0; i < scores.length; i++) { // IF the current index of scores is not equal to the current // index of theHOF if (this.scores[i] != theHOF.getScore(i)) // RETURN false return false; // IF the current index of names is not equal to the current // index of theHOF if (this.names[i] != theHOF.getName(i)) // RETURN false return false; } //ENDFOR } // ENDIF //RETURN true return true; } }