7. feladatsor


Órák folytatása



Ha kedve van hozzá, játszadozzon még el az órával. További ötletek:

1. Most a gombon ne felirat jelenjen meg, hanem az órával szinkron módon működő másik kis óra. A gombra kattintva vagy mindkét óra induljon el, vagy mindkettő álljon meg.

Segítség: írjon saját JButton osztályt.


Néhány további megoldási ötlet: ora_gombbal.pdf


2. Alakítsa át a programot „valódi” órává. A másodpercmutató mellett legyen perc- és óramutató is. A mutatók elrendezése egy valódi órát szimuláljon. Mindhárom mutató különböző színű és hosszúságú legyen. Az analóg óra alatt jelenítse meg az órán mutatott időpont digitális változatát. Mindkettő (az analóg is és a digitális is) az operációs rendszer rendszeridejét mutassa.

Segítség: használja a Date és Calendar osztályt

Az analóg óra mutatóinak vastagságát is állítsa be az ábrán látható módon.

Segítség: használja a Graphics2D lehetőségeit.

Ez már valóban játszadozás, próbálja önállóan megoldani.

3. Készítsen olyan alkalmazást, amelyen különböző időzónák aktuális idejét láthatjuk.

Segítség: használja a DateFormat, Calendar, GregorianCalendar, TimeZone osztályokat és a Graphics2D lehetőségeit.

Kiindulhat pl. innen:

https://docs.oracle.com/javase/tutorial/2d/index.html

https://docs.oracle.com/javase/tutorial/2d/TOC.html


Ez is önálló játszadozás.

4. Ha megtetszett a Graphics2D, akkor még tovább játszadozhat, és például létrehozhat ilyen (vagy szebb) felületet:

Ezen egy óra mutatói mozognak (természetesen az igazi órához hasonlóan, vagyis mialatt a nagymutató körbeér, a kicsi az alatt tesz meg egy egységnyit, de persze, felgyorsíthatja az igazi órához képest). A nyilakra kattintva megadható, hogy milyen irányban forogjon a mutató – ekkor a számok kiírási sorrendje is változzon.

Természetesen ennél sokkal szebb megoldásokat is létrehozhat (pl. szebb színek, vagy az óralapon belül vannak a számok, vagy a mutatók „vonszolják” magukkal a számokat akár úgy, hogy mindig csak az aktuális szám látszódik vagy úgy, hogy egy körbejáráskor a nagymutató kirajzolja, majd ha körbeért, letörli, és kezdődik elölről, stb..) A megoldáshoz használja a Java2D lehetőségeit!


Hello Wien újabb folytatása



Harcoljanak Mátyás katonái!

Vagyis a csatába küldés után (Csatába gomb, melynek hatására a kiválasztott katonák véletlenszerűen elhelyezkednek a csatamezőn) változzon aktívra a „Küzdelem” feliratú gomb (előtte nyilván inaktív volt), hatására pedig bizonyos időközönként menjen arrébb egy-egy, a harcolók közül véletlenül kiválasztott katona. Az „arrébb menni” most azt jelenti, hogy egy másik véletlen helyre ugrik.

A küzdelmet csak egyszer lehet elindítani, ezért megnyomása után a gomb felirata változzon meg „Leállít”-ra, és ha ismét megnyomjuk, álljon le a csata.

(Segítség: Célszerű a vezérlő osztályt átalakítani szál osztállyá.)

FONTOS: Ha a vezérlő osztály működését korábban a start() metódus indította, akkor most kezdje avval, hogy ezt átnevezi mondjuk indit()-ra (Refaktorizációval.)

Ha kedve van, kitalálhat izgalmasabb küzdelmi módot is. :)


A korábbiakhoz képest nincs benne új, próbálja önállóan megoldani.


Koch hópehely


Készítsen alkalmazást a Koch-hópehely (http://hu.wikipedia.org/wiki/Koch-görbe) alakulásának bemutatására.

Az alapelv: kiindulunk egy szabályos háromszögből. Ez a 0. szint.

A következő lépésben a háromszög minden oldalát három részre bontjuk, és a középső rész fölé egy egyharmad oldalhosszúságú szabályos háromszöget rajzolunk úgy, hogy kimarad az eredeti vonalon lévő szakasz. Ez az 1. szint. A továbbiakban az előző szakaszban leírtakat ismételjük az összes vonalra.

Hasonlóan oldja meg, mint ahogy a fenti gif képen is látható (de ne csak növekedjen, hanem csökkenően is működjön), vagyis animált módon a háromszögből indulva jusson el mondjuk az 5. vagy 6. szintig (tovább nem nagyon érdemes, mert túlzottan forrásigényes a rekurzió), majd csökkenjen vissza a háromszögig, aztán megint jusson el az utolsó szintig, megint csökkenjen vissza, stb.

Segítség:

A feladatot rekurzióval érdemes megoldani. Egy adott szintre fogalmazzuk meg a metódust, mégpedig úgy, hogy azon a szinten négy „vonalat” rajzoljon (az első szinthez tartozó ábrán a háromszög egy-egy oldala „fölött” látható, hogy mi ez a négy vonal). Ténylegesen azonban nem sima vonalat, hanem a vonalrajzolás helyett ismét meghívjuk a metódust, de eggyel kisebb szinten.

Ha a sarokpontok koordinátái sorban (x1,y1), (x2,y2), (x3,y3), (x4,y4), (x5,y5), akkor a metódust meg kell hívnunk az ((x1,y1), (x2,y2)); ((x2,y2), (x3,y3)); ((x3,y3), (x4,y4)) és ((x4,y4), (x5,y5)) szakaszokra.

Az (x3, y3) pont meghatározása igényel egy kis (középiskolás) matek tudást. Ha van ideje, ellenőrizze az interneten talált képletet:

x3 = (int) (0.5 * (x1 + x5) + Math.sqrt(3) * (y1 - y5) / 6);

y3 = (int) (0.5 * (y1 + y5) + Math.sqrt(3) * (x5 - x1) / 6);


További segítség: koch_hopehely.pdf