Feladatok

2015-ös feladatok: 

Konzlensek elérhetősége:

Erdős Csanád

Kovácsházy Tamás

2015-es csoportbeosztás:

Hamarosan feltöltöm...

Bevezető

A Szoftvertechnológia alapjai tárgyhoz a félévben egy házi feladat kapcsolódik melynek célja a magas szintű objektum orientált program tervezés és implementáció gyakorlati alkalmazása. Minden feladat önálló szoftver projekt, melyeket 3-4 fős csoportokban kell megoldani, a tervezés során figyelve a megfelelő munkamegosztásra (könnyen tűnhet úgy egy-egy feladat megoldásánál, hogy egyedül könnyebb lenne elkészíteni). A kiírt feladatok jól ismert egyszerű játékprogramok, a megvalósításuknál a cél nem egy "profi, kereskedelmi" alkalmazás létrehozása, hanem a tanultak gyakorlati alkalmazása. A játékok elemeit, figurákat elegendő egyszerű sematikus figurákkal ábrázolni, aki utánanéz tapasztalhatja, hogy teljesen más ha egy felületet egyszínűre festünk vagy egy textúrát feszítünk rá...

Feladat teljesítéséhez az alábbi anyagokat kell elkészíteni megfelelő minőségben:

  • Részletes specifikáció.
  • Tervdokumentáció (a feladatok csapattagok közötti elosztását is tartalmazza).
  • Forráskód (teljes projekt) + fejlesztői és felhasználói dokumentáció.
  • Működő program.

A működést ellenőrizzük, és a beadás során kisebb módosításokat is kérünk majd.

Határidők:

  • Részletes specifikáció: 2014 március 7.
  • Tervdokumentáció: 2014 Április 11.
  • Végső leadás: Szorgalmi időszak vége.

A konzulensekkel konzultációs időpontot kell egyeztetni!

Gyakorlati jótanács: A feladatok megoldását ne hagyjátok az utolsó pillanatra! A megoldáshoz szerintünk szükséges idő effektíven legalább 100-120 munkaóra (fejenként kb. 40 óra).

Specifikáció kidolgozása

A kiírt feladatok a megvalósításban nagy szabadságot engednek az egyes csapatoknak, hasonlóan mint "normális" ipari projektekben a megrendelőnek csak elképzelése van arról mit akar. A házi feladat első része tehát a részletes specifikáció megírása, melyben pontosan rögzíteni kell az elkészítendő program minden részletét. Az egyes feladatcsoportoknál, ahol hasonló alapötletre lényegesen különböző megvalósítások lehetségesek, mint pl. stratégiai játékok, külön felhívjuk a figyelmet azokra a kérdésekre, amelyeket mindenképpen tisztázni kell. A részletes specifikációban meg kell adni a legfontosabb teszteseteket is, amelyek a lehető legjobban fedik a specifikációt, határesetek, speciális helyzetek tesztelése. A leírt tesztkörülmények között a programnak helyesen kell működnie! A specifikáció kidolgozása során kötelező a megrendelővel (konzulensel) egyeztetni, aki szükség esetén - az egyenletes házifeladat komplexitás biztosítása érdekében - egyszerűsíti a feladatot vagy bonyolúltabbá teszi új funkciókkal.

 A házi feladat végleges kiírása tehát, a specifikáció zárása, ezután módosítani csak indokolt esetben lehet. A feladat értékelése a részletes specifikáció alapján történik, azt és csak azt kérjük, ami abban rögzítve van.

Tervezés

A feladatok kellőképpen bonyolultak ahhoz, hogy átgondolt tervezés nélkül tisztességes megoldásuk aligha lehetséges. Az objektum orientált tervezésnél használhatjátok UML szerű jelölésrendszert, de annak az oktatására csak később fog sor kerülni. A tervek kellően részletesek legyenek, "szinte kódot lehessen belőlük generálni". A cél nem a fölösleges papírgyártás, hanem a megvalósítás részleteinek, problémák, buktatók megfelelő feltárása, megoldása. Ezzel elkerülve az utólagos kényszer megoldásokat (amelyek során a kód és a terv a végére köszönőviszonyba sem lesz ?). Nem kell tehát regényt írni, sokkal fontosabb egy részletes statikus objektum diagram, a legfontosabb objektumok, módszerek egymondatos áttekinthető leírásával. Az objektumok jellegzetes üzenetváltásait bemutató kommunikációs diagram, továbbá ahol szükséges az egyes szálak szerepei, egymás közti kommunikációja szinkronizálásának megoldása.

Az UML tervezés segítésére számos kereskedelmi eszköz van melyek próbaverziói szabadon letölthetők. Ajánlott például a Microsoft Visio (elérhető oktatási célból ingyenesen a Microsoft MSDN-AA program részeként)

Implementáció

A feladatok elkészítésének nyelve a JAVA. A feladatok bonyolultságát tekintve a notepad mint fejlesztőeszköz csak mazochistáknak ajánlott. Mindenki válasszon tehát ízlésének megfelelő Integrált fejlesztői környezetet (IDE).

Java nyelvhez ajánlott szabadon hozzáférhető fejelsztőrendszerek az alábbiak (ezek lesznek elérhetők a beadáskor):

A házi feladat megoldásaként beadandó forráskód a teljes projekt állomány rendszerrel. A beadott anyagnak a fejlesztőrendszerbe betöltve fordíthatónak és futtathatónak kell lennie. Ugyanakkor a megoldásnak akkor is futnia kell, ha a fejlesztőrendszer nincs telepítve. Ne legyenek ismeretlen függőségek!

Az értékelés során 3 kategóriába soroljuk a beadott munkákat, ezek:

  • Nem megfelelő, hanyag és működésképtelen, specifikáció nem teljesítése (nem kap aláírást)
  • Funkcionálisan működőképes, de architektúrálisan nem megfelelő, nem átgondolt munka (aláírást kap)
  • Architektúrálisan és funkciónálisan is átgondolt, jól működő munka (aláírást kap és +1 jegy a szóbeli vizsgán)

Nyilván, aki nem ad be házi feladatot az nem kap aláírást.

Példa feladatok

Monopoly

(3 fős csapatok részére)

A jól ismert társasjáték elektronikus megvalósítása.
A részletes specifikációban rögzíteni kell az összes játékszabályt, a játéktábla mezőit és a hozzájuk tartozó szabályokat.
Ezen felül két különböző megvalósításra írjuk ki a feladatot:
MonopolyNET: Internetes Játék, fő feladat a megfelelő monopoly szerver játékosok regisztrációja, több játék kezelése.

Stratégiai tábla-játékok

(3 fős csapatok részére)
(maximum 4 csapat)

Ebben a kategóriában a kiírt feladatok alapötlete ugyan az a lényegi eltérés a részletes specifikációban rejlik.
A játékmező egy játéktábla amely mezőkre van osztva az egyes mezőkön különböző erőforrások (fű, fa, vadvirág..) találhatók. A játékot több játékos játszhatja, az egyes játékosok területeket foglalhatnak el és a területükön lévő erőforrásokból valamilyen mennyiséghez adott szabály szerint hozzájuthatnak. Az erőforrások segítségével adott szabályok szerint objektumokat építhetnek, melyek esetleg újabb erőforrásokat generálnak (PL: fából vaskarikát). A játékban van egy bank aki adott árfolyamon egymásba tudja alakítani az erőforrásokat. A játékosok meghatározott szabályok szerint egymással is kereskedhetnek, mind a területek mind pedig az erőforrások eladhatók. A játék néhány változatában lehetséges a területek egymástól való elfoglalása továbbá működhet a játékban adórendszer is.
A játék véget ér ha egy játékos a célfeltételeket teljesíti.
Minden játéknak ezen felül két fő változata van:

  • Internetes játék.
  • Gép elleni játék, ahol egyes játékosokat Mesterséges intelligencia helyettesít.

Ha a feladatot 3 fős csapat csinálja akkor a fent említett két változatból csak az egyiket kell megvalósítani, 4 fős csapat esetén mindkettőt.

A részletes specifikációban tisztázandó kérdések, ezeket fogja a konzulens vizsgálni, hogy az egyes variánsok eléggé eltérőek-e:

  • Játékmező mérete (állandó / változtatható), felosztása (négyzetrács, hatszögrács) A játékteret néhány alapelemből véletlenszerűen kell generálni
  • Erőforrások, és azok eloszlása, melyikből hol mennyi van. Legalább 3 féle, melyik milyen valószínűséggel fordul elő. Egy mezőn csak egy vagy több erőforrás is lehet. Az erőforrások leosztásának véletlenszerűen kell történnie minden új játék kezdetekor.
  • Játékosok által építhető objektumok, kényszerek az építési sorrendre (X csak akkor építhető ha van már 3 A)
  • Játékosok terület foglalási szabályai. (kockadobás, sorsolás) Speciális lehetőségek (kimarad, dupláz)
  • Játékosok erőforrás hozzáférési feltételei (ércet kap ha épített bányát, minden körben megkap annyit amannyi a területén van)
  • Játékosok egymás közti kommunikációja, az eges játékosoknál lévő vagyon látható/nem látható. Hogyan lehet kereskedni (szabadon, egy körben egyszer), hivatalos banki árfolyamok (ez lehet fix vagy változó)
  • Játék adórendszere, bónuszok, büntetések, speciális lehetőségek és ezek megszerzési feltételei.
  • Területek, erőforrások elhódítási szabályai (építhet hadsereget és az erősebb győz)
  • Játék nyerési feltételei (egy aki mindent visz�)

Alkesz

(3 fős csapat részére)

Ügyességi játék, lényege, hogy lehulló különböző pontértékű objektumokat kell egy alul balra-jobbra mozgatható egyeddel elkapni. A pontszámok növekedésével az elkapó mozgása bizonytalanná válik. (Pl ha egérrel kell pozícionálni akkor egyre nagyobb véletlen értékkel eltér a pozíciótól. ) Egy adott határpont után ezen felül a lehulló objektumok is kezdenek bizonytalanná válni, megduplázódni, egész magas pontszám után az egész képernyő sötétülni kezd. További hasonló szabályokkal tapasztalat szerint bővíthető. A leeső objektumok között lehetnek olyanok is amelyek a bizonytalanságot csökkentik (megszüntetik a remegést). A tényleges és a bizonytalanságot meghatározó pont tehát különböző. A játék vége ha a játékos adott számú leeső objektumot elhibáz. A legtöbb pontszámot elért játékosok listáját tárolni kell. Lehet párban, egymással versenyezve a lehulló objektumokért is játszani az Internet-en
keresztül.

Kalandjáték

(3 fős csapatok részére)
(maximum 4 csapat)

Ebben a kategóriában a kiírt feladatok alapötlete ugyan az a lényegi eltérés a részletes specifikációban rejlik. Lényeg hogy maga játék csupán néhány szabályt rögzít ezen felül a játékosoknak teljes szabadságuk van. A játék hálózaton zajlik, több résztvevővel.
Definiálni, generálni kell egy térképet (játékteret) ami mezőkre van osztva. Az egyes mezőkön különböző objektumok találhatók melyek adott szabályok alapján felszedhetők. Illetve a mezőkhöz mozgási pontok tartoznak melyek befolyásolják hogy onnan a karakterek merre milyen nehézséggel juthatnak tovább. A játéktéren kalandorok mászkálnak, melyeknek különböző tulajdonságaik vannak és különböző objektumokat cipelnek. Az egyes tulajdonságok fejlődhetnek, bizonyos objektumok, célok eléréséhez adott tulajdonság pont szükséges. Az azonos játékmezőn álló játékosok kommunikálhatnak, kereskedhetnek. A karakterek a vitás ügyeket a megfelelő tulajdonság pontokkal súlyozott véletlen értékek alapján rendezhetik le.
A játék körökre van osztva, minden játékos adott körben a mozgáspontjának megfelelő akciót végezhet, az egyes akciók mozgáspont igénye terepfüggő.
A játék vége egy adott célobjektum megszerzése, vagy adott fejlettségi szint elérése.
A részletes specifikációban tisztázandó kérdések, ezeket fogja a konzulens vizsgálni, hogy az egyes variánsok eléggé eltérőek-e:

  • Játékmező mérete (állandó / változtatható), felosztása (négyzetrács, hatszögrács) A játékteret néhány alapelemből véletlenszerűen kell generálni.
  • A játéktér homogén/ inhomogén azaz a mozgás az egyes irányokban azonos/ különböző pontértéket kíván. Az egyes terület elemek milyen hatással vannak a karakterek pontjaira (pl mocsárban felére csökken a teherbírása)
  • Objektumok, és azok eloszlása, melyikből hol mennyi van. Legalább 3 féle, melyik milyen valószínűséggel fordul elő. Egy mezőn csak egy vagy több erőforrás is lehet. Az objektumok elosztásának véletlenszerűen kell történnie minden új játék kezdetekor.
  • A karakterek tulajdonságpontjai, azok fejlődési szabályai.
  • A játéktér objektumaihoz való hozzáférési szabályok (milyen tulajdonság kell), véletlen szerepe (pl X tulajdonság * véletlen szám >50 akkor felveheti). Az adott objektum örök (tetszőleges mennyiség felvehető belőle pl víz) vagy limitált(x darab arany)
  • A karakterek interakciós szabályai, láthatják/ nem láthatják egymás karakter pontjait. A harc szabályai.
  • Játék nyerési feltételei.

Sakk

(3 vagy 4 fős csapat részére)

A jól ismert játék egy egyszerű hálózati megvalósítása.  Kétszemélyes játék a szabályok ellenőrzésével, jelenítse meg egy kiválasztott bábu lehetséges lépéseit. Figyelje mikor van sakk /matt /patt. A játékállás menthető és visszatölthető legyen. 4 fős csapat esetén egyedül is lehet játszani, valamilyen egyserű AI ellen.

Aknakereső

(3 fős csapat részére)

A jól ismert játék egy egyszerű hálózatos megvalósítása. Különböző nehézségi szintek legyenek. A legtöbb pontot elért játékosok listáját menti. Automatikus akna lerakás és hálózatos játék szükséges.

Reversi

(3 fős csapat részére)

A jól ismert játék egy egyszerű hálózatos megvalósítása.
Kétszemélyes játék a szabályok ellenőrzésével. Figyelje a játék végét, játéktér mérete változtatható legyen . A játékállás menthető és visszatölthető legyen.  Meg kell oldani, hogy gép ellen lehessen játszani különböző nehézségi szinten (valami igen egyszerű MI megírása.)

Tetris

(3 fős csapat részére)

A jól ismert játék egy egyszerű megvalósítása. Különböző nehézségi szintek legyenek, a játék menet közben fokozatosan nehezedik. A játékállás menthető és visszatölthető legyen, a legtöbb pontot elért játékosok listáját menti. Lehetőség van két játékos párhuzamos játékára hálózaton (ugyan azt a feladatot kapják, szinkronizálva).

3D Tetris

(4 fős csapat részére)

A jól ismert játék egy egyszerű megvalósítása, kiterjesztés 3d Objektumokra, mozgatások, forgatások 3Dben. Az áttekinthetőség kedvéért a játéktér is forgatható legyen. Különböző nehézségi szintek legyenek, a játék menet közben fokozatosan nehezedik. A játékállás menthető és visszatölthető legyen, a legtöbb pontot elért játékosok listáját menti. Lehetőség van két játékos párhuzamos játékára hálózaton (ugyan azt a feladatot kapják, szinkronizálva).

Ládatologató (sokoban)

(3 fős csapat részére)

Egy játéktéren ládák vannak elszórva melyeket egy figurával tudunk húzni, tolni. Egyszerre csak 1 ládát tud elhúzni/tolni és csak akkor ha figura láda mellett van. A játék célja, hogy a kezdetbe elszórt ládákat adott pozícióba mozgassa. Megvalósításnál ügyeljen, hogy csak megoldható láda konfigurációt adjon, a ládák elhelyezése legyen automatikusan generált (szobák rendszere lehet kötött, de file-ból  betölthető).
Különböző nehézségi szintek legyenek, a játék menet közben fokozatosan nehezedik. A játékállás menthető és visszatölthető legyen, a legtöbb pontot elért játékosok listáját menti. Lehetőség van két játékos párhuzamos játékára hálózaton (ugyan azt a feladatot kapják, szinkronizálva). , de úgy, hogy mindig ki lehessen rakni.

Kígyó (snake)

(3 fős csapat részére)

A jól ismert játék egy egyszerű megvalósítása. Különböző nehézségi szintek legyenek, a játék menet közben fokozatosan nehezedik. A játékállás menthető és visszatölthető legyen, a legtöbb pontot elért játékosok listáját menti. Lehetőség van két játékos egymás elleni játékára hálózaton. A játékteren jelenjenek meg mozgó bónuszok és veszélyek is.

Tili-toli puzzle

(3 fős csapat részére)

A játék lényege, hogy adott képet feldarabolunk egy nxn mátrixba, a mátrix egy elemét töröljük. Ezek után a kép (mátrix) elemeit összekeverjük. A játék célja az eredeti kép helyreállítása úgy, hogy az egyes mátrix elemek csak az üres elem helyére mozgathatók el. Lehetőség van két játékos párhuzamos játékára hálózaton (ugyan azt a feladatot kapják, szinkronizálva), és a megoldás szintjéről tájékoztatást kapnak. Megvalósításnál ügyeljen, hogy csak olyan összekevert kép legyen ami a szabályok alapján kirakható. Legyen több nehézségi fokozat tehát játéktér mérete változtatható legyen 3x3 , 4x4, ?m x n

Tenisz

(3 fős csapat részére)

A jól ismert játék egy egyszerű 2 dimenziós hálózatos megvalósítása. Kétszemélyes játék egyszerűsített fizikai törvények betartásával (lehessen a labdát "csavarni"). Számolja a pontokat, figyelje a játék végét. A játékállás menthető és visszatölthető legyen.

Faltörő

(3 fős csapat részére)

A jól ismert játék egy egyszerű megvalósítása. Különböző nehézségi szintek legyenek, a játék menet közben fokozatosan nehezedik. Lehetőség van két játékos párhuzamos játékára hálózaton (ugyan azt a
feladatot kapják, szinkronizálva). A játékállás menthető és visszatölthető legyen, a legtöbb pontot elért játékosok listáját menti. Egyszerű fizikai szabályok működjenek, rugalmas ütközés, esetleg lassulás/gravitáció, stb.

Terület foglaló (silk)

(3 fős csapat részére)

Egy pók húzza a fonalat pattogó golyók elől kell elkeríteni a területet, ha golyó a fonalat vagy a pókot érinti egy életet elveszít. Ha egy pattogó golyó adott területnél kisebbre szorul akkor megsemmisül. Az elfoglalt területen milyen kép jelenik meg

  • Hány % ot kell elfoglalni az egyes pályák teljesítéséhez
  • pályánként hány Pattogó ellenfél van

  Lövöldözős/menekülős/ugrálós játékok (2D)

( 3 vagy 4 fős csapatok részére)
(maximum 5 csapat)

A jellegzetes példa a Super Mario, Invaders, vagy PACMAN. Szintén sokféle megvalósítás lehetséges a mozgás szabályok pályán található objektumok, ellenfelek szerint. A részletes specifikációban tisztázandó kérdések, ezeket fogja a konzulens vizsgálni, hogy az egyes variánsok eléggé eltérőek-e:

  • Játéktér elrendezése (egyszintű többszintű), és az azon található objektumok.
  • Karakter mozgásának "lövésének" szabályai.
  • Objektumok karakterre gyakorolt hatása.
  • Ellenfelek érzékelés, mozgásszabályai, intelligenciája.
  • Játék célja.