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.