Webes alkalmazásfejlesztés 1.

Összetett beadandó feladat

Labirintus

"Kréta szigetén élt egy szörny egy labirintusban, akit Minótaurusznak hívtak. Mínosz király knószoszi csodaszép palotájában állt ez a labirintus, szövevényes útvesztőiből ember még élve nem került ki, mert a bikafejű ember testű szörny felfalta az áldozatul odaküldötteket." A monda szerint a szörnyet az ifjú Thészeusznak sikerült legyőznie, aki nagyon elgyengült a harcban. Thészeusznak a kezében csupán egyetlen fáklya ég, az sem sokáig, és minden lépéssel gyengül az ereje. Sajnos most nem segített neki a szépfürtű Ariadné, így Neked kell segíteni Thészeusznak kijutni a labirintusból, mielőtt végképp elgyengül.

A játék megjelenése, működése

A labirintus egy NxM elemből álló játéktábla. Minden cella alapvetően kétféle elem lehet: fal vagy padló. A játékmezőt mindenhol fal veszi körbe, csupán egy helyen van rajta kijárat, ide kell Thészeusznak eljutnia, akinek a kiindulási pontja valahol a labirintus gyomrában van.

A labirintusból mindig csak egy 11x11-es rész látszik, azaz maga a játékmező ekkora (nagy labirintus esetén ennyi látszódik). Thészeusz mindig a játékmező közepén helyezkedik el. Thészeusz irányítása a billentyűzet kurzorbillentyűivel történik, egyszerre egyet léphet vízszintesen vagy függőlegesen. Lépéskor nem ő maga mozdul el (ő mindig középen van), hanem a labirintus mozog a játékmezőben (azaz Thészeusz jobbra lépésekor igazából a labirintus látható részét mozgatjuk balra alatta).

A labirintusban nincsen világítás, csupán Thészeusz fáklyája világítja meg az utat. A megvilágítás szabályai a következők. A fáklya egy 11x11-es mezőt képes megvilágítani a hős körül (azaz a teljes játékmezőt), de a falakon a fáklya sem tud átvilágítani. Azt, hogy egy adott pont látható-e, többféleképpen is el lehet dönteni, például a következőképpen: Vegyük először a Thészeusz körüli nyolc pontot. Ha ott padló van, akkor megvilágítja, ha fal, akkor nem (ekkor a fal maga még látszik). Vegyük a Thészeusz körüli következő gyűrűt. Minden pont esetén vizsgáljuk meg az ő nyolc szomszédját, és döntsük el, melyik esik legközelebb Thészeuszhoz. Ha ez megvilágított, akkor ő maga is megvilágított lesz, ha nem, akkor oda sem jut el a fény. Folytassuk ezt minden további gyűrűre is.

Kezdetben Thészeusznak van valamennyi életerő pontja, és a fáklyájának égési ideje másodpercben. Minden lépéssel az életerő pont eggyel csökken, a fáklya égési ideje pedig az eltelt időnek megfelelően fogy. Elérve a kijáratot írjuk ki a hátralévő időt és az életerőpontot.

Speciális mezők is vannak a pályán:

  • víz: erre lépve az életerő két ponttal csökken.

  • bozótos: erre lépve az életerő tíz ponttal csökken.

  • étel: erre lépve az életerő 50 ponttal nő. Lelépve eltűnik.

  • fáklya: erre lépve újra a teljes idő áll a feladat elvégzésére. Lelépve eltűnik.

A pályák grafikai elemeire és a dizájnra nincsenek megkötések. Megvalósítható HTML elemekkel és canvas elemmel is. Egy pályának tartalmaznia kell:

  • a labirintust
  • a hátralévő időt kiírva
  • életerő pontot kiírva
  • funkciógombokat

A játékhoz tartozó további feladatok

  • A játék főoldalán mindenki számára legyen elérhető egy egyszerű kis labirintus csalogatás céljából. Ugyanezen az oldalon legyen lehetőség a regisztrálásra és bejelentkezésre, ugyanis a további funkciókat csak azonosított felhasználók érhetik el.

  • A bejelentkezéshez meg kell adni a felhasználónevet és jelszót. Regisztráció során a felhasználónév és jelszó mellett kérjük be a teljes nevét és e-mail címét is az illetőnek. Szabályok: mindegyik kötelező, az e-mail címben kell lennie @ karakternek.

  • Sikeres bejelentkezés után egy listaoldalra kerülünk. Két lista jelenik meg: az általunk szerkesztett pályák listája, és a velünk megosztott pályák listája. Mindkét táblázatban a következő oszlopok legyenek: pálya mérete, életerő, fáklya időtartama, illetve hogy sikerült-e megoldani. Az első táblázatban e mellett jelenjen meg a készítés ideje, a másodikban a megosztó e-mail címe.

  • Bármelyik pályára kattintva megjelenik az adott pálya oly módon, ahogy azt fentebb leírtuk. Legyen lehetőség a játékot feladni. A pálya sikeres vagy sikertelen megoldását követően térjünk vissza a listaoldalra.

  • A listaoldalon legyen lehetőség átmenni a pályaszerkesztő oldalra. Ezen meg kell adni az új pálya méreteit, életerőt és fáklyaidőt, majd egy táblázatban meg kell adni a labirintust. Ez történhet például úgy, hogy valamilyen módon szöveges formátummal írjuk le a pályát, de fel lehet használni a játékhoz megírt logikát oly módon, hogy "Thészeusszal" szabadon járjuk be a labirintust, és a tartózkodási helyre automatikusan vagy pl. a szóköz lenyomásával valamilyen elemet helyezünk el (utat, falat, ételt, fáklyát, vizet, bozótost, kijáratot és Thészeuszt). A szerkesztés végeztével mentsük el és térjünk vissza a lista oldalra. Ekkor a saját pályák között jelenjen meg az újonnan szerkesztett.

  • A lista oldalon legyen lehetőség a pályát megosztani másokkal. Ekkor egy felugró panelen egy vagy több e-mail címet kell megadni (pl. vesszővel elválasztva őket, vagy egy többsoros beviteli mezőben soronként), majd egy gombra kattintva AJAX technológiával az oldal újratöltése nélkül kerüljön a megosztás érvényesülésre. Ekkor azoknál a felhasználóknál, akiknek a regisztrált e-mail címe megegyezik a most megadottal, megjelenik a pálya.

  • A pályaleírást érdemes valamilyen módon JSON formátumban megadni. Az adatok tárolása adatbázisban történik.

Követelmények

  • A feladatot Codeigniter segítségével készítsd el!

  • A JavaScriptes kódrészleteknek JSLint-en át kell menniük alap beállítási értékekkel.

  • jQuery használható.

  • A PHP-s kódnak az MVC szabályait be kell tartaniuk, azaz modellben ne jelenjen kéréshez tartozó adat (pl. $_GET vagy $_POST), és HTML se. A nézetben ne legyen feldolgozás. Stb.

Beadás

A megoldásokat a webprogramozas.inf.elte.hu szerverre kell feltölteni, és publikusan elérhetővé tenni. A megfelelő hivatkozást a gyakorlatvezetőnek kell elküldeni e-mailben.

Határidő: 2014. június 1. éjfél