Sunteți pe pagina 1din 5

DX-Ball

(joc de animaie)

Fig. 1: Interfaa de start a jocului.

Fig. 2: Interfaa de start a jocului + Meniul.

1. Despre Joc.
Obiectivul jocului este de a goli ecranul de toate crmizile, cu ajutorul unei palete i a unei bile, n scopul avansrii n nivel i acumulrii de puncte. Juctorul controleaz o palet, situat n partea de jos a ecranului, cu ajutorul mouse-ului. Lovindu-se de palet, bila este respins ctre crmizi, acestea disprnd atunci cnd bila le lovete. Pentru fiecare crmid spart, juctorul primete 5 puncte. Dac juctorul nu reuete s prind bila, pierde o via. Jocul va fi finalizat odat cu pierderea ultimei viei. Ideea jocului este ca juctorul s sparg ct mai repede toate crmizile pentru a avansa n nivel, pentru c odat cu respingerea bilei de ctre palet, crete viteza bilei, astfel fiind mai greu de prins bila. Acest joc este o copie dup celebrul joc DX-Ball 2, 1998, Longbow Digital Arts, elaborat n Visual Basic 2010 Express.

2. Scurt Scenariu.
Fiecrui buton de meniu i atribuim una sau mai multe aciuni, astfel: - Joc Nou. Apare un panel Panel_JN n care avem un cmp de text (Numele1) i un buton de OK (OK_JN). Juctorul i scrie numele n caseta de text apoi apas butonul OK. n momentul apsrii butonului, se creaz o nou linie n fiierul utilizatori.txt <Nume_Utilizator>, <Scor>, <Viei>, <Nivel>. Numele juctorului este atribuit unei variabile (NumeJucator) n care se pstreaz pn la schimbarea juctorului sau la ieirea din joc. Se apeleaz subrutina (IncarcaUtilizator) ce caut n fiierul utilizatori.txt rndul ce corespunde juctorului cu numele pstrat n variabila NumeJucator i se preiau valorile: <Scor>, <Viei>, <Nivel>; se actualizeaz jocului, apoi pornete jocul. - ncarc Joc. Apare un panel Panel_IJ n care avem un cmp de text (Numele2) i un buton de OK (OK_IJ). Juctorul i scrie numele n caseta de text apoi apas butonul OK. n momentul apsrii butonului, se apeleaz subrutina (IncarcaUtilizator) n dependen de numele scris mai sus de ctre juctor. Se preiau informaiile despre juctorul respective din fiierul utilizatori.txt , se actualizeaz jocului dup care ncepe jocul. - Editor. Deactivat. Acest buton ar trebui s deschid un nou Form n care juctorul s aib posibilitatea de a-i construi propriile sale hri. - High Score. Apare un panel Panel_HS n care sunt 10 rnduri. La nceputul rndului un Label fr text pentru Numele Juctorului i la sfritul rndului un Label fr text pentru Scor. Din fiierul utilizatori.txt, din toate rndurile, fiecare rnd nsemnnd un nou utilizator, se preia Numele (primul cmp) i Scorul (al doilea cmp) ntr-o matrice bidimensionala 2*n

(2 coloane, n rnduri). Se sorteaz n ordine descresctoare vectorul format de coloana cu valorile Scorului, coloanele fiind legate. Apoi, primele 10 rnduri ale matricii apar n clasament. - Ieire. Jocul este pauzat; apare o fereastr n care ntreab juctorul dac e sigur c vrea s nchid jocul. No Jocul continua, Yes se salveaz informaiile despre utilizator n fiierul utilizatori.txt i jocul se nchide.

3. Etape Principale n Elaborarea Jocului.


- Micarea Bilei. Primul pas n implementarea jocului este construirea protagonistului acestui joc Bila un Shape n form de cerc. Problema apare atunci cnd vrem s-i dm via Bilei, s-o facem s se mite. Pentru rezolvarea ei, am apelat la Timer (MiscareBila) obiect ce asigur dependena Micrii Bilei de timp. Deoarece jocul este 2D, Micarea Bilei este reprezentat de un Vector (Dr) rezultant din ali 2 vectori Vectorul Deplasrii pe axa OY (Dy) i Vectorul Deplasrii pe axa OX (Dx).

Fig. 3 Fig. 5: Micarea Bilei conform Vectorului Rezultant.


Private Sub MiscareBila_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MiscareBila.Tick Bila.Left += Dx * Viteza Bila.Top += Dy * Viteza If (Bila.Left <= 0) Or ((Bila.Left + Bila.Width) >= Meniu.Left) Then Dx = -Dx End If If (Bila.Top <= 0) Then Dy = -Dy End If End Sub

Se definesc i hotarele pentru care bila este respins ultimile 2 If-uri.

Fig. 6: Micarea Bilei din Poziia I n Poziia II.

- Paleta. Respingerea Bilei. Dup rezolvarea problemei legate de Micarea Bilei, cea de-a doua problem creia urmeaz s-i descriu rezolvarea este legat de Palet i Respingerea Bilei de ctre aceasta. Cea mai simpl metod ar fi: atunci cnd Bila se lovete de Palet, vectorul ce descrie micarea bilei pe axa OY, i schimb sensul n opusul lui. n acest sens, trebuie doar s nmulim variabila Dy cu -1 (Dy *= -1). O metod mai complicat ar fi pentru ca Bila s fie respins sub un unghi, fa de axa OX, ce depinde de locul unde s-a lovit Bila de Palet (Fig. 7). De la centru spre margini, ntr-o parte i n alta, unghiul sub care trebuie s fie respins Bila scade. De exemplu, dac Bila cade la centrul Paletei, ea va fi respins sub un unghi de 90o fa de axa OX, pe cnd la margini, am considerat suficient un unghi de 30o. Dac considerm mijlocul Paletei ca centrul axei de coordonate OX atunci, cu ct mai mult distana dintre centrul axei - O i Bil este mai mare, cu att mai mult se micoreaz unghiul de respingere.
If ((Bila.Top + Bila.Height) >= Paleta.Top) And ((Bila.Top + Bila.Height) <= (Paleta.Top + Paleta.Height)) Then If ((Bila.Left + Bila.Width) >= Paleta.Left) And ((Bila.Left + Bila.Width / 2) < (Paleta.Left + Paleta.Width / 2)) Then alfa = 90 - (60 * ((Paleta.Left + Paleta.Width / 2) - (Bila.Left + Bila.Width / 2)) / (Paleta.Width / 2)) Dx = -(Dr * Math.Cos(alfa / (180 / Math.PI))) Dy = -(Dr * Math.Sin(alfa / (180 / Math.PI))) End If If (Bila.Left <= (Paleta.Left + Paleta.Width)) And ((Bila.Left + Bila.Width / 2) > (Paleta.Left + Paleta.Width / 2)) Then alfa = 90 - (60 * ((Bila.Left + Bila.Width / 2) - (Paleta.Left + Paleta.Width / 2)) / (Paleta.Width / 2)) Dx = (Dr * Math.Cos(alfa / (180 / Math.PI))) Dy = -(Dr * Math.Sin(alfa / (180 / Math.PI))) End If If ((Bila.Left + Bila.Width / 2) = (Paleta.Left + Paleta.Width / 2)) Then Dy = -Dy End If End If

Fig. 7: Respingerea Bilei n dependen de locul unde a czut.

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