Killer sokoban
Ez a projekt a Single Point of Failure csapat munkája szoftver projekt laboratóriumból, készült a 2017/2018-as tavaszi félévben. A megoldás jeles (5) értékelést kapott.
A feltöltött repository tartalmazza a teljes projektet Java-ban, javadoc stílusú és egyéb kommentekkel, valamint a félév során elkészült minden dokumentációt egyetlen fájlba összefűzve.
A feladat leírása
A program a népszerű Sokoban játék egy változata, a legfontosabb különbségek, hogy ez az alkalmazás multiplayer (esetünkben pontosan két játékos játszhatja,) akik egymással versenyeznek, és akár meg is ölhetik egymást.
A játék egy raktárban játszódik, melynek belül is lehetnek falai és oszlopai, és benne ládák vannak, amiket munkások tologathatnak. A padló blokkokból áll, amik között találhatók célmezők, lyukak, kapcsolók, és kapcsolható lyukak. Ha munkás vagy láda lyukra kerül, eltűnik, és elpusztul. Kapcsolót úgy lehet aktiválni, ha ládát tolunk rá, és úgy lehet lekapcsolni, ha letoljuk róla a ládát. Mindegyikhez tartozik egy kapcsolható lyuk, ami akkor van nyitva és viselkedik lyukként, ha a kapcsolója aktív - egyébként egyszerű, járható mezőnek látszik és biztonságosan lehet rajta közlekedni.
Egy munkás több objektumot is tolhat egyszerre, ezek között ott lehet a másik munkás is. Fontos azonban, hogy a munkásoknak véges ereje van, amivel csak véges sok objektumot tudnak mozgatni (ebbe saját maguk is beleszámítanak.) A mezőkre méz és olaj önthető, a mézes mezőn tolt dolog kétszeres erőt igényel, az olajos mezőn mozgatott nem igényel erőt.
A játékosok célja, hogy több ládát toljanak célmezőre, mint az ellenfél. A játék véget ér, ha minden láda célmezőn van vagy többet úgy sem lehetne mozgatni.
A feladatkiírás ugyan nem specifikálta, de úgy döntöttünk, hogy a játékmenet társasjáték-szerűen körökre osztott lesz. Egy körben mindenki léphet egyet a kurzormozgató billentyűkkel, VAGY lerakhat a mezőjére mézet vagy olajat a H vagy O billentyűkkel. Lehetőséget hagytunk a hagyományos, akciójáték-szerű vezérlésre is, ennek módját lásd lentebb, az "Így játssz vele" szakaszban.
A kód szerkezete
A mezők típusa egy absztrakt class, az AbstractField
. Ebből származik le a SimpleField
és a Wall
, majd a SimpleField
-ből minden egyéb: TargetField
, Hole
, SwitchableHole
és SwitchField
.
A mozgatható objektumok, mint a munkás vagy a láda egy közös Moveable
ősosztállyal rendelkeznek.
A folyadékok (méz és olaj) a SimpleField
belső osztályaként vannak megvalósítva, hiszen ilyennel csak az rendelkezhet.
Van még két singleton típusú osztályunk, ezek a Main
(ami a játék menedzselését végzi) és a View
(ami a megjelenítésért felel.)
A dokumentáció beszél még korábbi verziókban egy Logger
osztályról is, ezt a szkeleton fázisában használtuk GUI helyett, azóta törölve lett.
Ha több információra is szükséged lenne, olvass bele a Minden_beadas.pdf-be!
Így használd
A forráskódot
- A kód beszerzése
- Az egész repót letöltheted zip formátumban, a jobb felül lévő Letöltés (felhőből lefelé mutató nyilacska) gombot használva. VAGY
- ha már használtál git-et, klónozd le a
git clone
paranccsal.
Hint: ha még nem használtál, tanuld meg! Nagyon hasznos eszköz.
- Importáld valamilyen Java-fejlesztőkörnyezetbe! Mi Eclipse-t és IntelliJ-t használtunk, ezeket is ajánljuk a projekthez.
Így játssz vele
- Szerezd meg a forráskódot!
- Fordítsd le és futtasd! VAGY
Ha nem akarsz fordítgatni, akkor ajars
mappa mélyén találsz jar fájlokat. (Fontos: ha ezeket áthelyezed, vidd velük aGIMPimages
mappát és atestmap1.in
-t is!)
Irányítás
- Társasjáték-szerű (turn-based) módban az éppen soron következő munkás a kurzormozgató billentyűkkel tud lépni, az O gombbal olajat, a H gombbal pedig mézet tud lerakni.
- Akció (action) módban a w1 munkás a W, A, S, D gombokkal tud mozogni, olajat az E, mézet a Q gombbal rakhat le.
A w2-re ugyanez: I, J, K, L, O, U.
Custom mapot a testmap1.in fájl átírásával készíthetsz, erről lásd a dokumentáció (Minden_beadas.pdf) 7.1.2 szakaszát!
Hasznos tippek a tárgyhoz
-
Használj git-et!
A git - ha még nem hallottál volna róla - egy verziókezelő szoftver, aminek a segítségével minden csapattag gépén a legfrissebb verziója lehet ott a projektnek, és nem kell végtelen zipet küldözgetni Facebook-on. Van róla egy csomó tutorial, valamelyiket nézzétek át a csapatoddal! A legfontosabb parancsok:git add
,git commit
,git pull
,git push
.
Ezekre mondjuk nincs sok szükség, hiszen a git majdnem minden fejlesztőkörnyezetbe integrálva van, kvázi menüből lehet használni. -
Legyél tényleg objektumorientált!
Ez főleg az elején, az analízis modell meg a szkeleton tervezésénél fontos. Erre kapod a legtöbb pontot, és spoiler: a feladatkiírás menet közben részben meg fog változni. Ha nem gyönyörűszép OO a terved, írhatod át a felét. -
Legyetek ott minél többen az eligazításokon, és jegyzeteljetek!
Emlékeznetek kell, mit mond a laborvezetőtök, mert ott adja ki a heti feladatot. Az is hasznos, ha nem kell az egészet újra elmondani a csapat többi részének. Az eligazításokon kapjátok ráadásul a pontokat is, és itt tudtok szükség esetén reklamálni. -
Írjátok fel a hibáitokat!
A 14. héten le kell adnotok egy összefoglalást, amiben az összes hibátokat ki kell javítani. Erre valahogy emlékezni kell, és nem fogod visszakapni a leadott doksikat. -
Eligazítás után találkozzatok minél korábban!
Nekünk a legnehezebb probléma az volt, hogy időt találjunk a munkára. Ha gyorsan kiosztjátok a feladatokat, több időtök lesz.