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,
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

----------------------

Beadási feltételek

Az elkészített fájlokat 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 kell beadni, a .class fájlokat,
esetleg NetBeans vagy egyéb fejlesztő környezethez tartozóakat NEM.

Minden osztály az  arimaa  nevű csomagba kerüljön.
A főprogram az ArimaaServer nevű osztályban legyen.

----------------------

Az Arimaa játék (lényegesen egyszerűsített) leírása

Az Arimaa játékot két játékos játssza 8x8-as táblán az alábbi bábukkal.

    név         angolul     jelölés     darab
    elefánt     Elephant    E           1
    teve        caMel       M           1
    ló          Horse       H           2
    kutya       Dog         D           2
    macska      Cat         C           2
    nyúl        Rabbit      R           8

A bábuk erősség szerint vannak felsorolva:
az elefánt a legerősebb, a nyúl a leggyengébb.

Egy Arimaa játszma a bábuk elhelyezésével kezdődik.
Először az egyik játékos (arany/fehér) helyezi el a bábuit
tetszőlegesen a tábla déli két során (1. és 2. sor),
majd a másik játékos (ezüst/fekete) teszi ezt
a tábla északi oldalán (7. és 8. sor).
Az oszlopokat betűk jelölik
a-tól (a tábla nyugati vége) h-ig (a tábla keleti vége).

Ezután megkezdődik a játék,
amelynek egyszerűsített szabályai a következőek.

A játékosok felváltva következnek lépésre,
a játszmát arany kezdi.
Minden lépés négy bábu mozgatásából áll.
A játékosok az ellenfelek bábuit is mozgathatják;
ennek a részletes szabályaival nem törődünk.
Minden bábu élszomszédosan tud lépni,
azaz pl. a b4 mezőről b3, b5, a4, c4 mezőkre.

A játék akkor ér véget,
ha egy nyúl átér a tábla túlsó végére
(arany esetében a 8., ezüst esetén az 1. sorba).

------------------------------------------

Alapfeladat.

Készíts olyan szervert az Arimaa játékhoz,
amely szöveg alapú kapcsolatokat kezel.
A program kaphassa meg parancssori paraméterként a szerver portját;
paraméter nélkül indítva a szerver az 15926 porton induljon el.

A szerver két kliensre vár a porton, aztán megkezdi a játékot.
Az első kapcsolódó fél lesz az arany színű játékos;
a szerver mindkét játékosnak írja ki a színét.

Kezdetben az arany játékos helyezi el a 16 bábuját a mezőkre.
Például érvényes az alábbi elhelyezés.

Da2 Db2 Cc2 Md2 Ee2 Hf2 Hg2 Ch2 Ra1 Rb1 Rc1 Rd1 Re1 Rf1 Rg1 Rh1

Ha a felhelyezés során a felhasználó
foglalt mezőre vagy
érvénytelen mezőre -- nem a megfelelő sorba -- helyezne bábut,
kapjon megfelelő hibaüzenetet.

Ezután az ezüst játékosnak írja ki a szerver
a tábla jelenlegi állását,
majd kérje be a játékos kezdeti állását.
Az ezüst játékos bábuit jelöljék kisbetűk, az arany játékosét nagybetűk.
Például érvényes a következő elhelyezés.

ha7 db7 cc7 ed7 he7 dg7 cf7 mh7 ra8 rb8 rc8 rd8 re8 rf8 rg8 rh8


Ezután a játékosok lépései következnek.
A szerver küldje el szövegesen minden játékosnak a tábla tartalmát,
amikor a játékos következik lépésre.
A fent leírt kezdőpozíció a következő táblát adja.

rrrrrrrr
hdcehdcm
--------
--------
--------
--------
DDCMEHHC
RRRRRRRR


Például az arany játékos kezdheti ezzel a négy mozgatással a játékot.

Ee2n Md2n Hg2n Ee3n

Arany az elefántját kétszer,
a tevéjét és az egyik lovát egyszer léptette északra;
az elefánt e4-re, a ló g3-ra, a teve d3-ra került.

rrrrrrrr
hdcehcdm
--------
--------
----E---
---M--H-
DDC--H-C
RRRRRRRR

Az ezüst játékos következik lépésre.

ed7s ed6s ed5e db7s

Az ezüst elefánt kétszer délre, egyszer keletre lépett (d7->d6->d5->e5),
az egyik kutya pedig b7-ről b6-ra.

rrrrrrrr
h-c-hcdm
-d------
----e---
----E---
---M--H-
DDC--H-C
RRRRRRRR

A játszma további lépései itt tekinthetőek meg:
http://arimaa.com/arimaa/games/pgn.cgi?gid=1000

A játék bizonyos pontjain a tábláról lekerülhetnek bábuk.
Ezt x jelöli, és nem számít külön lépésnek.
A példa játszmában a 9b lépésnél látható egy bábu elveszte.

Rc5n Rc6x db5e ha7e md6s

A játszma érjen véget, ha egy játékos lépésének végén
valamelyik játékos legalább egyik nyula átér a pálya túlsó sorára.
Ekkor a szerver hirdesse ki a győztest mindkét másik játékos számára
(feltételezhető, hogy olyan helyzet nem alakul ki egy lépés után,
hogy mindkét játékos győzne), majd kezdjen várakozni új két játékosra.
Ha az arany játékos a bábuk felsorolása során
egy bábu helyett a "vege" szüveget küldi el, a szerver lépjen ki.

--------------------------------------------------------------

+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 egy-egy tesztesetet a következőek vizsgálatára.

- a kezdeti felhelyezés során az egyik játékos hibás lépést tesz
    - arany/ezüst foglalt mezőre helyezne bábut,
    - arany/ezüst érvénytelen mezőre helyezne bábut,
    - arany/ezüst olyan bábut helyezne el,
      amelyik fajtából már nincsen több bábu
- a kezdeti felhelyezés rendben megtörténik
    - a tábla alakja megfelelő
- arany/ezüst egy érvényes lépést tesz
- arany/ezüst érvénytelen lépést tesz
- a játékot megnyeri az egyik játékos
    - pl. http://arimaa.com/arimaa/games/pgn.cgi?gid=19009
      egy viszonylag rövid játékot ír le
- a játékot megnyeri az egyik játékos, és új játék kezdődik
  (a szerver nem lép ki)

--------------------------------------------------------------

+1 jegy.

A szerver legyen többszálú.
A parancssorban megadott portokon induljon el a egy-egy Arimaa szerver,
ami működjön a fent leírtaknak megfelelően.

--------------------------------------------------------------

+1 jegy.

Bármelyik felhasználó adhassa ki a "ment " parancsot,
amelynek hatására a játszma eddigi lépései mentődjenek el a szerveren
a megadott nevű fájlba az alábbi formátumban.

1w Ra1 Rb1 Rc1 Rd1 Re1 Rf1 Rg1 Ch1 Da2 Hb2 Dc2 Ed2 Me2 Rf2 Cg2 Hh2
1b ra7 hb7 dc7 hd7 ee7 mf7 dg7 rh7 ra8 rb8 rc8 cd8 ce8 rf8 rg8 rh8
2w Me2n Hh2n Ch1n Rg1e
2b ee7s ee6s ee5s hb7s
3w Ed2n Me3s Me2w Rf1e
3b ee4s ee3s Rf2n Rf3x ee2e
4w Hh3w Ed3e Md2e Dc2e
...

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 a tábla aktuális állását.

--------------------------------------------------------------

+1 jegy.

Jegyezz be RMI szolgáltatást "Arimaa" néven.
A kapcsolódó objektumnak a következő műveletei legyenek.

kezdetiFelhelyezes
- meg kell adni, hogy arany vagy ezüst lépéséről van-e szó
- meg kell adni egy 16 elemű, szövegeket tartalmazó tömbben az elhelyezendő figurákat
- visszaadja, hogy az elhelyezés érvényes-e
    - ha nem érvényes, akkor ne történjen változás a táblán

lepes
- meg kell adni, hogy arany vagy ezüst lépéséről van-e szó
- egy négyelemű tömbben meg kell adni a bábumozgatásokat
- visszaadja, hogy a lépés érvényes-e
    - ha nem érvényes, akkor ne történjen változás a táblán

tablatLeker
- visszaadja szövegesen a tábla jelenlegi állapotát

aranyKovetkezikE
- logikai

tortenet
- a lépések eddigi történetét adja vissza szövegesen

--------------------------------------------------------------

+1 jegy.

A játszmák menetét tárold el adatbázisban.

Az arany 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átszma 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 " utasítást,
amelynek hatására a játszma törlődjön az adatbázisból.
Az éppen folyó játszmát ne lehessen törölni.

A "vege" utasítás hatására a játszma befejeződik, nem folytatható,
szemben a "felbehagy" utasítással.

--------------------------------------------------------------

+1 jegy.

Adj egyszerű JSP alapú felületet a játékhoz.
A táblát egy 8x8-as méretű HTML táblázat írja le,
amelynek mezői szövegesen tartalmazzák az adott bábu nevét.
A játékosok következő lépéseit egy szövegmezőben lehessen megadni.
Az is jelenjen meg a felületen, ha az utoljára megadott lépés hibás.