diff --git a/cicaprojekt/Game.java b/cicaprojekt/Game.java index 5ce8c25..70e3af9 100644 --- a/cicaprojekt/Game.java +++ b/cicaprojekt/Game.java @@ -6,21 +6,62 @@ import java.io.File; import java.io.IOException; import java.util.Map; +/** + * Egy játékmenetet reprezentáló oszály. + */ public class Game { + /** + * Az egyik játékos, O'Neill ezredes tárolása. + */ private Player oneill = null; + + /** + * A másik játékos, Jaffa tárolása. + */ private Player jaffa = null; + /** + * A Replikátor tárolása. + */ private PlayerBase replicator = null; + /** + * Az aktuális útvesztő tárolása. + */ private Dungeon dungeon; + + /** + * A játékidő tárolása. + */ private FlowOfTime flowoftime; + /** + * A megjelenítési felület tárolása. + */ private Display display; + /** + * Egy játékpéldány. + */ public static Game instance = new Game(); + /** + * Az osztály konstruktora. + */ private Game() {} + /** + * A Replikátor megsemmisítését implementáló függvény. + * Ha a Replikátor úgy semmisült meg, hogy szakadékba esett, akkor + * a szakadék helyét egy mező veszi át. + * + * @param caller a megsemmisülő Replikátor + * @see Tile#setX(int) + * @see Tile#setY(int) + * @see Tile#setAdajacentTile(Tile, Direction) + * @see Tile#getAdjacentTile(Direction) + * @see Display#gapMagic(Gap, Field, int) + */ public void playerBaseDestroyed(PlayerBase caller) { if (caller.getCurrentTile().isGap()) { Field field = new Field(); @@ -47,6 +88,17 @@ public class Game { } } + /** + * Egy játékos megsemmisítését implementáló függvény. Csökkenti a játék + * teljesítéséhez szükséges ZPM-ek számát a megsemmisülő általá + * összegyűjtött ZPM-ekkel, majd frissíti a megjelenítést. + * Ha mindkét játékos halott, akkor a játék véget ér Anubis győzelmével. + * + * @param caller a megsemmisülő játékos + * @see #updateDisplay() + * @see FlowOfTime#stopTime() + * @see #stopGame(GameoverCause) + */ public void playerDestroyed(Player caller) { dungeon.setZPMsToWin(dungeon.getZPMsToWin() - caller.getZPMCount()); Game.instance.updateDisplay(); @@ -56,14 +108,38 @@ public class Game { } } + /** + * Beállítja az aktuális útvesztőt a kapott útvesztőre. + * + * @param dungeon kapott útvesztő + */ public void setDungeon(Dungeon dungeon) { this.dungeon = dungeon; } + /** + * Beállítja az akutális megjelenítést a kapott megjelenítésre. + * + * @param display kapott megjelenítés + */ public void setDisplay(Display display) { this.display = display; } + /** + * Elindítja a játékot a kapott útvesztőt tartalmazó fájl alapján. + * Inicializálja a csillagkapukat, felépíti az útvesztőt, létrehozza + * a játékosokat és a Replikátort, valamint beállítja a megjelenítést. + * Elindítja a zenét, majd a játékidőt is. + * + * @param dungeonFile kapott útvesztő + * @throws IOException Ha nem található a fájl. + * @see Stargate#init() + * @see Dungeon#buildDungeon(File, Display) + * @see Display#addVisual(Drawer) + * @see Display#startMusic() + * @see FlowOfTime#start(long) + */ public void startGame(File dungeonFile) throws IOException { Stargate.init(); @@ -84,6 +160,13 @@ public class Game { flowoftime.start(dungeon.getTimeLimit()); } + /** + * A játék megállítása valamilyen kapott okból. Az oknak megfelelően + * más és más befejezése van a játéknak. Végül a zene leállítása. + * + * @param cause a leállítás oka + * @see Display#stopMusic() + */ public void stopGame(GameoverCause cause) { switch (cause){ @@ -125,36 +208,83 @@ public class Game { display.stopMusic(); } + /** + * O'Neill ezredes léptetése a kapott irányba. + * + * @param direction kapott irány + * @see Player#move(Direction) + * @see #checkZPMStatus() + */ public void moveONeill(Direction direction) { oneill.move(direction); checkZPMStatus(); } + /** + * Jaffa léptetése a kapott irányba. + * + * @param direction kapott irány + * @see Player#move(Direction) + * @see #checkZPMStatus() + */ public void moveJaffa(Direction direction) { jaffa.move(direction); checkZPMStatus(); } + /** + * A Replikátor léptetése a kapott irányba. + * + * @param direction kapott irány + * @see PlayerBase#move(Direction) + */ public void moveReplicator(Direction direction) { replicator.move(direction); } + /** + * O'Neill ezredes forgatása balra. + * + * @see Player#rotateLeft() + */ public void rotateOneillLeft() { oneill.rotateLeft(); } + /** + * O'Neill ezredes forgatása jobbra. + * + * @see Player#rotateRight() + */ public void rotateOneillRight() { oneill.rotateRight(); } + /** + * Jaffa forgatása balra. + * + * @see Player#rotateLeft() + */ public void rotateJaffaLeft() { jaffa.rotateLeft(); } + /** + * Jaffa forgatása jobbra. + * + * @see Player#rotateRight() + */ public void rotateJaffaRight() { jaffa.rotateRight(); } + /** + * O'Neill ezredes dobozainak kezelése. + * + * @see Player#hasBox() + * @see Player#boxDrop() + * @see Player#boxLift() + */ public void boxONeill() { if(oneill.hasBox()) oneill.boxDrop(); @@ -162,6 +292,13 @@ public class Game { oneill.boxLift(); } + /** + * Jaffa dobozainak kezelése. + * + * @see Player#hasBox() + * @see Player#boxDrop() + * @see Player#boxLift() + */ public void boxJaffa() { if(jaffa.hasBox()) jaffa.boxDrop(); @@ -169,6 +306,13 @@ public class Game { jaffa.boxLift(); } + /** + * Csillagkapu lövését implementáló függvény. + * Ha a kilőtt csillagkapu sárga vagy kék, akkor O'Neill + * ezredeshez tartozik, egyébként Jaffához. + * + * @param colora csillagkapu színe + */ public void shootStargate(Color color) { if(color == Color.YELLOW || color == Color.BLUE) oneill.shootStargate(Stargate.get(color)); @@ -176,6 +320,11 @@ public class Game { jaffa.shootStargate(Stargate.get(color)); } + /** + * A megjelenítő panel frissítése, újrarajzolása. + * + * @see Control#ioErrorMessage() + */ public void updateDisplay() { try { display.drawVisuals(); @@ -186,6 +335,16 @@ public class Game { } } + /** + * A ZPM-ek állapotának ellenőrzése. Ha O'Neill ezredes és Jaffa összesen + * összegyűjtöttek annyi ZPM-et, amennyi szükséges a játék megnyeréséhez, + * akkor az fog nyerni, aki több ZPM-et gyűjtött, egyébként veszítettek. + * A játékidő leállítódik és a játék véget ér. + * + * @see Player#getZPMCount() + * @see FlowOfTime#stopTime() + * @see #stopGame(GameoverCause) + */ private void checkZPMStatus() { if (oneill.getZPMCount() + jaffa.getZPMCount() >= dungeon.getZPMsToWin()) { if (oneill.getZPMCount() > jaffa.getZPMCount()) { @@ -215,6 +374,15 @@ public class Game { } } + /** + * A ZPM-ek véletlenszerű generálását implementáló függvény. A függvény addig + * iterál, amíg nem talál alkalmas helyet egy új ZPM-nek. Ha ezt megtalálta, + * akkor létrehoz oda egy új ZPM-et, majd megnöveli a játékban való győzelemhez + * szükséges ZPM-ek számát. + * + * @see Tile#setZPMOnTile(ZPM) + * @see Dungeon#setZPMsToWin(int) + */ public void generateZPM() { if(((jaffa.getZPMCount() + oneill.getZPMCount()) % 2) == 0) { Tile source = oneill.getCurrentTile();