WebProg-2014/Gyakorlat9
(→KeyboardController) |
|||
46. sor: | 46. sor: | ||
* Fejezzük be most a '''writeToSelectedIfPossible''' metódust úgy, hogy ha üres a mezõ (azaz 0 van rajta), akkor hívja meg a '''setNumber''' metódusát a '''selectedField'''-nek, paraméterként adjuk meg a kapott számot. | * Fejezzük be most a '''writeToSelectedIfPossible''' metódust úgy, hogy ha üres a mezõ (azaz 0 van rajta), akkor hívja meg a '''setNumber''' metódusát a '''selectedField'''-nek, paraméterként adjuk meg a kapott számot. | ||
* Írjuk meg a '''setNumber''' metódust, ami a '''Field''' '''number''' adattagját átállítja a kapott számra. | * Írjuk meg a '''setNumber''' metódust, ami a '''Field''' '''number''' adattagját átállítja a kapott számra. | ||
+ | |||
+ | * Mindezek csak akkor fognak bármit is csinálni, ha a '''KeyboardController'''-t hozzáadjuk a Frame-hez. Szóval menjünk a '''Game''' '''initUI''' metódusához és az '''addMouseListener''' után írjátok az alábbit: | ||
+ | <java> | ||
+ | addKeyListener(new KeyboardController(this)); | ||
+ | </java> | ||
+ | Ezzel hozzáadja az új osztályunkat, mint '''KeyAdapter'''-t. | ||
Ezek után a kiválasztott mezõkben a 0-kat át tudjuk írni más számra. | Ezek után a kiválasztott mezõkben a 0-kat át tudjuk írni más számra. |
A lap 2015. április 22., 18:36-kori változata
Tartalomjegyzék |
BattleSudoku
Használhatjátok az elõzõ gyak megoldását kiindulópontnak, de innen is letölthetitek a kellõ file-okat: gyak8_megold.zip.
Package
Hozzatok létre egy új package-et controllers névvel (jobb klikk a project-re -> new -> package). Majd mozgassátok át ide a MouseController osztályt (bal klikk az osztályra, tartsátok lenyomva és húzzátok át a controllers package-be).
Selected Field
A GameBoard osztályt fogjuk kiegészíteni, méghozzá úgy, hogy mostantól csak egy mezõt lehessen kiválasztani és ezt a mezõt tároljuk is egy adattagban.
Hozzatok létre egy Field típusú adattagot selectedField néven, ennek az alapértelmezett értéke legyen null (ami azt jelöli, hogy nem mutat semmire ez a változó, mi pedig ezzel fogjuk jelezni, hogy nincs semmi kiválasztva).
isSomethingSelected
Írjatok egy metódust isSomethingSelected névvel, ami visszaadja, hogy valami ki van-e választva vagy nincs. (Lehet olyat írni, hogy valamiValtozo == null.)
switchSelectedByCoord
Írjatok egy switchSelectedByCoord metódust, ami kap két int-et (x, y) és megváltoztatja a kiválasztott mezõt arra ami ezen a koordinátán található. A következõ három eset lehetséges:
- Nincs kiválasztva semmi
- Az van már kiválasztva amit most is ki akarnánk változtatni (ebben az esetben szüntessük meg a kiválasztását és állítsuk a selectedField adattagot null-ra.)
- Van már kiválasztott, ezt deselectelni kell és az újat select-elni.
Használjátok a getFieldByCoord metódust amit még korábban írtunk.
Game módosítás
Menjünk át kicsit a Game osztályra, ahol a mouseClick metódust módosítsuk úgy, hogy a switchSelectedByCoord-ot hívja meg a selectByCoord helyett.
Futtassuk a játékot és elméletileg mostmár csak egy mezõt tudunk egyszerre kijelölni.
KeyboardController
Írjunk egy KeyboardController nevû osztályt, mely örököl a KeyAdapter-bõl és a segítségével a játék érzékeli, ha egy számot nyomtunk le. (KeyEvent.VK_1 az 1-es gomb és KeyEvent.VK_9 a kilences, a többinek az értéke ezek között van)
- Legyen egy Game adattagja és konstruktora, hasonlóan a MouseController-hez.
- Írjuk meg a keyPressed metódusát, mely ha szám lenyomását érzékeli akkor hívja meg a tárolt Game adattag keyPress metódusát, paraméterként adja át neki a lenyomott számot. (Kiszámolható a szám a következõ módon, ha keycode a lenyomott gomb kódjának változóneve: keycode - KeyEvent.VK_0)
- Hibát kapunk hisz a keyPress metódusa a Game-nek még nem létezik, hozzuk ezt létre (létrehozhatjuk gyorsan ha a hiba felé visszük az egeret és a create...-ot választjuk)
- A keyPress metódus hívja meg a gameBoard-nak a writeToSelectedIfPossible metódusát a kapott számmal, majd hívja meg magán a repaint metódust (mint a mouseClick-nél).
- Hozzuk létre a writeToSelectedIfPossible metódust a GameBoard osztályban.
- Ez ellenõrizze, hogy ki van-e választva valami, ha nincs akkor ne csináljunk semmit, ha van valami, akkor nézzük meg, hogy üres-e a mezõ, ehhez írjunk a Field osztályba egy isEmpty metódust.
- Az isEmpty adjon vissza true-t ha a number adattagja 0, különben false-t
- Fejezzük be most a writeToSelectedIfPossible metódust úgy, hogy ha üres a mezõ (azaz 0 van rajta), akkor hívja meg a setNumber metódusát a selectedField-nek, paraméterként adjuk meg a kapott számot.
- Írjuk meg a setNumber metódust, ami a Field number adattagját átállítja a kapott számra.
- Mindezek csak akkor fognak bármit is csinálni, ha a KeyboardController-t hozzáadjuk a Frame-hez. Szóval menjünk a Game initUI metódusához és az addMouseListener után írjátok az alábbit:
addKeyListener(new KeyboardController(this));
Ezzel hozzáadja az új osztályunkat, mint KeyAdapter-t.
Ezek után a kiválasztott mezõkben a 0-kat át tudjuk írni más számra.
Biztonságos függvények (Bónusz feladat)
- Írjatok függvényeket, melyek biztonságosan valósítanak meg függvényeket a java.lang.Math csomagból.
- Biztonságos alatt azt értem, hogy ha pl. gyököt próbálnánk vonni negatív számból, akkor dobjunk kivételt.
- Ez a kivétel általunk írt legyen, aminek legalább egy String adattagja van, amiben írja a hiba okát.
- A következõket mindenképp írjátok meg:
- osztás (ehhez nem kell a csomag)
- gyökvonás
- logaritmus
- arcsin
- Ezeket teszteljétek le egy mainben. Ne felejtsétek el a try blokkot!