Documente Academic
Documente Profesional
Documente Cultură
(joc de animaie)
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.
- 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