Sunteți pe pagina 1din 10

UNIVERSITATEA “DUNĂREA DE JOS”

FACULTATEA DE AUTOMATICĂ, CALCULATOARE, INGINERIE ELECTRICĂ ŞI


ELECTRONICĂ

PROIECTAREA APLICATIILOR IN
RETELE DE CALCULATOARE

-PROIECT-

Profesor îndrumător: As. ing. Cristian NICULIŢĂ

Elev:Amarinei Marius-Alexandru

Grupa: 22C43 A
Cuprins
1. Descrierea și funcționarea protocolului
2. Descrierea jocului
3. Regulile jocului
4. Modul de rulare al programului
5. Parte de Server
6. Exercitiu :Cerinta +Rezolvare
1. Descrierea și funcționarea protocolului

TCP este un protocol sigur orientat pe conexiunea care permite ca un flux de octeți
trimiși de pe o mașină să ajungă fără erori pe orice altă mașină din inter-rețea. Acest
protocol fragmentează fluxul de octeți în mesaje discrete și pasează fiecare mesaj
nivelului internet. TCP tratează totodată controlul fluxului pentru a se asigura că un
emițător rapid nu inundă un receptor lent cu mai multe mesaje decât poate acesta să
prelucreze.
În stiva TCP/IP, protocolul IP asigură rutarea pachetelor de la o adresă sursă la o
adresă destinație, folosind și unele protocoale adiționale, precum ICMP sau IGMP.
Determinarea drumului optim între cele două rețele se face la acest nivel.
Așadar, acestea sunt o parte din caracteristicile și avantajele protocolului TCP:
 Asigura retransmiterea pachetelor( în cazul în care acestea se “pierd pe
drum”)
 Ordonează pachetele ajunse la destinție( acestea pot ajunge diferit față de
cum au fost trimise)
 Stabilește o conexiune între client și server

TCP-ul reușește să facă toate acestea cu ajutorul unor tipuri de mesaje speciale:
 SYN, ACK, FIN
 PSH, RST, URG

TCP asigură ordinea și retransmiterea în caz de pierdere de pachete, cu ajutorul


numerelor de secvența( sequence number).
Fiecare pachet(sau grup de pachete) are asociate un numar de secvență. Dacă
destinatarul primește un anumit număr de pachete(definit de numărul de secvență,
atunci acesta va trimite înapoi un mesaj de confirmare(ACK) pentru aceste pachete
primite.

2. Descrierea jocului

Jocul pe care mi l-am propus sa il fac se numeste Moara (cunoscut ca si tintar


) este un joc de societate jucat în doi, din categoria jocurilor de strategie.
Tabla de joc are desenate trei pătrate concentrice și conectate la mijlocul
laturilor, ca în figura alăturată. Colțurile dreptunghiurilor și mijloacele laturilor
sunt marcate cu puncte care arată cele 24 de poziții în care se pot plasa cele
18 piese, câte nouă de fiecare jucător.
3. Regulile jocului de moară

Tabla de moara din 1283


La începutul partidei tabla de joc este goală. Jocul se desfășoară în două
etape:

În prima etapă jucătorii pun pe rînd cîte una din piesele proprii pe punctele
tablei de joc. Această etapă se încheie când sunt plasate pe tablă toate cele
18 piese.
În a doua etapă jucătorii mută pe rând câte una din piesele proprii.
Jucătorul care începe jocul este decis fie de comun acord, fie de exemplu prin
aruncarea unui zar, fie cel care joacă cu piesele mai deschise la culoare.

Scopul urmărit de fiecare jucător este de a elimina una câte una piesele
adversarului. Pierde jucătorul care fie ajunge să aibă numai două piese, fie
nu-și poate muta nicio piesă.

Regulile de joc, aplicate în ambele etape, sunt:

Într-un punct nu poate fi plasată decât o singură piesă.


Mutarea unei piese se face numai de-a lungul uneia dintre liniile trasate pe
tabla de joc și numai într-un punct învecinat. Atunci când un jucător ajunge să
aibă trei piese, mutarea se poate face oriunde pe tabla de joc, nu numai de-a
lungul liniilor.

Cînd un jucător realizează un șir de trei piese proprii de-a lungul uneia din
liniile tablei — configurație numită „moară” — el trebuie să aleagă una din
piesele adversarului și s-o elimine de pe tabla de joc. Piesa aleasă pentru
eliminare trebuie să nu facă parte dintr-o moară; în unele variante ale jocului
această regulă se ignoră atunci când toate piesele adversarului sunt incluse în
mori.

În prima etapă, de plasare a pieselor pe tabla de joc, este posibil ca un jucător


să închidă două mori simultan. În acest caz unele variante permit eliminarea a
două piese ale adversarului, iar altele permit eliminarea unei singure piese.
Uneori jocul ajunge în impas, în sensul că se repetă aceleași configurații de
joc fără a se elimina nicio piesă. În asemenea cazuri rezultatul se poate
declara remiză dacă pe durata unui număr stabilit de mutări (15, 50 etc.) nu a
fost eliminată nicio piesă sau dacă aceeași configurație a pieselor se repetă
pentru a treia oară.
Strategia jocului
În prima etapă a jocului, jucătorii cu experiență nu realizează mori și nici nu-și
împiedică adversarul să construiască mori, concentrându-se mai mult pe
ocuparea unor poziții stategice, cum ar fi cele patru intersecții de pe pătratul
mijlociu. Pozițiile din colțurile pătratelor oferă prea puțină mobilitate și sunt
evitate.

Configurația în care un jucător poate realiza o moară la fiecare mutare, prin


deplasarea înainte și înapoi a unei singure piese, se numește „morișcă”,
„moară plimbătoare” sau „moară dublă”. În diagrama din prima figură jucătorul
cu piesele roșii are o astfel de configurație. De obicei, primul jucător care
reușește să construiască o morișcă va câștiga partida; în exemplul dat
jucătorul cu piesele roșii câștigă chiar dacă urmează albastrul la mutare.
Manual de utilizare

4. Modul de functionare a programului

Se va deschide proiectul intr-un program ca si visual studio. In continuare,se


va deschide si se va rula programul numit „Server” .In alte 2 ferestre se vor
deschide fisierele „Client”. In prima instanta a fisierului client,primul jucator va
crea jocul,iar cel de al doilea se va conecta la jocul respectiv si va incepe
meciul de Moara.

5. Parte de Server

Am create clasa Program.cs in folderul Server separate de restul claselor


unde am creat clasa cu numele GameStruct cu 2 atribute name1 si name2 ce
corespund celor 2 jucatori. Apoi am creat constructorul cu argumente cu acelasi
nume cu al clasei. In functia main se realizeaza practic conexiunea si tot acolo se
afiseaza si un mesaj in consola ce instiinteaza jucatorii ca trebuie sa astepte un timp
pana sa inceapa jocul.
Metoda con_OnExceptionRaised afiseaza exceptiile generate in linia de
comanda:
static void con_OnExceptionRaised(object sender, ExceptionRaiseEventArgs
args)
{
if (!(sender.GetType() == typeof(Socket)))
{
Console.WriteLine("exception source : " +
args.raisedException.Source);
Console.WriteLine("exception raised : " +
args.raisedException.Message);
Console.WriteLine("exception detail : " +
args.raisedException.InnerException);
}
}
Dupa ce se creaza jocul sunt afisate numele jucatorului care a create jocul si
numarul jocului:

if (DEBUG) Console.WriteLine(player1 + " a creat jocul");


gameRooms.Add ( nrOfGame, new GameStruct ( player1, "", 0 ) );
gamePointer.Add ( player1, nrOfGame );
Crearea unui nou joc se realizeaza in urmatorul mod:
con.send ( Encoding.Unicode.GetBytes ( "0GH_" +
gameRooms[nrOfGame].name1 + ";" + gameRooms[nrOfGame].who ) );
nrOfGame++;

Dupa ce s-au stabilit jucatorii si numele jocului, se apeleaza constructorul


GameStruct si apoi incepe efectiv jocul:
con.send(Encoding.Unicode.GetBytes("0GS_" + player[0] + ";" + 1));
con.send(Encoding.Unicode.GetBytes("0GJ_" + player[0] + ";" +
player[1] ) );
System.Threading.Thread.Sleep(1000);
Daca un jucator paraseste jocul, atunci partenerul lui de joc este instiintat prin
afisarea unui mesaj in consola cum ca “jucatorul X-ulescu a parasit jocul”:
else if ( text.StartsWith ("0GE_") ) {
string player = text.Substring ( 4 );
if (DEBUG) Console.WriteLine(player + " a inchis jocul");
Atunci cand unul sau ambii jucatori parasesc jocul, se sterge numarul jocului creat de
acestia:
gamePointer.Remove ( gameRooms[nrOfGame].name1 );
gamePointer.Remove ( gameRooms[nrOfGame].name2 );
gameRooms.Remove ( nrOfGame );

Conectarea
Pentru conectare, am creat folderul Connection ce contine 3 clase:
ConnectionObject.cs, IConnection.cs si TCPConnection.
In clasa TCPConnection am creat un socket in care am specificat 3 parametri: primul
parametru este familia de adrese, care in acest caz este interNetwork, tipul socket-
ului, in acest caz vom folosi socket bazat pe conexiuni in ambele sensuri: stream si
tipul protocolului folosit: TCP.
localSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
Dupa ce am creat un socket trebuie sa realizam o conexiune la server, iar pentru a
ne conecta la un server este necesar sa cunoastem adresa IP si portul la care ne
conectam:
IPEndPoint localEndpoint = new IPEndPoint(IPAddress.Any, port);
Am creat 3 declaratii de tipul delegate cu ajutorul carora realizam comunicarea intre
obiecte si face referire la metodele claselor cu acelasi nume:
public delegate void ConnectCompletedHandler(object sender, EventArgs
args);
public event ConnectCompletedHandler OnConnectCompleted;
private void ConnectCompleted(object sender, EventArgs args)
{
if (OnConnectCompleted != null)
{
OnConnectCompleted(sender, args);
}
}
In clasa IConnection inchidem conexiunea la server, inchidem socket-ul si stergem
portul de unde s-a facut conectarea:
bool close();
bool close(Socket sock);
bool connect(IPEndPoint remoteEndpoint);
bool reserve(int port);
bool send(byte[] data);
Iar in clasa ConnectionObject declaram metodele pentru trimiterea datelor byte[] data
si pentru socket-ul la distanta:
public byte[] data { get; set; }
public Socket remoteSock { get; set; }

In fisierul Protocol txt sunt mai multe informatii despre coduri:


0GL - listeaza jocurile
0GH - adaugă joc nou
0GJ - alatură la joc si porneste
0GS - actualizeaza status
0GE - inchide joc
0GR - reporneste joc
0GM - miscare joc
00C - mesaj chat

6.Exercitiu :Cerinta +Rezolvare

Cerinta:

In proiectul facut,se va adauga o regula astfel incat daca se face oricare dintre colturi
(cand fac o linie numai de albastru/rosu) in patratul exterior se vor lua 2 piese.

Rezolvare:
Etapa 1 :
Se creeaza o variabila numita “moaraMare” de tip Boolean in “program.cs”.
Etapa 2:
Se creeaza o functie care verifica daca linia se face pe patratul mare.

Etapa 3:
Cand se fac verificarile de linie se face si verificarea daca linia creata se afla pe
patratul mare si se atribuie variabilelei “moaraMare” rezultatul acesteia.

Tip verificare in cazul de adaugare piesa si mutare piesa


Etapa 4:
In momentul determinarii cazului de inlaturare a piesei se pune o conditie,iar daca
moara mare este adevarata se face eliminarea unei piese,fara indeplinirea conditiei
de iesire pentru a se repeta. Totodata in functia update status se afiseaza mesajul
corespunzator cazului (Daca jucatorul poate inlatura o piesa sau doua de pe tabla
de joc). In momentul inlaturarii primei piese variabila “moaraMare” devine falsa astfel
programul urmandu-si ciclul standard si totodata facandu-se update-ul de status.

Inlaturare piesa

Update status.

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