/*
* KkkgSkel.java v2
* Kincskereső Kisgömböc váza (szkeletonja). JDK1.2, applet és application is.
* by pts@fazekas.hu at 2000.03.22
* 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 eNTitanok.gfx.Skel;
import eNTitanok.gfx.Skel.SzekvenciaCanvas;
import eNTitanok.gfx.Skel.SzekvenciaBejegyzes;
import eNTitanok.gfx.OkosAWT.OkosApplet;
import eNTitanok.gfx.OkosAWT.OkosFrame;
import eNTitanok.gfx.OkosAWT.OkosCanvas;
/**
* Ez a file tartalmazza a Kincskereső Kisgömböc játék vázát (szkeletonját),
* a szekeleton megjelenítését kivéve.
*
* <P>Csapat: eNTitánok
* <BR>Megnevezés: 6. Szkeleton beadása
* <BR>Programfile-ok: ** /*.java
* <BR>Fordítás: javac -g eNTitanok/kkkg/KkkgSkel.java
* <BR>Futtatás: java eNTitanok.kkkg.KkkgSkel
* <BR>Futtatás: appletviewer KkkgSkel.html
* <BR>A futtatáshoz JDK1.2.2 (nem más!!) és grafikus megjelenítő szükséges.
*/
public final class KkkgSkel extends Skel {
public static class Csucs {
public Csucs() {
skel.constructor();
skel.leave();
}
public void osszekot(Csucs masik) {
skel.enter();
skel.leave();
}
public int tavolsag(Csucs masik) {
/* milyen messze van this és masik -- feltesszük, hogy szomszédosak */
skel.enter();
skel.leave();
return 0;
}
public int tavolsag(int merre) {
skel.enter();
skel.leave();
return 0;
}
}
public static class Helyzet {
public void ugrik() {
skel.enter();
skel.leave();
}
public Helyzet() {
/* gagyi, kamu konstruktor, kesobb csucsba-val lehet korrigalni */
skel.constructor();
skel.leave();
}
public Helyzet(Csucs c1) {
skel.constructor();
skel.leave();
}
public void csucsba(Csucs c1) {
skel.enter();
skel.leave();
}
public int mennyit_mehet(int merre) {
/* @return: innen mennyit mehet az akt. élen a megadott irányba */
skel.enter();
skel.leave();
return 0;
}
} /// class Helyzet
// ---
public static abstract class Lathato extends Helyzet {
Labirintus labirintus;
public boolean utkozik_e(Lathato masik) {
// Imp: / 0 felé kerekítsen!! (x>=0??)
skel.enter();
skel.leave();
return false;
}
protected abstract void halad();
// ^^^ egy lépes egy iterációban; nem feltétlenül mozgás
} /// class Lathato
public static abstract class Targy extends Lathato {
abstract void felveve();
protected void halad() {
// a tárgyak alapból nem haladnak semerre, de a Kisgömböc felveheti
// őket.
skel.enter();
if (skel.ask_boolean("Ütközök :Kisgömböc-cel?")) {
felveve();
labirintus.removeLathato(this);
}
skel.leave();
}
} /// class Targy
public static class Gyemant extends Targy {
public Gyemant(Labirintus l) {
skel.constructor();
labirintus=l;
skel.leave();
}
public void felveve() {
skel.enter();
labirintus.getJatek().novelPontszam(23);
labirintus.csokkentGyemantszam();
skel.leave();
}
public void halad() { skel.enter(); super.halad(); skel.leave(); }
} /// class Gyemant
public static class KetyegoBomba extends Lathato {
public KetyegoBomba(Labirintus l) {
skel.constructor();
labirintus=l;
skel.leave();
}
public void halad() {
skel.enter();
if (skel.ask_boolean("Robbanjak fel?")) {
int i;
while (0!=(i=skel.ask("Mivel ütközök még?","már semmivel/Szörnnyel/Kisgömböccel"))) {
if (i==1) labirintus.removeLathato(null);
else if (i==2) labirintus.getJatek().csokkentEletszam();
}
labirintus.removeLathato(this);
}
skel.leave();
}
} /// class KetyegoBomba
public static abstract class Ajandek extends Targy {
protected void halad() {
skel.enter();
super.halad();
if (skel.ask_boolean("Lejárt az időm és tűnjek el?")) {
labirintus.removeLathato(this);
}
skel.leave();
}
} /// class Ajandek
public static class FelvehetoBomba extends Ajandek {
public FelvehetoBomba(Labirintus l) {
skel.constructor();
labirintus=l;
skel.leave();
}
public void felveve() {
skel.enter();
labirintus.getJatek().novelPontszam(1);
labirintus.getJatek().novelBombaszam();
skel.leave();
}
public void halad() { skel.enter(); super.halad(); skel.leave(); }
} /// class FelvehetoBomba
public static class Bonusz extends Ajandek {
public Bonusz(Labirintus l) {
skel.constructor();
labirintus=l;
skel.leave();
}
public void felveve() {
skel.enter();
labirintus.getJatek().novelPontszam(99);
skel.leave();
}
public void halad() { skel.enter(); super.halad(); skel.leave(); }
} /// class Bonusz
public static class SimaElixir extends Ajandek {
public SimaElixir(Labirintus l) {
skel.constructor();
labirintus=l;
skel.leave();
}
public void felveve() {
skel.enter();
labirintus.getJatek().novelPontszam(17);
labirintus.getJatek().novelEletszam(1);
skel.leave();
}
public void halad() { skel.enter(); super.halad(); skel.leave(); }
} /// class SimaElixir
public static class SzuperElixir extends Ajandek {
public SzuperElixir(Labirintus l) {
skel.constructor();
labirintus=l;
skel.leave();
}
public void felveve() {
skel.enter();
labirintus.getJatek().novelPontszam(17);
labirintus.getJatek().novelEletszam(0);
skel.leave();
}
public void halad() { skel.enter(); super.halad(); skel.leave(); }
} /// class SzuperElixir
public static abstract class Mozgo extends Lathato {
protected abstract void elfordult();
// ^^^ akkor hivodik meg, ha a haladasi irany megvaltozik. Feluldefinialando.
public void halad() {
skel.enter();
skel.leave();
}
}
public static abstract class Szorny extends Mozgo {
}
public static class ButaSzorny extends Szorny {
protected void elfordult() {
skel.enter();
skel.leave();
}
protected void halad_veletlenszeruen() {
skel.enter();
skel.leave();
}
public void halad() {
skel.enter();
halad_veletlenszeruen();
if (skel.ask_boolean("Ütközök-e Kisgömböccel?")) {
labirintus.getJatek().csokkentEletszam();
}
skel.leave();
}
public ButaSzorny(Labirintus l) {
skel.constructor();
labirintus=l;
skel.leave();
}
} /// ButaSzorny
public static class OkosSzorny extends Szorny {
protected void elfordult() {
skel.enter();
skel.leave();
}
protected void halad_legrovidebb_uton() {
skel.enter();
skel.leave();
}
public void halad() {
skel.enter();
halad_legrovidebb_uton();
if (skel.ask_boolean("Ütközök-e Kisgömböccel?")) {
labirintus.getJatek().csokkentEletszam();
}
skel.leave();
}
public OkosSzorny(Labirintus l) {
skel.constructor();
labirintus=l;
skel.leave();
}
} /// OkosSzorny
public static class Kisgomboc extends Mozgo {
protected void elfordult() {
skel.enter();
skel.leave();
}
protected void fordul(int merre) {
skel.enter();
skel.leave();
}
public void halad() {
/* megprobal kanyarodni; ha nem sikerul, megy tovabb egyenesen
* tipikusan a player adja meg `merre'-t
*/
skel.enter();
skel.leave();
}
public Kisgomboc(Labirintus l) {
skel.constructor();
labirintus=l;
skel.leave();
}
} /// Kisgomboc
public static class Jatek extends Thread {
protected Labirintus labirintus;
protected Csucslista csucslista;
public Jatek(Csucslista csucslista) {
skel.constructor();
this.csucslista=csucslista;
skel.leave();
}
public synchronized void szintlepes() {
skel.enter();
skel.leave();
}
public synchronized void bombatLerak() {
skel.enter();
skel.leave();
}
public synchronized void megallit() {
skel.enter();
skel.leave();
}
public boolean akartBombazni() {
return skel.ask_boolean("A játékos akart bombát lerakni?");
}
public void run() {
// ez _volt_ a Probac run() metodusa, ami kulon szalban fut.
// ez a szal frissiti a jatekallast (,,mozgatja'' a jatekot),
// tovabba ez a szal rajzol az `sd'-re.
skel.enter();
while (skel.ask_boolean("Van-e még élete a Kisgömböcnek?")) {
if (labirintus==null || labirintus.gyemantokElfogytak()) {
labirintus=new Labirintus(this, 0);
labirintus.palya_betoltve();
} else if (labirintus!=null && skel.ask_boolean("Alaphelyzetbe kell-e tenni a labirintust?")) {
labirintus.alaphelyzetbe();
}
if (skel.ask_boolean("Szünetel-e a játék?")) continue;
labirintus.getKisgomboc().fordul(skel.ask("Merre akar menni a játékos?","le/fel/jobbra/balra"));
labirintus.mozgat();
if (skel.ask_boolean("Van-e idő kirajzolni a játékállást?")) {
labirintus.elorajzol();
statRajzol();
}
}
if (skel.ask_boolean("Bekerültünk-e a csúcslistába?")) {
CsucslistaBejegyzes csb=new CsucslistaBejegyzes("",skel.ask_int("Elért pontszám =?",0,Integer.MAX_VALUE));
csucslista.felvesz(csb);
String s;
while (0!=(s=skel.ask_string("A név következő karaktere? (üres=vége)")).length()) {
csucslista.nevet_gepel(csb, s.charAt(0));
}
csucslista.kiment("filenév");
}
skel.leave();
} /// run()
protected void statValtozott() {
skel.enter();
skel.leave();
}
protected void statRajzol() {
skel.enter();
skel.leave();
} /// statRajzol()
public void novelPontszam(int mennyivel) {
skel.enter();
statValtozott();
skel.leave();
}
public void novelEletszam(int mennyivel) {
skel.enter();
statValtozott();
skel.leave();
}
public void novelBombaszam() {
skel.enter();
statValtozott();
skel.leave();
}
public void csokkentEletszam() {
// a valódi csökkentés nem itt történek, hanem a run()-ban
// itt csak egy flag-et állítunk be, hogy csökkenteni kell
skel.enter();
statValtozott();
skel.leave();
}
public boolean csokkentBombaszam() {
skel.enter();
if (skel.ask_boolean("Van-e még bomba a Kisgömböcnél?")) {
statValtozott();
skel.leave();
return true;
} else {
skel.leave();
return false;
}
}
} /// class Jatek
public static class Labirintus {
public void csokkentGyemantszam() {
skel.enter();
skel.leave();
}
public boolean gyemantokElfogytak() {
skel.enter();
boolean b=skel.ask_boolean("Elfogytak-e a gyémántok?");
skel.leave();
return b;
}
protected Jatek jatek;
// protected Lathato lathatok[]; -- a valódi programban ez lesz
// vvv ezek csak a szkeletonban vannak, demonstrációnak. A valódi
// programban ezek a lathatol[] tömbben lesznek, összevissza
protected Kisgomboc kisgomboc;
protected OkosSzorny okosSzorny;
protected ButaSzorny butaSzorny;
protected FelvehetoBomba felvehetoBomba;
protected Bonusz bonusz;
protected SimaElixir simaElixir;
protected SzuperElixir szuperElixir;
protected KetyegoBomba ketyegoBomba;
protected Gyemant gyemant;
public Kisgomboc getKisgomboc() { return kisgomboc; }
public Jatek getJatek() { return jatek; }
protected Lathato addLathato(Lathato lathato) {
/* egy új :Látható-t helyez el this.lathatok-ban */
skel.enter();
skel.leave();
return null;
}
public void removeLathato(int id) {
skel.enter();
skel.leave();
}
public void removeLathato(Lathato lathato) {
skel.enter();
removeLathato(0);
skel.leave();
}
public void feloszlat() {
/* amikor a :Játék felszabadítja, akkor hívódik meg */
skel.enter();
skel.leave();
}
public void elorajzol() {
skel.enter();
skel.leave();
}
public Labirintus(Jatek jatek, int sorszam) {
skel.constructor();
this.jatek=jatek;
skel.leave();
}
public Lathato[] getUtkozesek(int id) {
skel.enter();
skel.leave();
return null;
}
public void palya_betoltve() {
/* inicializálás miután a pálya már betöltődött */
skel.enter();
grafot_felepit();
skel.leave();
}
public void mozgat() {
skel.enter();
keletkeznek();
utkozesvizsgalat();
haladnak();
eltunnek();
skel.leave();
}
public void keletkeznek() {
skel.enter();
int i;
if (jatek.akartBombazni()) {
ketyegoBomba=new KetyegoBomba(this);
}
while (0!=(i=skel.ask("Mi keletkezik?","semmi/FelvehetőBomba/Bónusz/SimaElixír/SzuperElixír/OkosSzörny/ButaSzörny"))) {
if (i==1) felvehetoBomba=new FelvehetoBomba(this);
else if (i==2) bonusz=new Bonusz(this);
else if (i==3) simaElixir=new SimaElixir(this);
else if (i==4) szuperElixir=new SzuperElixir(this);
else if (i==5) okosSzorny=new OkosSzorny(this);
else if (i==6) butaSzorny=new ButaSzorny(this);
}
skel.leave();
}
public void utkozesvizsgalat() {
// ez számos metódust meghív, és az eredményt egy tömbbe helyezi.
// Nincs sok értelme a részleteket bevenni a szkeletonba, mert a tömb
// amúgy sem jelenik meg (kérdésekkel váltjuk ki).
skel.enter();
skel.leave();
}
public void haladnak() {
skel.enter();
int i;
while (0!=(i=skel.ask("Mi halad még?","már semmi/FelvehetőBomba/Bónusz/SimaElixír/SzuperElixír/OkosSzörny/ButaSzörny/Kisgömböc/KetyegőBomba/Gyémánt"))) {
if (i==1 && felvehetoBomba!=null) felvehetoBomba.halad();
else if (i==2 && bonusz!=null) bonusz.halad();
else if (i==3 && simaElixir!=null) simaElixir.halad();
else if (i==4 && szuperElixir!=null) szuperElixir.halad();
else if (i==5 && okosSzorny!=null) okosSzorny.halad();
else if (i==6 && butaSzorny!=null) butaSzorny.halad();
else if (i==7 && kisgomboc!=null) kisgomboc.halad();
else if (i==8 && ketyegoBomba!=null) ketyegoBomba.halad();
else if (i==9 && gyemant!=null) gyemant.halad();
else skel.println_plussz(" !! ilyen :Látható nincs is a :Labirintusban!");
}
skel.leave();
}
public void eltunnek() {
// ezt sincs sok értelme részletezni a szkeletonban, mert destruktorok
// amúgy sem szerepelnek, és az eltűnési viszonyok már a halad()-ok
// meghívásakor eldőltek
skel.enter();
skel.leave();
}
public void grafot_felepit() {
// a labirintust egy .gif file-ból építjük fel
skel.enter();
Csucs cs1=new Csucs();
kisgomboc=new Kisgomboc(this);
cs1.osszekot(null);
new Csucs();
gyemant=new Gyemant(this);
cs1.osszekot(null);
new Csucs();
new Gyemant(this);
skel.leave();
}
public void alaphelyzetbe() {
/* akkor hívódik meg, amikor a Kisgömböc meghalt, és a Labirintus az alaphelyzetből indul tovább */
skel.enter();
skel.leave();
}
}
public static class CsucslistaBejegyzes implements java.io.Serializable {
// `implements Comparable', de az nincs a JDK1.1-ben :-(
// muszáj `implements Serializable', nem elég Csucslistának
public CsucslistaBejegyzes(String nev, int pontszam) {
skel.constructor();
skel.leave();
}
public int compareTo(Object masik) {
skel.enter();
skel.leave();
return 0;
}
}
public static class Csucslista implements java.io.Serializable {
protected void alapErtek() {
/* alapértékekkel feltöltött :Csúcslistát hoz létre */
skel.enter();
skel.leave();
}
public Csucslista() {
skel.constructor();
alapErtek();
skel.leave();
}
public static Csucslista betolt(String filenev) {
skel.enter();
skel.leave();
return null;
}
public void kiment(String filenev) {
skel.enter();
skel.leave();
}
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.
*/
skel.enter();
skel.leave();
return 0;
}
public int nevet_gepel(CsucslistaBejegyzes csb, char c) {
skel.enter();
skel.leave();
return 0;
}
} /// class Csucslista
public static class KkkgSzekvenciaCanvas extends SzekvenciaCanvas {
public KkkgSzekvenciaCanvas() {
super();
hanySorFerKi();
SzekvenciaBejegyzes t[]=new SzekvenciaBejegyzes[13];
t[0]=new SzekvenciaBejegyzes("Szkeleton","Szkeleton",0);
t[1]=new SzekvenciaBejegyzes("Jatek","Jatek",1);
t[2]=new SzekvenciaBejegyzes("Labirintus","Lab.tus",2);
t[3]=new SzekvenciaBejegyzes("Kisgomboc","Kisgomboc",3);
t[4]=new SzekvenciaBejegyzes("Gyemant","Gyemant",4);
t[5]=new SzekvenciaBejegyzes("FelvehetoBomba","F.Bomba",5);
t[6]=new SzekvenciaBejegyzes("KetyegoBomba","K.Bomba",6);
t[7]=new SzekvenciaBejegyzes("OkosSzorny","O.Szorny",7);
t[8]=new SzekvenciaBejegyzes("SzuperElixir","Sz.Elixir",8);
t[9]=new SzekvenciaBejegyzes("Csucslista","Csucslista",9);
t[10]=new SzekvenciaBejegyzes("ButaSzorny","B.Szorny",10);
t[11]=new SzekvenciaBejegyzes("SimaElixir","Si.Elixir",11);
t[12]=new SzekvenciaBejegyzes("Csucs","Csucs",12);
// OK: ButaSzorny es SimaElixir is!
sorok[0]=new SzekvenciaSor(t,0);
utso=1;
}
}
// ---
public void init() {
initFont2();
this.c=new KkkgSzekvenciaCanvas();
super.init();
}
public void skel_main() {
skel.enter();
while (skel.ask_boolean("Induljon új játék?")) {
Csucslista cs=new Csucslista();
Jatek j=new Jatek(cs);
j.run();
}
skel.leave();
}
public KkkgSkel() { }
public KkkgSkel(boolean application_e) { this.application_e=application_e; }
public static void main(String args[]) {
System.err.println("Kincskereso Kisgomboc Szkeleton, 1. verzio\n(C) Spring 2001 by eNTitanok. http://www.inf.bme.hu/~pts/entitanok/\n");
final OkosApplet a=new KkkgSkel(true);
final OkosFrame f=new OkosFrame("eNTitánok: Kincskereső Kisgömböc, szkeleton", a, OkosFrame.A_APPLETKILEP);
a.init();
f.show();
a.start();
}
} /// class KkkgSkel