/* * Csucslista.java * a játék csúcslistájának adatszerkezete * by pts@fazekas.hu at Sun Apr 22 19:28:17 CEST 2001 * további doksi: a README-ben és e file legkülső class-ának fejkommentjében * * Kincskereső Kisgömböc (C) Early May 2001 by eNTitánok (Rév Szilvia, * Szabó Péter <pts@inf.bme.hu>, Szurdi Miklós, Weizengruber Attila). * * This program 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. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package eNTitanok.kkkg; import java.io.FileNotFoundException; import java.io.IOException; import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.io.FileInputStream; import java.io.ObjectInputStream; import java.io.Serializable; /** * A játék csúcslistájának (Hősi Halottaink, hall of fame, toplista, legjobbak * listája) adatszerkezetét reprezentálja. A csúcslistát (mint objektumot, * serialization-nel) ki lehet menteni lemezre és vissza is lehet tölteni. */ public class Csucslista implements Serializable { public static class CsucslistaBejegyzes implements Serializable { // `implements Comparable', de az nincs a JDK1.1-ben :-( // muszáj `implements Serializable', nem elég Csucslistának protected String nev; protected int pontszam; public CsucslistaBejegyzes(String nev, int pontszam) { this.nev=nev; this.pontszam=pontszam; } public int compareTo(Object masik) { CsucslistaBejegyzes masikcs=(CsucslistaBejegyzes)masik; return this.pontszam==masikcs.pontszam ? 0 : this.pontszam> masikcs.pontszam ? 1 : -1; } public String toString() { return nev+": "+pontszam; } public void hozzafuz(char c) { nev+=c; } } protected String filenev; public static final int MERET=9, NOVEKMENY=100; private CsucslistaBejegyzes bejegyzesek[]; protected void alapErtek() { /* alapértékekkel feltöltött :Csúcslistát hoz létre */ bejegyzesek=new CsucslistaBejegyzes[MERET]; for (int i=0;i<bejegyzesek.length;i++) bejegyzesek[i]=new CsucslistaBejegyzes("eNTitánok", (bejegyzesek.length-1-i)*NOVEKMENY); } public Csucslista setFilenev(String filenev) { this.filenev=filenev; return this; } public Csucslista() { alapErtek(); } public static Csucslista betolt(String filenev) { if (filenev==null) return new Csucslista(); Csucslista ures=new Csucslista().setFilenev(filenev); try { FileInputStream f; ObjectInputStream o; try { f=new FileInputStream(filenev); } catch (IOException e) { return ures; } // catch (FileNotFoundException e) { return new Csucslista(); } try { o=new ObjectInputStream(f); } catch (java.io.StreamCorruptedException e) { return ures; } catch (IOException e) { return ures; } try { return ((Csucslista)o.readObject()).setFilenev(filenev); } catch (IOException e) { return ures; } catch (ClassNotFoundException e) { return ures; } } catch (Exception e) { // hülye böngészők, appletviewerek ezerféle szabványtalan kivételt // képesek küldeni. return ures; } } public void kiment() { if (filenev==null) return; FileOutputStream f; try { f=new FileOutputStream(filenev); ObjectOutputStream o=new ObjectOutputStream(f); o.writeObject(this); } //catch (IOException e) {} catch (Exception e) {} } /** * Az utoljára felvett bejegyzés indexe, vagy `-1', ha nem volt ilyen. */ protected int utoljara_felvett=-1; public int felvesz(CsucslistaBejegyzes csb) { /* felveszi a bejegyzést a csúcslistába, ha elég nagy a pontszám. * Visszadja az indexet, ahová felvételre került, vagy -1. */ int i=0; while (i<bejegyzesek.length && csb.compareTo(bejegyzesek[i])<0) i++; if (i==bejegyzesek.length) return utoljara_felvett=-1; System.arraycopy(bejegyzesek, i, bejegyzesek, i+1, bejegyzesek.length-i-1); bejegyzesek[i]=csb; return utoljara_felvett=i; } public int felvesz(int pontszam) { return felvesz(new CsucslistaBejegyzes("", pontszam)); } /** * Az utoljára felvett bejegyzés nevéhez fűz egy karaktert. */ public void hozzafuz(char c) { if (utoljara_felvett!=-1) bejegyzesek[utoljara_felvett].hozzafuz(c); } /** * Az utoljára felvett bejegyzés nevét zárja le, és visszaadja a bejegyzést * String debug info formájában. (null is lehet) */ public String lezar() { int i=utoljara_felvett; if (i==-1) return null; utoljara_felvett=-1; return bejegyzesek[i].toString(); } public void kiir() { for (int i=0;i<bejegyzesek.length;i++) System.out.println(bejegyzesek[i].toString()); System.out.println(""); } public CsucslistaBejegyzes elementAt(int i) { return bejegyzesek[i]; } public String nevAt(int i) { return bejegyzesek[i].nev; } public int pontszamAt(int i) { return bejegyzesek[i].pontszam; } public int length() { return bejegyzesek.length; } } /// class Csucslista