8. feladatsor

Néhány további feladat:

Túl sok feladat lesz, nyilván nem kell mindet megoldania ahhoz, hogy ügyes programozóvá váljon, de remélhetőleg talál köztük néhány olyat, amelynek megoldása örömet okoz. A megoldott feladatok mindegyik lehet Maven projekt, de legalább egy legyen ilyen. Esetleg rakhat háttérzenét is a feladatok mögé, vagy jó lenne, ha legalább az egyik feladatban adatbázist használna. Bár javasoljuk a Maven és az adatbázis használatát, a megoldási ötletekben csak a legegyszerűbb projektszerkezetet villantjuk fel.


Mielőtt hozzálátna, tanulmányozza át a mozgasvariaciok.pdf fájlt!

A feladatokhoz mellékelt adatok csak .txt fájlokat tartalmaznak, de célszerű egyik-másik feladatot adatbázis-kezeléssel megoldani.

Ha esetleg szüksége van rá, innen letöltheti a rendezhető listamodell lehetséges kódját: RendezhetoListModel.java


Repülőjáratok



Szimuláljon egy repülőjárat-keresést!

A 900 x 600 - as méretű felület jobboldalán legyen a 700 x 600 - as méretű térkép, a baloldalán pedig két combo-box – az egyikben az indulási, másikban az érkezési várost lehet kiválasztani.

Ha kiválasztottunk egy várost (bármelyik combo-boxból), akkor jelenjen meg egy pont a város helyén, ha a Keress feliratú gombot is megnyomjuk, akkor az induló városból induljon el egy repülőgép a másik városba. Induláskor írja ki az útiköltséget is (távolság szorozva km-árral). Ha odaért, akkor egy csöpp várakozás után tűnjön el a kép is és a költség is. Ezután újabb városok között lehessen keresni. Mindig csak az aktuális városokat jelentő pontokat lehessen látni. A repülő orra mindig a célállomás irányába mutasson (elég csak jobbra vagy balra).

A szükséges adatok a varosok.txt fájlban találhatóak, de természetesen adatbázisból is dolgozhat.

Figyeljen a kért méretre, mert csak ilyen méret mellett jók az adott koordináták. (Célszerű átméretezhetetlennek definiálni a felületet, de csak akkor, ha már működik a program.) Ha mégis elcsúsznának a városokat jelző pöttyök, vagy újabbakat akar felvenni, akkor ideiglenesen definiálja az egérkattintás eseményt, és írassa ki a kattintás helyének koordinátáit.

A repülőgép javasolt mérete: 30 x 20.

A működést bemutató videó: repulojaratok.mp4

Adatok: repulojaratok.zip

Néhány megoldási ötlet: repulojaratok.pdf


Mikulás 1.



Szimulálja a Mikulás munkáját egy Java programmal. A felület baloldala egy 150 x 500-as vezérlő felület, mellette egy 650 x 500-as havas táj látható. A program indulásakor már megjelennek a felső listában azok a nevek, akik potenciálisan a Mikulás „ügyfelei”. (Egy fájlból vagy adatbázisból olvassa be őket.) Ekkor házakat még nem lehet látni. Azok kattintással kerülnek a felületre, de csak akkor, ha a hegyvonulat alatt kattintunk, és még nem indult útjára a Mikulás. A kattintás helye a házikó-kép bal alsó sarkát jelöli ki.

Az indító gombra kattintva indul útjára a Mikulás. (Indulás után a gomb inaktívvá válik.)

A Mikulás megy házról házra. Mindegyiknél vár valamennyit (annyit, amennyi idő alatt odaért egyikből a másikba), majd lerak a ház mellé egy kis csomagot (a lehetséges csomagok közül véletlenül választja, hogy melyiket). Miután letette a csomagot, a baloldali alsó listában megjelenik a megajándékozott neve. (A nevet a fönti listából választjuk, szintén véletlenszerűen, és mindenki csak egyszer kaphat ajándékot.)

Ha az utolsó háznál is lerakta az ajándékot, akkor eltűnik, de a csomagok maradnak.

A csomag a ház jobb alsó sarkához kerül, a mikuláskép középpontja azonos lehet a házat kijelölő kattintás helyével.

Javasolt képméretek: csomag: 30 x 30, ház 60 x 60, Mikulás 80 x 80. A látóhatár mondjuk, 100 pixelnyire van a kép tetejétől.


A működést bemutató videó: mikulas1.mp4

Adatok: mikulas1.zip

Néhány megoldási ötlet: mikulas1.pdf


Betlehemi pásztorok



Mindegy, hogy mikor kerül a szeme elé ez a feladat, gondoljon a karácsonyra, és írjon Java programot a karácsonyi pásztori üdvözlet szimulálására.

Induláskor a felület jobboldalán egy kép látható, kezdetben angyal nélkül. Az angyal a baloldalon látható megszületett feliratú gomb hatására indul el föntről, a kép jobb széle és közepe közötti véletlen x koordinátáról, és a pásztorok közelében megáll. (A gomb természetesen inaktívvá válik.)

Itt áll egy darabig (annyi ideig álljon, amennyi idő alatt fentről odaért hozzájuk), „elmondja” az üzenetet, majd eltűnik, ugyanakkor pedig megjelenik a kép jobboldalán a kis Jézus a szüleivel. Az örömhír hallatán a tűzről pattant pásztorok elsietnek, hogy köszöntsék a kisbabát.

A pásztorok szó szerint a tűzről pattannak, vagyis akkor indulnak, ha a tűzre kattintunk. Létszámuk korlátozott, legföljebb n db pásztor lehet. Természetesen a hír előtt hiába is kattintgatunk.

A pásztor ajándékot is visz, a vihe­tő ajándékok neve a combo-box-ból választható (oda pedig az ajandekok.txt adatfájlból kerülnek, beolvasás után névsorba rendezve). Amikor egy pásztor elindul, neve bekerül a baloldalon látható listába a vitt ajándék nevével együtt. A pásztor neve most csak az egyedi sorszám után a „Pásztor” szó. (Az ajándék valóban ajándék, és nem csak egy elnevezés. Most ugyan nem tudunk róla többet, de úgy írja meg, hogy bármikor bővíteni lehessen.)

Amikor a pásztorok odaérnek, akkor egymás mögé sorakozva meghatottan nézegetik a babát, vagyis nem kell eltűnniük. (Az „egymás mögé" azt jelenti, hogy ha mindenki megállt, akkor csak egyetlen pásztorkép látszódik. )

A „Krónikának” feliratú gomb akkor válik aktívvá, ha legalább egy pásztor már elindult. Hatására a jobboldali jelenet helyett a karácsonyi jókívánság képét lehet látni.

A gomb felirata azért az, ami, mert szorgalmi feladatként a gombnyomás másik hatása, hogy egy fájlba írva el lehet menteni a pásztorok névsorát a vitt ajándék nevével együtt.

A javasolt külső felületméret: 946*508, bal panel: 180*470, jobb panel: 750*470. A többi javasolt méret az adatokhoz mellékelt Global.java fájlban található.


A működést bemutató videó: pasztorok.mp4

Adatok: pasztorok.zip

Néhány megoldási ötlet: pasztorok.pdf


Madáretetés



Itt a tél, fáznak a madarak, ezért a gyerekek madáretetőt raknak ki a számukra. A gyerekek az 1000 x 600-as felület jobboldali, 800 szélességű részén látható házakban laknak. A gyerekek neve és a házuknak az a pontja, amelyre kirakható a madáretető közepe, egy adatfájlban található. (Adatszerkezet: a gyerek neve és etetőjének potenciális koordinátái. )

A baloldalon látható comboBox-ból lehet kiválasztani, hogy a Kirak gomb hatására melyik gyerek helyez ki madáretetőt a házukhoz (célszerű eleve hozzárendelni a madáretetőhöz a gyereket). Ekkor neve eltűnik a comboBox-ból, és átkerül a listába. Ha a comboBox kiürült, akkor az is és a Kirak gomb is inaktívvá válik, de addig nem. Ha már van kint legalább egy madáretető, akkor az Indit gomb is aktívvá válik. Hatására bizonyos időközönként (pl. fél másodpercenként, de ne égesse be fixen) madarak indulnak a kirakott etetőkhöz.

A madarak véletlenszerűen vagy a kép bal szélének közepéről, vagy jobb szélének közepéről indulnak, és valamelyik véletlenszerűen választott etető középpontjáig mozognak. A képük véletlenszerűen (és persze, értelemszerűen is) vagy a balra-, vagy a jobbra forduló madárképek egyike. (Ezeket a képeket lehetőleg ne „gyalog” töltse be.)

Amikor odaérnek, akkor ott még ugyanannyi időt töltenek, mint amennyi alatt odaértek, majd egyszerűen eltűnnek. (Persze, ha nagyon sok ideje van, akkor vissza is mehetnek.)

Amíg nem ettek a gyerekhez tartozó etetőből, addig csak a gyerek neve látható a listán, utána pedig már az etetőjéhez repült madarak száma is olvasható a neve mellett. Ez a szám akkor változik, amikor a madár „jóllakott”, azaz amikor eltűnik az etetőből.

Ha valamelyik gyerek utólag gondolja meg magát, még akkor is kirakhat etetőt, ha a többiekéből már esznek. (De persze mindegyik csak egy etetőt használhat.)

Javasolt méretek: madáretető szélesség: 60, magasság: 50; madárkép: 30 x 30 pixel.


A működést bemutató videó: madaretetes.mp4

Adatok: madaretetes.zip

Néhány megoldási ötlet: madaretetes.pdf


Minionok



Segítse a minionokat a Mikulás-ünnepségük meg­rendezésében, és írjon nekik erről egy Java progra­mot.

A köszöntő felületen már láthatjuk, hogy kik lesznek a szereplők. (A szereplők névsorát egy adatfájl tartalmazza, ebben a sorrendben tartoznak hozzájuk a minion képek.)

A kezdőképre kattintva jutunk be a színházterembe, és a műsorszámokat indító gomb is ekkor válik aktívvá.

Kívánságműsor van, ezért a szereplők közül mi magunk választhatjuk ki, hogy kiket szeretnénk látni, majd a gombnyomás hatására szerepeltethet­jük őket. Ha nem választunk senkit, akkor hiba­üzenetet kapunk.

A kiválasztott minionok csak egyszer mutathatják be produkciójukat, ezért nevük átkerül a szerepel­tek névsorába (ide lehetőleg névsor szerint), ők maguk pedig kimennek a színpadra szerepelni. Mozgásuk három részből áll:

1. a jobboldali függöny mögül véletlen sebességgel besétálnak a színpadra, és megállnak a színpad közepétől véletlen távolságnyira. (+/- távolság).

2. Itt elkezdenek táncolni. Mivel még elég amatőrök, táncuk összesen ennyi: a mindenki számára azonos műsoridő hosszáig időnként lépnek jobbra vagy balra egy véletlen távolságot. (Ha van elég ideje, kedve, kicsit ügyesebb táncot is kitalálhat.)

3. Ha lejárt a műsoridő, visszaballagnak a jobboldali függöny mögé.

A gomb a műsorszám alatt szintén inaktív, akkor válik ismét aktívvá, ha az utolsó szereplő is kiment a színről. A gombra a soron következő műsorszám sorszáma van felírva, ha már nincs több választható szereplő, akkor pedig az, hogy vége. A vége feliratú gombra kattintva a szereplők egyenként meghajolnak (megjelenik a képük a színpad közepén, és egy rövid ideig látni lehet, majd jön a következő). Amikor az utolsó is meghajolt, megjelenik az ovációzó tömeg (a kép egy animált gif).

A felület javasolt mérete: 960 x 600, a színpad 750 pixel szélességű.

Minionképek javasolt mérete: szélesség 80, magasság 90 pixel. Fejmagasságuk a színpadon 350 pixel, de persze el is térhet ezektől a méretektől.

Tipp: a végső háttérkép animáltan jelenik meg, ha a kép kirajzolásakor az utolsó paraméter nem null, hanem a rajzolást végző panel.


A működést bemutató videó: minionok.mp4

Adatok: minionok.zip

Néhány megoldási ötlet: minionok.pdf


Star Wars



A felfokozott érdeklődésre való tekintettel hirdessünk meg egy saját InfOscar díjat, amelyért a Star Wars figurák tervezői versenyezhetnek. Két kategóriában lehet benevezni, az egyikben a földi figurák, a másikban a levegőben mozgó figurák indulhatnak.

Induláskor mindkét gomb inaktív. Az induló képre kattintva megváltozik a háttér, és aktívvá válik az 1. kategória feliratú gomb. A gombot megnyomva indulnak az első kategóriába tartozó versenyzők. Egyforma időközönként indul el egy-egy figura a képernyő bal széléről, és egyforma tempóban mennek (a fájlban lévő eredeti sorrend szerint követik egymást). Egy „kört” tesznek (jobbra a panel széléig, fel valamekkora távolságra, majd vissza balra), majd kimennek a színről. Eközben lehet szavazni rájuk. Amelyikre rákattintunk, annak eggyel növekszik a pontszáma.

Amikor elindulnak, a kategória gomb inaktívvá válik. Ha az utolsó is elhagyja a színt, akkor a 2. kategória feliratú gomb aktívvá válik, és megkezdődhet a második verseny. Ez ugyanolyan, mint az első kategóriás, csak a figurák a levegőben tesznek meg egy kört.

Egy-egy kategória-verseny indulásakor a jobboldali listában az adott kategóriában indulók adatai láthatóak a nevezési (azaz a fájlban adott eredeti) sorrendben. Soronként a figura, illetve a tervezője nevét olvashatjuk. Ha valakire szavazat érkezik (rákattintottak), akkor ezek mellé kiíródik az eddigi pontszáma is. Ekkor már pontszám szerint csökkenően vannak rendezve.

Amikor a második kategória utolsó versenyzője is elhagyja a terepet, megjelenik a premierre invitáló reklám.

A javasolt felületméret: 1000 x 700 pixel, amelyből a jobboldali rész 250 pixel széles.

A többi javasolt méretet az adatok között szereplő Global.java fájl tartalmazza.

Adatfájl szerkezete soronként: figura neve;tervező neve;kategória. (Emlékeztető: a megadott sql akkor használható, ha "kézzel" hozzuk létre az adatbázist. Ha kódból, akkor a sorok végéről törölni kell a pontosvesszőket.)

Megjegyzések:

  • A szálak működését a szálütemező vezérli, ezért hiába állítjuk be az egyenletes sebességet, nem biztos, hogy mindig az lesz. Executorral kellene megoldani, ha akarja, próbálkozhat vele.
  • Az elején, végén látható animációk egyszerű gif képek, ha a kép kirajzolásakor a rajzoló metódus utolsó paramétere nem null, hanem a rajzolást végző panel, akkor mozogni fog.
  • Ha esetleg több interfészt is implementálni akar, akkor az interfészeket vesszővel választjuk el egymástól. Ha örököltetni és implementálni is akar, akkor előbb az öröklés, majd vessző nélkül folytatható az implementálással.


A működést bemutató videó: starwars.mp4

Adatok: starwars.zip

Néhány megoldási ötlet: starwars.pdf

A foci VB ismét Magyarország részvétele nélkül zajlott :(. Hogy legközelebb ez ne így legyen, ezért komoly edzésre kényszerítik a focistákat. Készítse el ennek az edzőtábornak az egyszerűsített változatát.

Induláskor a jobboldali 900 x 600-as felület közepén forog egy labda (animált kép). Megnyomva a baloldali 150 széles részen lévő gombot, a labda eltűnik, és már nem is jelenik meg többet, közben pedig kezdődhet az edzés. Ez azt jelenti, hogy minden egyes kattintásra megjelenik egy-egy labdát vezető focista, a neve pedig a baloldali felső listában lesz olvasható. A kattintás helye a focistakép középpontja legyen. Ha a baloldali térfélre kattintunk, akkor egy jobbra futó figura jelenjen meg, ha a jobboldalira, akkor egy balra futó, és persze, ezekben az irányokban is induljanak el, azaz a balra futó a felület bal szélének véletlenül generált pontjába, a jobbra futó, a jobboldali felület véletlenül generált pontja felé.

A neveket a program indulásakor automatikusan olvassa be egy adott fájlból.

Legföljebb csak annyi játékos jelenhet meg, ahányan a névsorban szerepelnek, és mindenki csak egyszer. Ha kiérnek a pálya szélére, akkor tűnjön el a képük. Amelyik közben áthalad a kapun, annak neve kerüljön be a góllövők listájába.

Amíg van focista a pályán, addig az új játék gomb inaktív, ha már mindenki edzett, akkor aktívvá válik. Rákattintva kiürítjük a listákat, és kezdődhet elölről az edzés. (Azaz ismét ugyanazokból a nevekből lehet majd válogatni.)

Javasolt méretek:

A labda szélessége is magassága is 100 pixel, a két focista azonban sajnos nem teljesen azonos méretű: a baloldali (vagyis a jobbra futó) 70*70-as, a jobboldali (azaz balra futó)100*100-as.

A kapuk pozíciója: függőlegesen a 245 és 315 pixel közötti rész, a baloldali kapuhoz a 45 pixelnél kisebb x érték tartozik, a jobboldalihoz a 845-nél nagyobb.


A működést bemutató videó: football.mp4

Adatok: football.zip

Néhány megoldási ötlet: football.pdf


Luca széke



Írjon Java programot a Luca napi népszokás szemléltetésére! (http://hu.wikipedia.org/wiki/Luca_széke)

A 900*530-as méretű felület 700 pixel széles baloldali részén, a kép alján, középen épül a Luca széke. Elvileg 13 napig kellene építeni, de ezt most csak néhány lépésben kell szimulálni: Az Indít gombra kattintva indul az építkezés, és bizonyos időközönként megjelenik az újabb kép.

Amikor készen van, akkor a székre állva meg lehet látni, hogy a faluban kik a boszorkányok.

A falu lakóinak névsora a jobboldali felső listában látható (adatfájlból). A szék ülésére kattintva ebből a névsorból egy véletlen-generátor kiválasztja a boszorkányokat (a falu legföljebb x %-a lehet boszorkány), akik a kép baloldalának felső feléből véletlen magasság­ban és véletlen sebességgel elindulnak a kép másik széle felé. (A boszorkány lába sem érhet le a kép alsó felébe.) A boszorkányok névsora bekerül az alsó listába.

A széket csak egyszer lehet megépíteni, és a szék hatása is kizárólag karácsony éjjelén érvényes, vagyis csak az első kattintáskor lehet meglátni a boszorkányokat, máskor már hiába kattintunk. (Ha rosszkor, vagy rossz helyre kattintunk, akkor nem történik semmi, kizárólag akkor történik valami, vagyis akkor indulnak el a boszorkányok, ha először kattintunk a szék ülőkéjére.)

Amint a legutóbbi képen is látható, az utolsó boszorkány nem véletlenül lassúbb a többinél. :)

Amikor az utolsó boszorkány is eltűnik, jelenjen meg a képen látható ábra, minden más viszont tűnjön el a jobboldali felületről.

Javasolt méretek:

szék mérete: szélesség 130, magasság 150 pixel

repülő boszorkány mérete: 100 x 100

villanyoszlopnak csapódott boszorkány mérete: szélesség: a jobboldali felület szélessége, magasság: a jobboldali felület magasságának fele.


A működést bemutató videó: lucaszeke.mp4

Adatok: lucaszeke.zip

Néhány megoldási ötlet: lucaszeke.pdf


Hóember-találkozó



Állítólag szilveszterkor nemzetközi hóember-találkozó volt a Mecseken. Ezt ugyan az újság megpróbálta cáfolni, de nincs igaza, épp most fogja szimulálni egy Java programmal. J

Induláskor a mellékelt felület látható, a jobboldalon fel vannak sorolva a találkozót fontolgató hóemberek.

Adataikat egy adatfájl tartalmazza, soronként egy-egy név és két koordináta. A nevekhez a megfelelő sorszámú kép tartozik. A koordináták a „lakhelyének” koordinátái, innen indulnak majd. A fájlban adott pont a hóember talpának közepe.

Induláskor mindkét gomb inaktív.

A rajzpanelre kattintva megváltozik a háttér, ekkor a készülődés gomb aktívvá válik, az indulás még inaktív.

A gombot megnyomva a felső listából kiválasztott hóemberek ráállnak az adott koordinátájú pontokra (a „lakhelyükre”). Ekkor nevük kikerül a hóemberek listájából.

Az indulás gomb akkor válik aktívvá, ha egyrészt a térképen kijelöljük a találkozó helyét, vagyis rákattintunk egy pontra (ekkor a pont körül megjelenik egy piros pötty), másrészt van legalább egy útra készülő hóember. A készülődés gombot akár többször is megnyom­hatjuk, azaz többször is készülődhetnek, amíg az indulás gomb hatására el nem indultak. Az indulás gomb hatására a hóemberek véletlen sebességgel elindulnak a találkozó színhelyére.

Amíg mindegyik oda nem ér, addig ismét inaktív mindkét gomb, ha mindenki megérkezett, akkor a készülődés ismét aktívvá válik, az indulás pedig akkor, ha van legalább egy készülődő hóember.

Ha a hóember megérkezett, akkor neve kerül­jön be a résztvevők listájába, mellette pedig zárójelben legyen feltüntetve az általa megtett távolság (Pithagorasz tétel :)).

Ha megérkezik, akkor továbbra is legyen látható, de már ne mozogjon. (Rakja át az odaérkezettek listájába.)

Végül, ha még egyet kattintunk a felületre, akkor a rajzpanel jobb felső sarkából növekedni kezd, majd teljesen ellepi a rajzpanelt a hóemberek egyik lehetséges szomorú sorsát ábrázoló kép.

Javasolt méretek és adatok: belső felület: 1100 x 700 pixel, ebből a rajzfelület 900 pixel széles.

A hóemberkép mérete: 100 x 100 pixel, a piros pötty sugara 5 pixel.

A mozgásához szükséges késleltetési idő alsó-felső határa: 20 és 50 ms, a kép mozgásához szükséges késleltetési idő 50 ms. De persze, ezektől el is térhet.


A működést bemutató videó: hoemberek.mp4

Adatok: hoemberek.zip

Néhány megoldási ötlet: hoemberek.pdf


Virágok



Vizsgájuk közeledtével a diákok minden segítséget igénybe vesznek, még a méhecskékét is. Írjon egy kis programot, amelyben méhek segítik a diákok pontgyűjtését.

A 780 x 600-as felület baloldali, 600 x 600- as részére egérkattintással virágokat lehet kirakni. A jobboldali felületen látható a diákok névsora. Az Indít gomb hatására egy kiválasztott diáknak kezd el pontokat gyűjteni a méhecske. (Figyeljen rá, hogy egyszerre csak egy diákot lehessen kiválasztani.)

A pontgyűjtés azt jelenti, hogy a méh a rajzfelület jobb szélének közepéről indulva a lepakolás sorrendjében végigjárja a virágokat. Mindegyiknél elidőzik egy kicsit, "összegyűjt" egy véletlen pontszámot, majd az utolsó után visszatér a kiinduló helyére. Ekkor jelenjen meg az összegyűjtött össz-pontszám értéke, a diák neve mellett pedig az, hogy sikerült-e teljesítenie a követelményt, vagy sem. A követelmény azt jelenti, hogy az össz-pontszám nagyobb-e, mint egy minden egyes diákra egyformán érvényes határ. A méhecske mindig „arccal előre” repüljön.

Minden diák csak egyszer próbálkozhat. Ha ismét kiválasztjuk, akkor adjon hibajelzést. Akkor is adjon hibajelzést, ha úgy akarjuk elindítani a méhet, hogy senkit sem választottunk ki.

Javasolt képméretek: virág: 40 x 50, méhecske: 100 x 70.

A működést bemutató videó: viragok.mp4

Adatok: viragok.zip (Ahogy majd látja, a virágképek nem átlátszó hátterűek, ezért vagy csak fekete háttérszínt használjon, vagy alakítsa átlátszó hátterűvé őket, vagy töltsön le másik példányokat a netről.)

Erősen hasonlít a Mikulás 1. feladatra, ezért csak valóban nagyon kevés megoldási ötlet: viragok.pdf


Nobel díjasok



Tisztelegjünk a Nobel-díjasok, ők pedig Alfréd Nobel előtt. A díjazottakat tartalmazó fájl szerkezete: a díjazott neve, a díjátadás éve, a díj kategóriája, a kép neve.

Az induló képen Nobel testamentuma látható.

A program indulásakor olvassa be az adat­fájlt, és a beolvasott adatok alapján töltse fel a combobox-ot a kategória-nevekkel. A combobox első szava az, hogy „Válasszon:”.

Ha a combobox-ból kiválasztotta a kategóriát, akkor a listafelületen jelenjen meg az adott kategóriába tartozó díjazottak névsora, lehetőleg időrendi sorrendben. (Forma: név (évszám).)

A Tiszteletadás gombra kattintva megváltozik a háttérkép, és már végig így is marad, és egymás alatt megjelenik a kategóriába tartozók képe. Mindenki mellett megjelenik egy-egy virágcsokor is. A csokrok kis ideig várakoznak, majd véletlen sebességgel elindulnak Nobel kezébe, ő pedig majd kézben tartja az összes kapott csokrot. Ha közben másik kategóriát választunk, a fényképek kicserélődnek, új csokrok keletkeznek és indulnak, de a régiek is mozognak, amíg oda nem érnek, és a képük utána is látszódik.

A Vége gombra kattintva kép-sorozatot láthatunk. Bizonyos időközönként megjele­nik egy-egy díjazott képe, alatta a díjazott adatai: név (évszám), kategória.

Akárhányszor rákattintunk a gombra, indul­jon el elölről a „vetítés”, de a másik gomb hatására már ne történjen semmi.

Javasolt méretek:

Felület belső mérete 1100 x 750, a listát tartalmazó rész szélessége 220.

A kicsi képek helyzete: a panel oldalától, tetejétől is 5-5 pixelre vannak, illetve két kép között is 5 pixel a távolság. A kis képe mérete 60 x 60 pixel, a virágcsokoré is.

Nobel markának koordinátái: 600, 425

A nagy képek mérete: 300 x 400, bal felső sarkuk a panel (130, 100) koordinátájú pontjában van, alattuk 20 pixel távolságra van a szöveg. De persze, el is térhet ezektől az adatoktól.


A működést bemutató videó: nobeldijasok.mp4

Adatok: nobeldijasok.zip

Néhány megoldási ötlet: nobeldijasok.pdf


Síverseny



Készítsen egy 750 x 500 -as felületű alkalmazást (a rajzfelület 600 x 500) egy síversenyzős játékhoz.

Feladatunk, hogy először megrajzoljuk a pályát, majd egymás után indítsuk el a versenyzőket.

Induláskor a baloldali felület tetején jelenjen meg ez a mondat: „Rajzolja meg a pálya vonalát”. Amíg semmit sem rajzoltunk, addig a Rajt gomb legyen inaktív, de ha már van valamekkora útvonal, akkor váljon aktívvá. Addig rajzolhatunk, ameddig meg nem nyomtuk a Rajt gombot. Ezután már nem. Ekkor a pálya rajzoltatására vonatkozó felirat is eltűnik.

A versenyzők névsorát egy adatfájl vagy egy adatbázis tartalmazza. A beolvasás sorrendjében "állnak" rajthoz, vagyis ilyen sorrendben indulnak a versenyen. Ez azt jelenti, hogy a Rajt gomb megnyomása után bizonyos időközönként véletlen sebességgel elindul a megadott pályán egy-egy versenyző. Ha leért, akkor egy kis ideig még látható a pálya alján, aztán eltűnik. Neve és eredménye (a leérés ideje millisec-ban) megjelenik az eredménylistán, mégpedig idő szerint növekvő sorrendben. A fantáziájára van bízva, hogy hogyan szervezi a versenyt:

a) Amíg nem ér le, addig másik versenyző nem indulhat.

b) Bizonyos, egyenletes időközönként indulnak a versenyzők, függetlenül attól, hogy az előző leért-e már.

Az eredményeket mentse el egy fájlba vagy adatbázisba.

A működést bemutató videó: siverseny.mp4

Adatok: siverseny.zip

Erősen hasonlít a Mikulás 1. feladatra, ezért csak valóban nagyon kevés megoldási ötlet: siverseny.pdf


Birkaiskola



Bármily furcsa, a műszaki kar épülete mellett az egyik évben birkákat neveltek. Gondoljuk tovább a történetüket.

Az induló felület két széle végig meg­marad, a középső rész változik, ill. a jobboldali listák tartalma.

A középső részre kattintva több minden történhet: az első kattintáskor megjelenik egy szövegmező, amelyben szép komótosan, betűnként kiírva megjelenik Weöres Sándor verse. A vers a vers.txt fájlban található, innen kell beolvasni a program indulásakor. Ha kiíródott a vers, utána még várakozzon 1-2 másodpercig, majd tűnjön el a szövegmező, és a háttérkép is változzon meg.

A képen látható iskolába járnak (vagy nem járnak) majd a birkák.

Ahogy szó volt róla, a felületre kattintásnak több funkciója is van. Ha nem először kattintunk (azaz már túl vagyunk a versen), akkor a kattintás helyén jelenjen meg egy-egy középre néző birka. (A kattintás helye a birka-kép közepe.)

Az Indít gomb hatására a birkák véletlenszerűen és véletlen sebességgel vagy az iskolába indul­nak (a felület középpontja), vagy a panel hozzá­juk közelebb eső függőleges széle felé (és ki is mennek a képből – csak az iskolába járó birkák maradnak a felület közepén.) Az „iskolakerülő” birkáknak meg is kell fordulniuk, csak úgy tudnak kifelé menni. Amikor eldől, hogy ki milyen irányba indul, akkor kerüljön be az illető neve a megfelelő listába. Most a név csak a Birka szó + egy egyedi sorszám. (De ha kedve van hozzá, adhat nekik neveket is.)

Mivel a vers szerint is csak egyszer volt a csoda, ezért az Indít gombot csak egyszer lehet megnyomni: csak akkor válik aktívvá, ha már legel legalább egy birka, és a birkák indítása után inaktívvá válik, de a kattintás hatására továbbra is le tudunk rakni legelésző birkákat.


Javasolt méretek és ötletek:

Méretek:

Baloldali felület: 200 x 500, középső: 600 x 500, jobboldali 150 x 200, frame: 966 x 546.

Birka kép mérete: 80 x 80.

Egy kis segítség a vers megjelenítéséhez:

Ha láthatatlanná / láthatóvá akarja tenni a textArea-t, akkor az alatta lévő jScrollPane példány láthatóságát kell beállítani. A jScrollPane láthatóvá tétele után lehet, hogy ki kell adni a this.revalidate(); parancsot (a this arra a panelre utal, amelyiken van a jScrollPane).

A verset célszerű egyetlen stringként kezelni – beolvasáskor a beolvasott sorokból hozza létre ezt a stringet. Minden sor beolvasása után adjon hozzá a vershez még egy "\n"-t.

A verset karakterenként írassa ki.

Persze, ha más ötlete van, más megoldással is próbálkozhat.


A működést bemutató videó: birkaiskola.mp4

Adatok: birkaiskola.zip

A korábbiakhoz képest nem sok újdonságot tartalmaz, próbálja önállóan megoldani.


Mikulás 2.



Az előző feladat óta öregedett és kényelmesedett a Mikulás, már a manókkal dolgoztat. Szimulálja munkáját egy Java programmal.

A felület baloldala egy 150 x 450-es vezérlő felület, mellette egy 650 x 450-es havas táj látható. A program indulásakor már megjelennek a felső listában azok a nevek, akik potenciálisan a Mikulás „ügyfelei”. (Egy fájlból olvassuk be őket.) Ekkor házakat és a manókat még nem lehet látni, csak a Mikulást. Azok kattintással kerülnek a felületre, de csak akkor, ha a hegyvonulat alatt kattintunk, és még nem indult el az ajándékozás. A kattintás helye a házat tartalmazó kép bal alsó sarkát jelöli ki. A manók a házakhoz tartoznak, ugyanakkor jelennek meg, amikor a házak, azok alatt, de a képernyő alján, egyforma magasságban. (Ha elég figyelmes, akkor a Mikulás vonalába kerülő manó „kikerüli” a Mikulást, vagyis följebb áll.)

Az indító gombra kattintva indulnak útjukra a manók, ki-ki a saját házához. (Indulás után a gomb inaktívvá válik.)

Amikor odaérnek, várnak valamennyit majd leraknak a ház mellé egy kis csomagot (a három lehetséges csomag közül véletlenül választják, hogy melyiket). Miután letették a csomagot, a baloldali alsó listában megjelenik a megajándékozott neve. (A nevet a fönti listából választjuk, mindenki csak egyszer kaphat ajándékot.)

Ezután a manók visszafordulnak, és már üres kézzel térnek vissza a Mikuláshoz (a képernyő jobb alsó sarka), majd eltűnnek. Ugyanannyi idő alatt teszik meg az utat, mint amennyit a házaknál várakoztak. (Nem várják meg egymást, ki-ki dolga végeztével fordul.)

A csomag a ház jobb alsó sarkához kerül, a manókép középpontja a ház jobboldali széle.

Javasolt méretek: ház: 60 magas, 60 széles; Mikulás: 120 magas, 120 széles, csomagok mindegyike 30 magas, 30 széles, manók: 50 széles, 70 magas, a manók indulási magassága a kép aljától manó-magassággal följebb.

A hegyhatár 100 egység távolságra van a felület felső határától. De NE drótozza be fixen az adatokat!


A működést bemutató videó: mikulas2.mp4

Adatok: mikulas2.zip

A korábbiakhoz képest nem sok újdonságot tartalmaz, próbálja önállóan megoldani.


Mikulás 3.



Ez a Mikulás állandóan változik. Most meg modernizálódik (igaz, kicsit régi számítógépet használ, de sebaj). Weben rendeli meg az ajándékokat. Segítsen neki!

A 700 x 500 -as belső méretű felület jobboldalán egy 150 pixel széles terület a „webshop”, itt lehet kiválasztani egy ComboBox-ból, hogy milyen ajándékot rendel. Választáskor az ajándék képe megjelenik a ComboBox mellett, a Rendel gomb hatására pedig „odamegy” a Mikuláshoz (vízszintesen, véletlen tempóban), majd kicsit vár a Mikulás ölében, és eltűnik, a kép jobboldalán pedig megjelenik egy új ajándék.

A rendelés eredménye azonnal jelenjen meg a számlán, vagyis az ajándék neve mellett jelenjen meg az is, hogy eddig hány példányt rendelt belőle. Amíg az ajándék oda nem ér a Mikuláshoz, addig ne tudjon újabbat rendelni.

Ha a Bezár gombra kattintunk, akkor többet már ne tudjon rendelni, és a Mikulás is induljon útnak a jobb alsó sarokban lévő város felé.

A Fájlba gomb hatására mentsük el fájlba (vagy adatbázisba) a számlát.

A működést bemutató videó: mikulas3.mp4

Adatok: mikulas3.zip

A korábbiakhoz képest nem sok újdonságot tartalmaz, próbálja önállóan megoldani.


Mikulás 4.



Most meg arra támad kedve, hogy rénszarvasaival a levegőbe szálljon. Örökítse meg ezt egy Java programmal!

Egy 950 x 600-as belső méretű felület jobboldali 150 pixel széles részén látjuk azoknak a gyerekeknek a listáját, akik ajándékot kértek a Mikulástól (adatfájlból).

Mielőtt elindulna, a Mikulás megtervezi az útját, azaz rajzoljuk meg azt az egér mozgatásával. Ezután az Indulás gombra kattintva útjára indul. (Ha még nincs útvonal, akkor adjon figyelmeztető üzenetet, és egynél többször ne indulhasson el.)

Az ajándékok a földre potyognak (azaz megállnak a képernyő alján). Amelyik gyereknek már ledobta az ajándékát, annak neve a kérők listájából kerüljön át a kapók listájába. Ügyeljen rá, hogy mire a Mikulás az út végére ér, addigra minden gyereknek ledobja az ajándékát.

Az ajándékosztás ezt jelenti: Az útvonal bizonyos pontjain (legjobb, ha egyenletesen oszlanak el ezek a pontok) véletlenszerűen kiválasztja egy gyerek nevét a még meg nem ajándékozottak közül, és véletlenszerűen hozzárendel egy ajándékot.

Javasolt méretek:

csillag: 20 pixel sugarú

rénszarvasszán (mikulas.png): szélesség: 120, magasság: 100 pixel

ajándékok: szélesség: 30, magasság: 30 pixel.


A működést bemutató videó: mikulas4.mp4

Adatok: mikulas4.zip

A korábbiakhoz képest nem sok újdonságot tartalmaz, próbálja önállóan megoldani.


Facebook



Egy magára valamit is adó feladatgyűjtemény nem lehet meg facebook nélkül. Írjon a facebook szimulálására egy Java programot.

A baloldalon egy 600 x 450-es felület látható a közösségi háló tagjaival, jobboldalon pedig egy 150 x 450-es felületen olvashatóak a nevek, illetve az itt lévő gombokkal lehet üzeneteket küldeni. A neveket és a hozzájuk tartozó koordinátákat induláskor egy adatfájlból (vagy adatbázisból) lehet betölteni. Ekkor minden ember véletlenszerűen hozzárendelődik egy csoporthoz (minden emberhez hozzárendeljük a három szín valamelyikét – most elég három, de úgy oldja meg, hogy elvileg akárhány lehet). Ez a kezdőkép fogad bennünket, vagyis jobboldalon megjelenik a regisztráltak névsora, az ábrán pedig mindenki fejénél egy, a rá jellemző színnel megrajzolt pötty.

A facebook-on természetesen keresni is lehet, a fenti szövegmezőbe beírva a keresett nevet, a keres gomb hatására vagy megtaláljuk az illetőt – ekkor fejénél jelenjen meg a színére jellemző animált pötty, a listában pedig az ismerőseinek névsora (a vele azonos színűek), és majd ő kezdeményezheti az üzeneteket. Ha nincs ilyen ember, akkor természetesen ezt is jelezze..

Az illető a fejére kattintva is legyen kiválasztható, és ugyanaz történjen vele, mintha a szövegmezőben keresnénk rá.

Kétféle üzenetet kezdeményezhet: a körüzenet esetén az összes ismerősének elküld egy bitet (0 vagy 1). Ha odaért az ismerőshöz, akkor eltűnik a képről. (Ha egy bitnél hosszabb üzenetet akar, akkor sokszor kell megnyomni a gombot. :)).

A személyes üzenet a listán kiválasztott személy­nek küldhető (egyszeres kiválasztás). Ebben az esetben az illető is küld egy bitnyi üzenetet, és vele egy időben a partnere is. Természetesen itt is sokszor lehet megnyomni a gombot.

Javasolt méretek:

A felső kék csík magassága 40 egység, a pöttyök sugara 5, a bulleteket tartalmazó kép 25 x 25-ös.

Ha esetleg szükség van rá, a kék: (59, 89, 153), a szürke: (237, 237, 245), de nem muszáj pont ilyen színeket használni.

Ha netalántán nagyon elcsúsznának a fejekhez képest a pöttyök, akkor módosítsa az adatfájlban megadott koordinátákat (egy pici segéd-eseménnyel lekérheti az egérkattintások helyét, és így megnézheti a saját felületéhez alkalmazkodó koordinátákat).


A működést bemutató videó: facebook.mp4

Adatok: facebook.zip

Bár a feladat talán kicsit összetettebb, mint az eddigiek, de minden felhasznált alapeleméről volt már szó korábban. (Bár első pillantásra talán más ötlete lehet, de elég két panel, a felső rész csak ügyes színezés.) Próbálja ki magát, és oldja meg önállóan. Sőt, esetleg még további funkciókat is kitalálhat, pl. adatbázisba gyűjteni, hogy ki hány körüzenetet és/vagy privát üzenetet kezdeményezett, stb. A keresést is megoldhatja úgy, hogy ne csak a gombnyomás, hanem az enter megnyomására is kezdjen keresni, stb.


Kocsmázók



Ha már ilyen ügyesen végigküzdötte magát ezeken a feladatokon, végül megérdemel egy kis kocsmázást.

A 750 x 600-as kocsma jobboldali 600 pixel széles részén van a kocsmai vendégtér, ami kezdetben üres. A felületre kattintva, a kattintás, mint középpont körül megjelenik egy-egy vendég, akik felkerülnek a baloldali vendégek listájába is vendeg_1, vendeg_2, stb. néven. (Egyedi sorszám!)

Ugyancsak a baloldalon egy combobox-ba kerül az italok listája. A program elején automatikusan olvassa be az italneveket tartalmazó fájlt. (Fájlszerkezet: ital neve;ital képének neve;ára.)

A rendel gombra kattintva lehet rendelni, ekkor a kiválasztott vendég megkapja a kiválasztott italt, mégpedig úgy, hogy a pincér „bedobja” az ajtón, azaz a vendégtér bal oldalának közepéről véletlen sebességgel elindul az ital a kiválasztott vendéghez, és előtte megáll. (Az előtte azt jelenti, hogy vízszintesen a kép közepén, függőlegesen pedig az italkép közepe az emberkép aljával lesz egy vonalban.)

Természetesen rendelés után is jöhet újabb ember.

A bezár gombra kattintva azonban már nem jöhet senki. Ekkor eltűnnek az emberek is és az italok is, és a bal felső sarokból fokozatosan megnövekszik az ábrán látható kép.

Javasolt méretek:

Az emberkép szélessége is magassága is 100 pixel, az italok egységesen 50 x 50-es méretűek.


A működést bemutató videó: kocsmazok.mp4

Adatok: kocsmazok.zip

A korábbiakhoz képest nem sok újdonságot tartalmaz, próbálja önállóan megoldani.