remote ponge sic

9
Proiect Elemente Speciale ale Infrastructurilor de Calcul Remote Pong 1

Upload: alex-bucur

Post on 07-Jul-2016

11 views

Category:

Documents


3 download

DESCRIPTION

cxgfxgfdgfdgfdg

TRANSCRIPT

Page 1: Remote Ponge Sic

Proiect Elemente Speciale ale Infrastructurilor de Calcul

Remote Pong

Ene MariusSoare Elena Ramona Georgiana

Bucur Alexandru

1

Page 2: Remote Ponge Sic

Remote Pong

Remote Pong este un simplu joc prin care doua sau mai multe persoane pot juca clasicul pong in retea si au posibilitatea de a controla “paleta” prin intermediul telefonului conectat la wifi-ul local.

Jocul a fost realizat in engine-ul Unity fara nici un alt script/plugin unity extern si

pentru multiplayer a fost folosita functia de multiplayer integrata in Unity.

Masterserver-ul a fost compilat local din cauza unor probleme de conexiune cu

masterserver-ul pentru teste oferit de cei de la Unity.

Pentru a porni jocul, unul dintre jucatori trebuie sa ruleze script-urile “start

masterserver.bat” si “start facilitator.bat”, dupa care sa apese pe butonul “Start

Server” din meniu. Celalalt jucator trebuie sa ruleze aplicatia separata de android si

sa se conecteze la un server din lista. Odata conectat, pe telefon vor aparea doar

doua butoane “Sus/Jos” cu care poate controla “paleta” pe ecranul principal.

Jocul este compus din 4 imagini jpg/png, 3 materiale (culori diferite palete si un

material special Unity ce are functia de “salt” fara “frictiune” cu alte elemente din joc

pentru minge), 2 prefab-uri pentru jucatori ( “template” ce poate fi folosit pentru a

crea noi instante in scena).

Limbajul de programare folosit este C#, numar total de scripturi scrise fiind 6:

● Controale.cs

● Lan.cs

● Minge.cs

● ScorDreapta.cs

● ScorStanga.cs

● CameraShake.cs

2

Page 3: Remote Ponge Sic

Scriptul “Controale.cs” determina miscarea si viteza “paletelor” sus/jos atat de la

tastatura, cat si de pe smartphone prin intermediul functiei “miscare()”. Variabila de

tip float “speed” determina viteza miscarii “paletelor”.

public void miscare()

{

if(Input.GetKey (KeyCode.W) || sus == 1)

{

paleta.velocity = new Vector2(0, speed);

}

else if(Input.GetKey (KeyCode.S) || sus == -1)

{

paleta.velocity = new Vector2(0, -speed);

}

else if(sus == 0)

{

paleta.velocity = new Vector2(0, 0);

}

}

Pentru a controla “paleta” de pe telefon au fost generate doua butoane de tip

“GUI” ce modifica o variabila de tip int, iar valoarea pe care o ia (1/0/-1) determina

miscarea “paletei in functia “miscare()”.

S-a folosit conditia “#if UNITY_ANDROID” pentru a evita aparitia acestor butoane

pe calculator. Tipul de buton “RepeatButton” face butonul sa ramana activ atata timp

cat este tinut apasat.

#if UNITY_ANDROID

void OnGUI()

3

Page 4: Remote Ponge Sic

{

if(GetComponent<NetworkView>().isMine)

{

if (GUI.RepeatButton(new Rect(150, 150, 200, 150), "Up"))

{

sus = 1;

}

else if (GUI.RepeatButton(new Rect(150, 300, 200, 150),

"Down"))

{

sus = -1;

}

else

sus = 0;

}

}

#endif

Scriptul “Minge.cs” determina punctajul jucatorilor in functie de coliziunea mingii

cu peretele stang/drept. Tot aici este se afla si butonul de resetare al scorului, pozitei

mingii, efectul de “tremurat” al fundalului la contactul cu “paleta” si plecarea mingii

atunci cand se incepe jocul.

“Tremuratul” fundalului este determinat de booleana “atinge” ce cheama functia

“shake” din scriptul CameraScript.cs atunci cand este adevarata. Booleana este

adevarata doar pentru 0.1 secunde dupa contactul cu “paleta” pentru a nu deranja

jucatorul la ochi.

void OnCollisionEnter2D (Collision2D coll)

{

if (coll.collider.CompareTag("leftWall"))

ScorDreapta.AdaugaPuncte(puncteDeAdaugat);

4

Page 5: Remote Ponge Sic

if (coll.collider.CompareTag("rightWall"))

ScorStanga.AdaugaPuncte(puncteDeAdaugat);

if (coll.collider.CompareTag("Player"))

{

var velY = GetComponent<Rigidbody2D>().velocity;

velY.y =(velY.y/2.0f)+(coll.collider.GetComponent<Rigidbody2D>().velocity.y/3.0f);

GetComponent<Rigidbody2D>().velocity = velY;

StartCoroutine("tremura");

}

}

Functia pleaca() determina directia mingii la plecare folosind o variabila aleatorie

si plecarea acesteia la pornirea jocului.

void pleaca()

{

float rand = Random.Range (0.0f,0.2f);

if (rand < 0.1f)

{

GetComponent<Rigidbody2D>().AddForce(new

Vector2(20.0f,15.0f));

}

else

{

GetComponent<Rigidbody2D>().AddForce(new Vector2(-20.0f,-

15.0f));

}

}

“ScorStanga.cs” si “ScorDreapta.cs” contin cate o variabila de tip int pentru a

determina numarul scorului si functiile de adaugare puncte si resetare ce sunt

chemate in scriptul Minge.cs.

public static void AdaugaPuncte(int puncteDeAdaugat)

{

5

Page 6: Remote Ponge Sic

scorStanga += puncteDeAdaugat;

}

public static void reset()

{

scorStanga = 0;

}

“CameraScript.cs” are doar functia de a misca fundalul scenei printr-o simpla

transformare de pozitie intr-un mod aleatoriu folosind functia Random.Range.

Contine si o functie reset ce reseteaza pozitia fundalului la 0 in cazul in care este

nevoie de ea mai tarziu.

public void shake()

{

transform.position = new Vector3(transform.position.x +

Random.Range(-0.1f,0.1f), transform.position.y + Random.Range(-0.1f,0.1f),

transform.position.z);

}

public void reset()

{

transform.position = Vector3.zero;

}

Scriptul “Lan.cs” se ocupa cu functiile de pornire/afisare a serverelor,

“instantierea” jucatorilor la conectare si stergerea lor la deconectare.

void OnServerInitialized()

{

Network.Instantiate(Player1, new Vector3(-5f, 0f, 0f),

Quaternion.identity, 0);

6

Page 7: Remote Ponge Sic

Network.Instantiate(Ball, new Vector3(0f, 0f, 0f), Quaternion.identity,

0);

}

void OnConnectedToServer()

{

Network.Instantiate(Controller, new Vector3(5f, 0f, 0f),

Quaternion.identity, 0);

}

void OnPlayerDisconnected(NetworkPlayer Player)

{

Network.RemoveRPCs(Player);

Network.DestroyPlayerObjects(Player);

}

7