diff --git a/README.md b/README.md index ad1f0df9f5519bc13035c36920f01ee89c04257c..5a1e93aa9d4e8b66fdaa020c1f9fea4271c97ba1 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,69 @@ Killer sokoban ============== -This project is the Software Project Laboratory **homework** of the team **"Single Point of Failure"** written in **Java**. +Ez a projekt a *Single Point of Failure* csapat munkája **szoftver projekt laboratórium**ból, készült a **2017/2018-as tavaszi** félévben. A megoldás **jeles (5)** értékelést kapott. -It is a **multiplayer** version of the popular game **Sokoban** where players can interact, even kill each other. +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. -## Basics +##A feladat leírása -The game is set in a warehouse where workers aim to push crates to their place. Players can move their worker character and aim to push carry more crates to the right location than the other players. A worker can push any number of crates in a row but will die he gets squeezed to a wall or to another crate which cannot be pushed. +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. -The warehouse is also dangerous as there might be holes in the floor which destroy the workers or crates falling in. There are also switchable holes which are hidden until a crate is placed on the switch associated with them. +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. -## Usage +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. -To play with it: +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. -1. Download in zip or clone this repo via `git clone` -2. Start the prebuilt .jar file or open the Main.class file in Java or recompile this project +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 <kbd>H</kbd> vagy <kbd>O</kbd> 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. -To fork it: - -1. Download in zip or clone this repo via `git clone` -2. Use the sources in the killersokoban1/src folder - -## Time of creation +##A kód szerkezete -The project was done in **2017/2018 spring** semester by _Csaba Benkő_, _Ferenc Schulcz_, _Ildikó Takács_ and _Márton Zalavári_. \ No newline at end of file +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 + +1. 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.* +2. 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 + +1. Szerezd meg a forráskódot! +2. Fordítsd le és futtasd! ***VAGY*** +Ha nem akarsz fordítgatni, akkor az `out` mappa mélyén találsz jar fájlokat. (Fontos: ha ezeket áthelyezed, vidd velük a `GIMPimages` mappát és a `testmap1.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 <kbd>O</kbd> gombbal olajat, a <kbd>H</kbd> gombbal pedig mézet tud lerakni. +* Akció (*action*) módban a *w1* munkás a <kbd>W</kbd>, <kbd>A</kbd>, <kbd>S</kbd>, <kbd>D</kbd> gombokkal tud mozogni, olajat az <kbd>E</kbd>, mézet a <kbd>Q</kbd> gombbal rakhat le. +A *w2*-re ugyanez: <kbd>I</kbd>, <kbd>J</kbd>, <kbd>K</kbd>, <kbd>L</kbd>, <kbd>O</kbd>, <kbd>U</kbd>. + +**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.