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