/*
* 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