package cicaprojekt; import java.util.ArrayList; import java.util.List; /** * A játékban megjelenő játékosokat reprezentáló osztály. A két játékos * Jaffa és O'Neill ezredes lehet. */ public class Player extends PlayerBase { /** * A már begyűjtött ZPM-eket tároló lista. */ private List zpmContainer; /** * Az éppen aktuálisan felemelt dobozt tárolja. */ private Box boxLifted; /** * A játékos elpusztításáért felelős függvény. Amennyiben a játékosnál van * egy doboz, az is elpusztuls. Ilyenkor a játékos ZPM-tárolója is kiürül. */ @Override public void destroy() { destroyed = true; if(hasBox()) boxLifted.destroy(); Game.instance.playerDestroyed(this); zpmContainer.clear(); } /** * Az osztály konstruktora. A játékos kezdőcsempéjét tulajdonságait állítja be. * * @param name a játékos neve * @param startTile a kezdőcsempe * @param startDirection a játékos kezdőiránya */ public Player(String name, Tile startTile, Direction startDirection) { super(name, startTile, startDirection); zpmContainer = new ArrayList<>(); } /** * Megmondja, hogy a játékosnál van-e éppen doboz. * * @return true, ha van nála doboz * false, egyébként */ public boolean hasBox() { return (boxLifted != null); } /** * Egy doboz felemelését implementáló függvény. A játékos előtt lévő doboz * emeli fel. */ public void boxLift() { if(!isDestroyed()) boxLifted = currentTile.getAdjacentTile(facingDirection).getABox(); } /** * Egy doboz lerakását implementáló függvény. A játékos előtt lévő csempére * teszi le a dobozt, ha a csempére lehet dobozokat rakni. * * @see Tile#boxPermission() */ public void boxDrop() { if(!isDestroyed()) { Tile target = currentTile.getAdjacentTile(facingDirection); if (target.boxPermission()) { target.putABox(boxLifted); boxLifted = null; } } } /** * Egy ZPM felvevését implementáló függvény adott csempéről. * A felvett ZPM bekerül a tárolóba, majd új ZPM generálódik. * * @param tile a kapott csempe * @see Game#generateZPM() */ @Override public void pickZPM(Tile tile) { zpmContainer.add(tile.getZPMFromTile()); Game.instance.generateZPM(); } /** * Egy csillagkapu kilövését megvalósító függvény. A játékos aktuális * irányába lövi ki a kapott csillagkaput. * * @param stargate kapott csillagkapu */ public void shootStargate(Stargate stargate) { if(!isDestroyed()) this.currentTile.getAdjacentTile(facingDirection).spawnStargate(stargate, facingDirection); } /** * Visszatér a játékos tárolójában lévő ZPM-ek számával. * * @return ZPM-ek száma */ public int getZPMCount(){ return zpmContainer.size(); } }