Harmadik beadandó feladatok

Határidő: május 20 hétfő 10:00 május 21 kedd 10:00

A feladat a meglevő widgetkészletet felhasználva és azt kibővítve egy egyszerűbb játékprogram megírása. A most felsorolt játékokon kívűl tetszőleges játékot lehet választani, ha abba a gyakorlatvezető beleegyezik még az első hét során, tehát május 3-ig tisztázni kell.

A közös követelmények:

  • a programnak le kell fordulnia, futnia kell, minden lehetséges felhasználói viselkedést programhiba nélkül kezelnie kell ("bolondbiztos")
  • a programnak tartalmaznia kell a már megkezdett widgetkészletet. Minden olyan programkomponensnek, ami a képernyőre rajzol, widget leszármazottnak kell lennie. Az eseménykezelő komponensnek (pl "JatekMester") külön osztályban kell lennie, a main() függvényben nem szerepelhet graphicslib hivatkozás
  • NEM kötelező a kétszemélyes játékokba gépi játékost írni, azonban extra pontot lehet érte kapni, gyakorlatvezetőtől függő módon. Ilyen extra pontot csak az olyan játéknál lehet kapni, amelyikben van kihívás a gépi játékosban.
  • A grafikus felület és a játéklogika külön osztályba kell kerüljön. Legjobb megoldás, ha a játékszabályokat a JátékMester osztály érvényesíti, és a vonatkozó widgetek csak megjelenítenek, illetve lépési szándékokat továbbítanak a JátékMesternek.
  • A játékok implementálásakor érdemes maximalizálni a változtatás nélkül felhasznált widgetek körét, de ezen túl a játékra specializált widgetek létrehozása sokszor nem elkerülhető. Mérlegelendő, hogy a játéktér felbontható-e widgetekre, vagy kényelmesebb-e egy nagy widgetként implementálni a játékteret. Mindkét irányzattal lehet maximumpontot kapni.
  • Választék:

    1. tankos játék

    Két játékos van, mindkét játékos egy-egy tankot irányít. A tankok csövének szöge és a lövés erőssége állítható. A programnak jeleznie kell, hogy éppen melyik játékos következik, a számbeállító widgetek segítségével be kell kérni a lövés adatait, majd szimulálni a ferde hajítást. A maximumpontos megoldásban szél is fúj, és légellenállást is számolni kell. A játékosok felváltva következnek, minden játékosváltásnál a szél véletlenszerűen megváltozik. A szélirányt és erősséget valamilyen módon ki kell rajzolni. A játék addig tart, amíg az egyik játékos elegendően közel nem lő a másik játékos tankjához.

    Extra pont lehetőségek:

  • a szélirány és erősség a háttérben mozgó felhők irányán és sebességén keresztül látható, ez az animáció a beállítások és a lövés folyamata alatt sem szakad meg
  • kiválasztható fajta lövedék a szövegkiválasztó widget segítségével. Más-más féle lövedékeknek más-más hatása (kisebb-nagyobb hatókör, bontó, hőkövető, stb.)

    2. Gépi póker
    A letölthető kártyaképeket felhasználva olyan gépipókert kell csinálni, amelyik a klasszikus 5 kártya leosztás után egyszer akárhányat cserélve folyik. A tétet a számbeállító widgettel kell lekérni, és a cserélem/megtartom működést olyan gombokkal kell megoldani, amik beragadva maradnak, ha megnyomják őket. A játék felismeri a figurákat, és a tét egy a figurától függő aránnyal szorozva adja a nyereményt. A "semmi"-nél elveszik a tét, az egy pár-nál a nyeremény a tét 1-szeres szorzóval, két párnál 2-szeres, és így tovább valami statisztikailag körülbelül megalapozott aránysor. Ha valaki szeretne a most divatos pókerszabályok (2-2 a játékosoknál, 3 az asztalon nyíltan, tét, negyedik, tét ötödik, stb) szerint csinálni pókergépet, megteheti, de a szerencsejátékoknál a gépi játékosért nem egyértelműen jár extra pont.

    Extra pont lehetőségek:

  • mindenkori esélyek kiszámítása statisztikai módszerekkel, és kijelzése
  • 3. Amőba
    Klasszikus zártpályás (minimum 40x40) amőba, ahol 5 egyformát kell kirakni egy sorba. Kétszemélyes játék, hol az egyik játékos lép, hol a másik. Gépi játékos írásáért extra pontokat lehet kapni. A programnak kezelnie kell minden lehetséges esetet, azt is, ha betelik a pálya

    Extra pont lehetőségek:
    - gépi játékos
    - játék közben lehessen téteket tenni a saját nyerésünkre, és tartsa nyilván, hogy kinek mennyi kreditje van

    4. Reversi
    Klasszikus 8x8 reversi játék. Amikre figyelni kell: a játék nem csak akkor ér véget, ha betelik a pálya, hanem ha az egyik játékosnak játék közben elveszik az összes korongja. Előfordulhat, hogy valaki nem tud lépni egy-két körig, az még nem ez az eset.

    Extra pont lehetőségek:

  • gépi játékos
  • a lépés előtt mutassa valamilyen módon, hogy szabályos lépés-e, és hogy melyik mezőket foglaljuk el vele
    5. Malom
    Klasszikus 24 mezős malom
    Malom kezelése, ütésnél malomban álló bábut csak akkor lehet ütni, ha nincs malmon kívüli bábu, lépéslehetőség hiányának felismerése

    Extra pont lehetőségek:

  • gépi játékos
    6. Torpedó
    Flotta felállítás, ütés kezelése, találat, süllyedés. Eredményjelző az aktuális állásról.

    Extra pont lehetőségek:

  • kiválasztó widget használatával extra lövéstípusokkal felturbózni az eredeti játékot
  • A gépi játékosért (mivel lényegében a véletlenszerű viselkedés is elegendő) extra pontot csak keveset lehet kapni.
    7. Sudoku
    Számbeállító widgetekkel 9x9 sudoku
    Néhány pályát lehessen megoldani, amiket akár fájlból betölthet a program.

    Extra pont lehetőségek:

  • pályagenerátor, ami egyértelműen megoldható pályát tud generálni.
    8. Potyogtatós amőba
    minta
    7x6 mezős változat. Kezelni kell a döntetlent is, amikor úgy telik be a pálya, hogy nincs hova tenni, mégsincs senkinek 4 sorban.

    Extra pont lehetőségek:

  • gépi játékos
    9. stratégia
    Egyszerű stratégiajáték, ami körökre van osztva. Rizikó, vagy Stratego féle játék, előzetes egyeztetéssel a gyakorlatvezetővel.
    10. tycoon
    Egyszerű managerjáték, ami körökre van osztva. Előzetes egyeztetéssel a gyakorlatvezetővel.
    11*. Sakk
    Klasszikus vagy francia sakk.