WebProg-2014/Gyakorlat9

A MathWikiből
(Változatok közti eltérés)
 
(egy szerkesztő 2 közbeeső változata nincs mutatva)
30. sor: 30. sor:
  
 
Futtassuk a játékot és elméletileg mostmár csak egy mezõt tudunk egyszerre kijelölni.
 
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.
 
  
  

A lap jelenlegi, 2015. április 29., 10:47-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.


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!
Személyes eszközök