## ZH gyakorló feladatok ##
A feladatok a ZH-ra való felkészülést segítik, ennek okán kicsit bonyolultabbak
az eddigieknél. **+/- szempontjából** szorgalmi feladatnak tekinthetők, nem
kötelező őket megcsinálni, ugyanakkor `++` jár valamelyikük elkészítéséért.
Törekedj a gyakorlatokon vett objektumorientált technikák használatára! Készíts
saját típusokat! Rendezd őket egy logikus csomagstruktúrába! Használj absztrakt
osztályokat, és ahol lehetséges, és indokoltnak érzed, interfészeket!
Absztraháld a közös részeket! Használj megfelelő láthatósági módosítókat!
További szempontok, amiket vegyetek figyelembe az implementáció során:
* Figyelj a megfelelő inputkezelésekre! Lekezeletlen kivételt ne dobjon a
program (pl. `NumberFormatException`)! Az bemeneti értékek ellenőrzését minden
esetben végezd el (pl. számnak ne fogadj el karakterláncot!)
* Definiáld felül az `Object` osztályból származó tanult függvényeket
(`equals()`, `hashCode()`, `toString()`)
* Használd a kiírásokhoz a saját `toString()` implementációdat!
A feladatok nem nehézségi sorrendben követik egymást!
### Tőzsde ###
Készíts egy tőzsde nyilvántartó programot! A program kezeljen mind vételi, mind
eladási ajánlatokat. A keretrendszer rendelkezzen egy interaktív konzolos
menüvel, ami legalább a következő funkcionalitásokkal rendelkezzék:
[1] Uj eladasi ajanlat felvetele
[2] Uj veteli ajanlat felvetele
[3] Jelenleg aktiv ajanlatok listazasa
[4] Letrejott tranzakciok listazasa
[5] Tozsde zarolasa
--------------------------------------
Valasztas:
A megvalósítandó funkciók a következők:
* Új eladási ajánlat felvételekor meg kell adni az eladandó nevét, az arany
mennyiségét és a preferált eladási árat. Maximum 5 aktív eladási ajánlat lehet
egyszerre, ha újat szeretnénk felvenni, adjunk hibaüzenetet. Ezután le kell
futtatni a párosító algoritmust. Két eladási ajánlat akkor egyezik meg, ha az
eladó neve ugyanaz. Egy eladó csak egyetlen ajánlatot tehet fel egyszerre.
* Új vételi ajánlat felvételekor meg kell adni a vásárló nevét, a vásárolni
kívánt arany mennyiségét. Maximum 5 aktív vételi ajánlat lehet egyszerre, ha
újat szeretnénk felvenni, adjunk hibaüzenetet. Ezután le kell futtatni a
párosító algoritmust. Két vételi ajánlat akkor egyezik meg, ha a vevő neve
ugyanaz. Egy vevő csak egyetlen ajánlatot tehet fel egyszerre.
* A jelenleg aktív ajánlatok listázásánál írjuk ki mind a jelenleg aktív
eladási, mind a vételi ajánlatokat!
* Az utolsó 5 létrejött tranzakciót tartsuk nyilván! Ehhez tároljuk el a vevő és
az eladó nevét, az eladott arany mennyiségét, az árat, és a tranzakció dátumát
(ehhez használd a `java.util.Date` osztály egy példányát!)
* Zárolás esetén, a helyes jelszó megadása után (ez legyen egyelőre beégetve a
kódba) egyetlen tranzakció sem vehető fel. Ilyenkor minden új ajánlat
felvételekor adjunk hibaüzenetet! A jelszó beolvasásához használd a `Console`
osztály `readPassword()` metódusát!
A párosító algoritmus az ajánlatok beérkezésének sorrendjében működik. Ha egy
ajánlat mennyisége nullára csökken, eltávolítjuk. Ha két ajánlat párosítása
során az egyik ajánlat nem teljes mennyiséggel kerül felhasználásra, akkor az
ajánlatból megmaradt mennyiség alapján ún. maradékajánlattal kell helyettesíteni
az eredeti ajánlatot (azaz a részteljesítés megengedett).
### Moziműsorok ###
Készíts egy programot, amely moziműsorokat képes nyilvántartani! Minden
kihirdetett előadásról a következő információkat tároljuk:
* a film azonosítóját
* a film forgalmazójának azonosítóját
* a vetítés időpontját
Ezen felül készítsünk reprezentációs osztályokat a filmeknek és a
forgalmazóknak! Filmek esetén tároljuk azok:
* azonosítóját (egyedi, tetszőleges típus)
* a címét
* a rendezőjének nevét
* az egységes jegyárat
* a kiadás évét
Készíts külön osztályokat a 2D és 3D filmeknek! A jegyárat a következő képlet
alapján számold ki `1500 / ( 2010 - ev )` 2D filmek esetében; 3D filmeknél ez az
összeg ennek kétszerese.
Kiadó esetén tároljuk azok:
* azonosítóját (egyedi, tetszőleges típus)
* nevét
* az alapításuk évét
A program hozzon létre és tároljon 5 különböző kiadót és filmet! Két azonos
kiadó, film nem lehet a rendszerben (ezek azonosságát az egyedi azonosítókon
keresztül vizsgáld!). Az új előadások hirdetésénél figyelj arra, hogy azonos
időpontra ne lehessen meghirdetni egy előadást. A program nyújtson lehetőséget a
filmek, kiadók közti keresésre az azonosító alapján!
Ha a programot `-html` kapcsolóval indítják, akkor a standard outputra írjon ki
egy minimális HTML forrásfájlt, amely az előadásokat egy táblázatban tartalmazza.
### KJK szimuláció ###
Készíts egy egyszerű kaland-játék-kockázat szimulációt!
A program hozzon létre 5 különböző karakterkombinációt. Egy karakter a következő
tulajdonságokkal rendelkezik, amelyek értékei 1-12 között lehetnek, és ezek
között szétosztható 25 pont tetszőlegesen: fizikum, asztrál, mentál. A karakter
egy származtatott értékkel is rendelkezik, az életerővel, ami a `fizikuma + 1`
értékkel egyezik meg alapból. A karakternek még egy fontos tulajdonsága van, a
sebzés, amely mindegyiknél 2.
A létrehozott karakterek különböző szörnyekkel hadakoznak (amelyek ugyanezekkel
a tulajdonságokkal rendelkeznek, bestiárium a feladat végén), a következő
szabályok szerint:
* Akinek nagyobb az asztrálja, az kezdi a kört
* Dobunk `2k6`-tal (2 db 6 oldalú kockával), és hozzáadjuk a fizikumhoz. Ha ez
nagyobb vagy egyenlő, mint a másik fél védőértéke (fizikumának és mentáljának
összege), akkor életerejéből le kell vonni a sebzés mértékét.
Ha a támadódobás értéke 12, akkor dupla sebzés történik. Minden sebzés
automatikusan csökkenti az asztrál értéket is eggyel.
* Ugyanezt megismételjük a másik féllel.
* A kör végén mindenki levon egyet a mentál értékéből.
Ha a csata során bármely fél asztrálja 5-tel kisebb, mint az ellenfélé, akkor az
elmenekül a csatából. A harc addig folytatódik, amíg valakinek az életerő pontja
nullára csökken, ekkor az illető meghal. Ha a mentálérték csökken nullára, akkor
az azt jelenti, hogy az illető nem tud megfelelően koncentrálni a csatára, így
minden sebzéséből levonódik egy.
A harc végén az értékek visszaállnak a maximumra.
A szimuláció során készíts statisztikát a megnyert, elvesztett csaták arányából,
hogy mely karakterkombinációk bizonyultak a legsikeresebbeknek!
#### Bestiárium ####
* Farkas, tulajdonságok:
* Fizikum: 6
* Asztrál: 9
* Mentál: 8
* Életerő: 9
* Sebzés: 1
* Csontváz, tulajdonságok:
* Fizikum: 6
* Asztrál: 3
* Mentál: 3
* Életerő: 10
* Sebzés: 2
* Orgyilkos, tulajdonságok:
* Fizikum: 7
* Asztrál: 8
* Mentál: 6
* Életerő: 7
* Sebzés: 2
* Láncfűrészes goblin, tulajdonságok:
* Fizikum: 5
* Asztrál: 6
* Mentál: 5
* Életerő: 7
* Sebzés: 3