/** * Copyright 2001 Jean-Francois Doue * * This file is part of Asteroid Zone. Asteroid Zone is free software; * you can redistribute it and/or modify it under the terms of the * GNU General Public License as published by the Free Software Foundation; * either version 2 of the License, or (at your option) any later version. * Asteroid Zone is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Asteroid Zone; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA */ package asteroids; import javax.microedition.rms.*; import java.io.*; /** * Class used for storing game scores. * @author Jean-Francois Doue * @version 1.0, 2001/07/26 */ public class Scores { /** * An array of player names. */ public String[] names = {"LAU", "RAG", "NES"}; /** * An array of player high scores. */ public int[] values = {980, 675, 172}; //public int[] values = {30, 20, 10}; /** * Utility method to convert a integer score to a character * array. */ public static void toCharArray(int score, char[] charArray) { // Convert the score to an array of chars // of the form: 0000 charArray[0] = (char)('0' + (score / 1000)); score = score % 1000; charArray[1] = (char)('0' + (score / 100)); score = score % 100; charArray[2] = (char)('0' + (score / 10)); score = score % 10; charArray[3] = (char)('0' + score); } public Scores() { // Initialize / read scores from persistent storage. RecordStore recordStore = null; try { recordStore = RecordStore.openRecordStore("scores", true); // If the record store exists and contains records, // read the high scores. if (recordStore.getNumRecords() > 0) { for (int i = 0; i < names.length; i++) { byte[] record = recordStore.getRecord(i + 1); DataInputStream istream = new DataInputStream(new ByteArrayInputStream(record, 0, record.length)); values[i] = istream.readInt(); names[i] = istream.readUTF(); } } else { // Otherwise, create the records and initialize them // with the default values. They will have record IDs // 1, 2, 3 for (int i = 0; i < names.length; i++) { ByteArrayOutputStream bstream = new ByteArrayOutputStream(12); DataOutputStream ostream = new DataOutputStream(bstream); ostream.writeInt(values[i]); ostream.writeUTF(names[i]); ostream.flush(); ostream.close(); byte[] record = bstream.toByteArray(); recordStore.addRecord(record, 0, record.length); } } } catch(Exception e) { } finally { if (recordStore != null) { try { recordStore.closeRecordStore(); } catch(Exception e) { } } } } /** * Returns true if the score is among the high scores. */ public boolean isHighScore(int score) { for (int i = 0; i < names.length; i++) { if (score >= values[i]) { return true; } } return false; } /** * Updates the high score database with the supplied name and score. */ public void addHighScore(int score, String name) { for (int i = 0; i < names.length; i++) { if (score >= values[i]) { // Shift the score table. for (int j = names.length - 1; j > i; j--) { values[j] = values[j - 1]; names[j] = names[j - 1]; } // Insert the new score. values[i] = score; names[i] = name; // Overwrite the scores in persistent storage. RecordStore recordStore = null; try { recordStore = RecordStore.openRecordStore("scores", true); for (int j = 0; j < names.length; j++) { ByteArrayOutputStream bstream = new ByteArrayOutputStream(12); DataOutputStream ostream = new DataOutputStream(bstream); ostream.writeInt(values[j]); ostream.writeUTF(names[j]); ostream.flush(); ostream.close(); byte[] record = bstream.toByteArray(); recordStore.setRecord(j + 1, record, 0, record.length); } } catch(Exception e) { } finally { if (recordStore != null) { try { recordStore.closeRecordStore(); } catch(Exception e) { } } } break; } } } }