Sunteți pe pagina 1din 19

Aplicatie client-server cu chat

pentru jocul 5 in linie


Studenti : Diman Ion-Cristian
Diac Adina-Lidia
Profesor coordonator : Tudose Cristina
I Specificatii Functionale

II Tehnologii Folosite

III Partea teoretica

IV Arhitectura aplicatiei

V Forma finala

VI Concluzii

Cuprins
Specificatii Functionale

Se doreste implementarea jocului Go-moku (5 in linie) in limbajul de


programare Java, folosind ca IDE Eclipse Neon.
Programul trebuie sa permita conectarea a 2 clienti, desfasurarea
jocului efectiv, cu afisarea unui mesaj cu cel care a castigat. Fiecare
jucator trebuie sa aiba posibilitatea de a plasa o piesa pe tabla, dupa ce
adversarul a efectuat o mutare.
Jocul se incheie in momentul in care unul dintre adversari (cel cu piese
albe sau cel cu piese negre) a reusit sa faca o linie de 5 piese pe
orizontala, verticala sau pe diagonale.
Specificatii Functionale

Proiectul este compus dintr-un program de tip server care accepta


programe de tip client, serverul stiind sa faca legatura intre mai multi
clienti.
In general, se va realiza conexiune intre un client cu id par (Alb) si un
client cu id impar(Negru).
In momentul in care unul dintre clienti se deconecteaza, se va afisa
mesaj in programul celuilalt client prin care se cere acestuia sa inchida
fereastra.
Tehnologii Folosite

Java 2D
Java Threads
Java Sockets
Partea teoretica (1)

Stabilirea unui server TCP in Java


presupune 5 pasi :
1) Creearea unui obiect de tip ServerSocket
ServerSocket server = new ServerSocket(portNumber,
queueLength );
2) Asteptarea unei conexiuni
Socket connection = server.accept();

3) Preluarea fluxurilor de intrare/iesire

4) Efectuarea procesarii efective

5) Inchiderea Conexiunii
Partea teoretica (2)
Stabilirea unui client TCP in Java presupune 4 pasi :

1) Creearea unui socket pentru a ne conecta la server


Socket connection = new Socket( serverAddress, port );

2) Preluarea fluxurilor de intrare/iesire

ObjectInputStream input = new ObjectInputStream( connection.getInputStream() );


ObjectOutputStream output = new ObjectOutputStream( connection.getOutputStream() );
3) Efectuarea procesarii efective

4) Inchiderea Conexiunii
Arhitectura Aplicatiei Partea de server

Clasa server contine o clasa


Player care implementeaza Runnable
(fiecare jucator este un thread).
Clasa server are o metoda execute care
asteapta jucatori sa se conecteze si se
blocheaza
in cazul in care jucatorul anterior era par
si s-a deconectat, variabila incremented
va fi true si nu se va mai creea jucatorul
urmator (se va creea jucator cu id par)
Arhitectura Aplicatiei Partea de server

Serverul contine un sir de obiecte de tip Scanner si Formatter


corespunzatoare pentru fiecare conexiune cu fiecare client

Serverul mai cuprinde si un vector de variabile boolean


connected[], prin care stie in fiecare moment cate conexiuni are
Arhitectura Aplicatiei Partea de server

Modul de functionare al serverului este relativ simplu


daca a primit mesaj de la client par, trimite mai departe
catre client impar
sau invers daca a primit mesaj de la client impar, trimite
catre urmatorul client par
Arhitectura Aplicatiei Partea de server

Fiecare obiect Player din server este blocant, in sensul ca


asteapta in continuu mesaje de la clienti, este implementat intr-
un thread
In momentul in care
se primeste mesajul
TERMINATE, se
trimite acest mesaj si
catre celalalt client
astfel incat conexiunile
sunt inchise (cum se
vede si in figura
alaturata).
Arhitectura Aplicatiei Partea de client

Programul pentru client este


compus dintr-o fereastra
(JFrame) pe care se plaseaza
celelalte componente grafice
Tabla pe care se plaseaza
piesele este formata cu ajutorul
unui JPanel in interiorul caruia
se afla un vector de obiecte
GameSquare (de tip JPanel),
fiecare din ele stiind sa se
deseneze si sa deseneze piesa
din interior.
Arhitectura Aplicatiei Partea de client
Arhitectura Aplicatiei Partea de client

Procesarea datelor in aplicatia client se face intr-un thread separat,


deoarece fiecare client asteapta in continuu date de la server

metoda processData se ocupa cu


prelucrarea datelor venite de la
server : fie se primeste un mesaj
pentru joc nou, fie pentru chat, fie
mutare pe tabla
Arhitectura Aplicatiei Terminarea Jocului

Jocul se termina cand unul din jucatori a reusit sa completeze o linie


de 5 piese de aceeasi culoare, fie pe orizontala, fie pe verticala, fie
pe diagonale, asa cum se vede in algoritmul urmator :
Forma finala a proiectului vedere generala
Forma finala a proiectului mesaje server
Forma finala a proiectului mesaje chat
Concluzii

Desi pare un joc simplu, pentru implementarea jocului 5 in linie in


limbajul Java sunt necesare cunostinte avansate de programare TCP
cu socket-uri
Nu numai ca avem nevoie de programare de retea, dar deoarece
citirile sunt apeluri blocante, avem nevoie si de programare cu mai
multe fire de executie (thread-uri)
Java2D poate fi la fel de util in dezvoltarea jocurilor 2D de tip
Board sau Tabla ca si OpenGL, dar mult mai usor de folosit
Pentru a realiza o aplicatie intr-un mod profesionist, trebuie investiti
timp/bani in testare intensiva

S-ar putea să vă placă și