A ZH tartalmaz egy alapfeladatot, amelynek megoldása kötelező az elégséges megszerzéséhez. A további feladatok mindegyikének helyes megoldása +1 jegyet ér, és ezek tetszőleges sorrendben oldhatóak meg. A feladatok témái vázlatosan a következőek. A Alapfeladat: egyszálú szerver 1 Többszálú szerver 2 JUnit 3 Fájlkezelés 4 RMI 5 Adatbáziskezelés 6 JSP ---------------------- ZH kezdete Készíts egy zheszkoz könyvtárat, és töltsd le bele az AutoBead.zip fájlt. Csomagold ki a fájlt a könyvtárban. Készíts egy zh0524 nevű könyvtárat a zheszkoz könyvtár alatt. Ha egyszerű szövegszerkesztővel dolgozol: A zh0524 könyvtár alá készíts egy A nevű könyvtárat. Ebbe az A könyvtárba kerüljenek a megoldás fájljai. Ha az alapfeladattal készen vagy, készíts egy 1 (vagy 2 vagy 3...) könyvtárat, és ebbe dolgozz tovább. Ha NetBeanst vagy egyéb fejlesztőeszközt használsz: A project(ek) könyvtára(i) a zh0524 alá kerüljenek. Nyiss egy terminálablakot, lépj bele a zheszkoz könyvtárba, és add ki a következő parancsot. Az EHAKODOM és ZH_UTVONALA részeket értelem szerint kell kitölteni. Linux: java -Djava.library.path=. -cp .:jnotify-0.93.jar AutoBead EHAKODOM zh0524 Windows: java -Djava.library.path=. -cp .;jnotify-0.93.jar AutoBead EHAKODOM zh0524 A program minden mentéskor beküldi a ZH aktuális állását. A terminálablakot ne zárd be, a programot hagyd futni a ZH végéig. ---------------------- Beadási feltételek A fenti program automatikusan beadja a programot, de biztonsági másolatként küldd el a megoldásodat a gyakorlatvezetőd e-mail címére is. A zh0524 könyvtárat csomagold össze a következő nevű fájlba: EHAKODOM_NEVEM_MEGOLDOTTAK_GYAKVEZ.zip A megfelelő részek értelem szerint helyettesítendőek, pl. így: GIJAAAAI_GipszJakab_A346_Kitlei.zip Csak a *.java fájlokat szükséges betömöríteni, és esetleg egy info.txt fájlt mellékelni. ---------------------- Alapfeladat Készíts szókitaláló játékhoz szervert. A játékosok kezdetben 20 ponttal rendelkeznek, és minden helytelen tipp után csökken a pontszámuk. A játék célja az, hogy a játékosok a lehető legtöbb pontot tartsák meg, illetve az, hogy kitalálják betűnként a szerver által feladott szót. A játék a Szokitalalo osztályban legyen megvalósítva, amely legyen a Thread osztály leszármazottja. A Szokitalalo osztály tartalmazzon főprogramot, amely készítsen el egy Szokitalalo példányt, és indítsa el azt. A Szokitalalo példányosításkor kapjon egy paramétert, amely szövegek listáját tartalmazza. Ezeket a szavakat fogja a szerver sorban feladni a játékosoknak. Tegyük fel, hogy a szavak csak az angol ábécé kisbetűit tartalmazzák, és a játék során nem fogyunk ki belőlük. A példányosítás során kapunk továbbá öt egész számot (int), amelyekről feltesszük, hogy pozitívak. Ezeket a továbbiakban Tal, Mg, Mh, Uj és Erv jelöli. A példány indítson el egy szervert, amely kezdjen el várakozni az 15926 porton. A szerver megvárja, amíg két kliens kapcsolódik hozzá, majd a kliensektől felváltva (nem párhuzamosan) vár bemenetet. A szerver a kliensek minden lépése előtt elküldi a feladott szót a lépésre következő kliensnek egy sorban, a még el nem talált betűk helyett _ (aláhúzás) karakterekkel. Egy másik sorban pedig elküldi az első és a második játékos pontszámát kötőjellel elválasztva. Például, ha a szó "megszentsegtelenithetetlensegeskedeseitekert", és a kliensek az "e" és "t" betűket tippelték eddig, és két pontot lehet kapni betűnként a helyes találatokért (Tal), akkor a szerver küldje ezt: _e___e_t_e_te_e__t_etet_e__e_e__e_e_e_te_e_t 40-34 A kliensek a következő parancsokat adhatják ki. Minden parancsot egy sor tartalmaz. tipp B A szerver a megadott betűt tippeli. Ha a szóban szerepel a megadott betű, annak minden előfordulását felfedi a szerver. Minden így felfedett betűért Tal pontot kap a játékos. Már felfedett betűre tippelés esetén vegyük úgy, mintha helytelenül tippelt volna a játékos. Ha helyes a tipp, és ezzel a játékos megfejti a szót, a szerver győztest hirdet (lásd lent). A nyertes játékos az, akinek több pontja maradt, pontegyenlőség esetén az, aki az utolsó betűt megfejtette. Ha a kliens olyan betűre tippel, amelyik nem szerepel a szóban, pontot veszít: magánhangzó esetén Mg, mássalhangzó esetén Mh pontot. (Ezeket paraméterként kaptuk.) Ha a játékos pontjainak száma 0-ra vagy az alá csökken, a játék azonnal véget ér, és a szerver győztest hirdet. ujszo A játékos Uj pontot veszít. Ha ezzel a játék véget ér, a szerver győztest hirdet. Ha a játék nem ért véget, a szerver új szót választ, és a játék újra kezdődik. Az "ujszo" parancsot kiadó játékos ellenfele kezdi az új játékot. kikapcs A szerver és a program leáll, de előtte "kikapcsolva" üzenetet küld mindkét játékosnak. (helytelen parancs) A szerver egy sorban a "ervenytelen" szöveget küldi a játékosnak. A játékos veszít Erv pontot. Ha a játék ezzel véget ér, a szerver győztest hirdet. Győztes hirdetése. Minden lépés után, ha a játékos pontjainak száma 0-ra vagy az alá csökken, a játék azonnal véget ér, és a szerver győztest hirdet a következőképpen. A szerver elküldi a "nyert 1" vagy "nyert 2" szöveget mindkét játékosnak, és bontja a kapcsolatot velük. Ezután a szerver új játékot kezd. -------------------------------------------------------------- +1 jegy. Készíts egységteszteket is a szerverhez a JUnit keretrendszer segítségével. Az egységtesztek kapcsolódjanak a helyi gépen az alapértelmezett portra (15926), küldjenek el rögzített bemeneteket, és ellenőrizzék, hogy a kapott kimenet megfelel-e az elvárásoknak. Készíts legalább két különböző tesztesetet. Néhány lehetőség arra, mit vizsgáljon a teszteset: - a szerver egy helyes tipp után megfelelő kimenetet küld - a szerver egy helytelen tipp után megfelelő kimenetet küld - a szerver új szó kérése után megfelelő kimenetet küld - a szerver a kilep parancsra kilép -------------------------------------------------------------- +1 jegy. A szerver legyen többszálú. A parancssorban megadott portokon induljon el egy-egy szerver, ami működjön a fent leírtaknak megfelelően. -------------------------------------------------------------- +1 jegy. Bármelyik felhasználó adhassa ki a "ment fájlnév" parancsot, amelynek hatására az eddigi tippek mentődjenek el a szerveren a megadott nevű fájlba soronként, az első játékossal kezdve. A program indítson el egy szervert az 35724 porton. A kapcsolódó kliensek adhassanak meg egy fájlnevet, ahonnan a szerver olvassa fel az abban leírt játékot, és írja ki a kliensnek az éppen kitalálandó szót (a megtippelt betűket felfedve), illetve a játékosok pontszámait. -------------------------------------------------------------- +1 jegy. Jegyezz be RMI szolgáltatást "Szokitalalo" néven. A kapcsolódó objektumnak legyen a kliens minden fent felsorolt utasításához egy-egy megfelelő művelete. Ezenkívül legyen egy getPont és egy getSzo művelete, az egyik/másik játékos pontszámát (paramétertől függően), illetve az éppen kitalálandó szót (a megtippelt betűket felfedve) adja vissza. -------------------------------------------------------------- +1 jegy. A játék menetét tárold el adatbázisban. Az első játékos, mielőtt megtenné az első lépését, adjon meg egy azonosítót. Ha ezen az azonosítón még nincsen játszma elmentve, akkor kezdődjön új játszma. A játékosok adhassák ki a "felbehagy" utasítást, amelynek hatására a játék folytathatóvá válik a következőképpen. Ha az arany játékos belépéskor olyan játszma azonosítóját adja meg, amelyik félbe van hagyva, akkor töltődjön be az aktuális állás. A szerver írja ki a felhasználóknak a tábla állását, és azt, hogy melyik játékos jön lépésre. A játékosok adhassák ki a "torol jatszma" utasítást, amelynek hatására a megadott játszma törlődjön az adatbázisból. Az éppen folyó játszmát ne lehessen törölni. -------------------------------------------------------------- +1 jegy. Adj egyszerű JSP alapú felületet a játékhoz. A felület mutassa a jelenlegi szót (a megfelelő betűk felfedve), a játékosok pontszámait, és azt, hogy ki következik lépésre. A játékosok következő lépését egy szövegmezőben lehessen megadni.