Veb aplikacija za igranje tekstualne avanture
Aplikacija predstavlja tekstualnu igru avanture koju treba sami unapred da osmislite. Igrač može da se kreće kroz polja igre. Polja mogu da budu napolju ili unutra, npr. livada, put, raskrsnica, soba, hodnik itd. Polja su povezana vezama koje su orijentisane stranama sveta i gore-dole. Veze mogu da budu nastavak puta, vrata, prozor, stepenište, merdevine itd. U polju mogu da postoje predmeti. Kada pokrene pretraživanje polja, igrač može da nađe sve dostupne predmete na polju. Neke predmete može da nađe samo ako u inventaru poseduje tačno određene predmete, npr. ne može da vidi u rezultatima traženja po polju nevidljivi ključ, ako nema magijske naočare i sl. Da bi aktivirao određene veze za prelaz iz polja u polje, mora da poseduje i inventaru određeni predmet, npr. za neka vrata mora da ima tačno određeni ključ. Igrač iz liste pronađenih predmeta u polju može da doda predmet u inventar. Postoji ograničeni kapacitet inventara, a neki predmeti mogu da zauzimaju jedno, dva ili četiri mesta u inventaru. Sve predmete igrač može da analizira, tj. da sazna dodatne podatke o njima. Većina predmeta ima samo svoj običan opis, npr. ovo je običan ključ ili ovo je prazna stara čaša od zelenog stakla itd. Međutim, neki predmeti mogu da imaju dopunske informacije, npr. ovo je knjiga u kojoj se nalazi tekst. Igrač može da pročita taj tekst. U ovakvim tekstovima mogu da se nalaze uputstva za dalji tok igre. Igrač u prikazu mape može da vidi sve delove mape, tj. polja koja je do sada istražio. Polja u kojima nije bio ne može da vidi. Igrač na početku može da odabere tri moguća cilja igre. Prvi cilj igre je da istraži celu mapu, tj. da obiđe sva polja i pobeđuje čim dođe do poslednjeg polja. Drugi cilj igre je da pronađe određeni predmet i da ga odnese na određenu lokaciju, tj. u određeno polje mape. Treći cilj igre je da pronađe tri specijalan predmeta koje kada stavi u inventar, pobeđuje, a nagoveštaje o tome šta su ta tri predmeta će nalaziti tokom igre. Aplikacija treba da omogući igraču da se registruje i prijavi sa svojim pristupnim parametrima. Svaki igrač ima svoju igru u kojoj se beleži dokle je stigao, koja polja je istražio, šta ima u inventaru i koju vrstu igre igra. Igrači se međusobno ne vide i ne vide jedni drugima napredak u igrama. Samostalno osmisliti poruke u igri, vrste predmeta, polja, oblik sveta na mapi, načine kretanja i temu igre. Igra je tekstualna i sve poruke nakon odabranih aktivnosti, korisnik vidi u obliku teksta, sa minimalnim grafičkim elementima, tek toliko potrebnim da se prepoznaju predviđeni dalji koraci, npr. dostupne strane sveta za dalje kretanje, prepreke itd.
Tehnička ograničenja
- Aplikacija mora da bude realizovana na Node.js platformi korišćenjem Express biblioteke. Aplikacija mora da bude podeljena u dve nezavisne celine: back-end veb servis (API) i front-end (GUI aplikacija). Sav kôd aplikacije treba da bude organizovan u jednom Git spremištu u okviru korisničkog naloga za ovaj projekat, sa podelom kao u primeru zadatka sa vežbi.
- Baza podataka mora da bude relaciona i treba koristiti MySQL ili MariaDB sistem za upravljanje bazama podataka (RDBMS) i u spremištu back-end dela aplikacije mora da bude dostupan SQL dump strukture baze podataka, eventualno sa inicijalnim podacima, potrebnim za demonstraciju rada projekta.
- Back-end i front-end delovi projekta moraju da budi pisani na TypeScript jeziku, prevedeni TypeScript prevodiocem na adekvatan JavaScript. Back-end deo aplikacije, preveden na JavaScript iz izvornog TypeScript koda se pokreće kao Node.js aplikacija, a front-end deo se statički servira sa rute statičkih resursa back-end dela aplikacije i izvršava se na strani klijenta. Za postupak provere identiteta korisnika koji upućuje zahteve back-end delu aplikacije može da se koristi mehanizam sesija ili JWT (JSON Web Tokena), po slobodnom izboru.
- Sav generisani HTML kôd koji proizvodi front-end deo aplikacije mora da bude 100% validan, tj. da prođe proveru W3C Validatorom (dopuštena su upozorenja - Warning, ali ne i greške - Error). Grafički korisnički interfejs se generiše na strani klijenta (client side rendering), korišćenjem React biblioteke, dok podatke doprema asinhrono iz back-end dela aplikacije (iz API-ja). Nije neophodno baviti se izradom posebnog dizajna grafičkog interfejsa aplikacije, već je moguće koristiti CSS biblioteke kao što je Bootstrap CSS biblioteka. Front-end deo aplikacije treba da bude realizovan tako da se prilagođava različitim veličinama ekrana (responsive design).
- Potrebno je obezbediti proveru podataka koji se od korisnika iz front-end dela upućuju back-end delu aplikacije. Moguća su tri sloja zaštite i to: (1) JavaScript validacija vrednosti na front-end-u; (2) Provera korišćenjem adekvatnih testova ili regularnih izraza na strani servera u back-end-u (moguće je i korišćenjem izričitih šema - Schema za validaciju ili drugim pristupima) i (3) provera na nivou baze podataka korišćenjem okidača nad samim tabelama baze podataka.
- Neophodno je napisati prateću projektnu dokumentaciju o izradi aplikacije koja sadrži (1) model baze podataka sa detaljnim opisom svih tabela, njihovih polja i relacija; (2) dijagram baze podataka; (3) dijagram organizacije delova sistema, gde se vidi veza između baze, back-end, front-end i korisnika sa opisom smera kretanja informacija; (4) popis svih aktivnosti koje su podržane kroz aplikaciju za sve uloge korisnika aplikacije prikazane u obliku Use-Case dijagrama; kao i (5) sve ostale elemente dokumentacije predviđene uputstvom za izradu dokumentacije po ISO standardu.
- Izrada oba dela aplikacije (projekata) i promene kodova datoteka tih projekata moraju da bude praćene korišćenjem alata za verziranje koda Git, a kompletan kôd aplikacije bude dostupan na javnom Git spremištu, npr. na besplatnim GitHub ili Bitbucket servisima, jedno spremište za back-end projekat i jedno za front-end projekat. Ne može ceo projekat da bude otpremljen u samo nekoliko masovnih Git commit-a, već mora da bude pokazano da je projekat realizovan u kontinuitetu, da su korišćene grane (branching), da je bilo paralelnog rada u više grana koje su spojene (merging) sa ili bez konflikata (conflict resolution).
Ova tema je rezervisana od strane studenata:
- 2017201596 (primarno odabrao/la)