WebProg-2014/Gyakorlat4
Mindenek elõtt
Hozzatok létre egy új projectet Asteroids2 néven. Hozzatok benne létre egy asteroids package-et. Majd töltsétek le innen a hiányos java file-okat. (Ezek az elõzõ gyakorlat megoldásait tartalmazzák, plusz még egy-két módosítást, így mindenkinek le kell töltenie.)
Pontszámok
Az AsteroidsGame osztálynak van egy statusbar nevû változója, az initUI-ban van inicializálva (azaz itt jön létre egy objektum amit tárol). Láthatjátok, hogy egy 0-t tartalmazó Stringet kap, és ha elindítjátok a játékot azt is láthatjátok, hogy ezáltal a bal alsó sarokban egy 0 van a játékban. Ez lesz a pontszám, de még nem mûködik.
Most nézzünk bele a MainLoop asteroidBulletCollision metódusába. Ez fut le akkor, ha ütközik egy lövedék egy aszteroidával. Láthatjátok, hogy megkapja az aszteroidát ami ütközik és a lövedéket. Az aszteroidának meghívja a destroy metódusát majd a for ciklusban az újonnan létrejött aszteroidákat berakja az asteroidContainer-be (emlékezzetek vissza a destroy visszaadott egy tömböt az újonnan készítendõ aszteroidákról). A destroy hívása után kellene növelnünk a számlálót eggyel, egy aszteroida egy pontot ér.
- Hozzunk létre egy privát adattagot a MainLoop-nak, amiben tároljuk a pontokat (egész szám), én score-nak fogom nevezni.
- A következõ függvényhívás átállítja a statusbar értékét a megadottra:
statusbar.setText(String.valueOf( ide kell az érték ));
- Viszont van egy kis gond, hisz a statusbar az AsteroidsGame adattagja volt, azt itt nem érjük el. Hát csináljunk ide is egy referenciát hozzá:
- Menjünk vissza az AsteroidsGame osztályba és hozzunk létre egy publikus függvényt getStatusbar névvel, ami visszaadja a statusbar adattagot. A visszatérési értékét ebbõl már tudnotok kell, hogy mi.
- Térjünk vissza a MainLoop-ra, itt hozzunk létre egy megfelelõ típusú privát adattagot, amiben tároljuk a statusbar-t. Majd ezt vagy a konstruktorban vagy az initBoard-ban állítsuk be a következõ módon:
statusbar = parent.getStatusbar();
- A parent, ha megnézitek az AsteroidsGame objektum, szóval elkérjük a statusbar-ját és így már mi is "tároljuk".
- Most, hogy már van statusbar itt is mûködni fog a korábbi setText-es kód, szóval próbáljátok ki.
- Ha még mindig 0-t mutat, ne felejtsétek el, hogy a score változót növelni kellene amikor egy aszteroida elpusztul, szóval tegyétek meg a növelést a destroy után.