Dezvoltarea Unei Aplicatii Tip Joc In Visual Basic 6

Cuprins

Capitolul 1. Programarea in Visual Basic

1.1. Visual Basic, noțiuni de baza

1.1.1. Scurta istorie a programului Visual Basic

1.1.2. Mediul Visual Basic

1.2 Crearea unei aplicații simple utilizand Visual Basic

Capitolul 2. Secvențe de cod in Visual Basic

2.1 Scrierea de cod, informații generale

2.2. Tipuri de date in Visual Basic

2.2.1 Lucrul cu variabilele in Visual Basic

2.3. Controlling Program Flow

2.3.1. Operatori condiționali

2.3.2. Operatori logici

2.3.3. Declarațiile „If…..Then…..Elseif….Else” cu operatori

2.3.4. Declarația „Select Case …. End Select

Capitolul 3. Funcții

3.1. Introducere in funcțiile Visual Basic

3.1.2. Funcția MsgBox

3.1.3. Funcția InputBox

3.2. Matrici

3.2.1. Declararea matricilor

Capitolul 4. Elemente grafice

4.1. Funcțiile linie și forma (line and shape control

4.2. Funcțiile Image Box și Picture Box

Capitolul 5.Crearea aplicațiilor multimedia

5.2. Animațiile

Capitolul 6. Aplicația de tip joc

6.1. Scurta introducere

6.2. Paginile jocului

6.2.1 Definirea dimensiunilor planșei de lucru

6.2.2. Definirea pozițiilor pionului și a adversarilor

6.2.3. Definirea traseului și a zidurilor

6.2.4. Elemente de grafica (imagini, poze

6.2.5. Testarea corecta a funcționarii prin cod

6.2.6. Rezolvarea / pierderea jocului

6.2.7. Mișcarea pionilor pe planșe

Capitolul 7. Concluzii

Bibliografie

Anexe

Capitolul 1. Programarea in Visual Basic

1.1. Visual Basic, noțiuni de baza

1.1.1. Scurta istorie a programului Visual Basic [1]

Visual Basic este un limbaj de programare performant derivat din forma incipienta și mai simpla a DOS numita Basic. BASIC reprezinta prescurtarea de la denumirea englezeasca „Beginners All – purpose Symbolic Instruction Code”. Codul din Visual Basic emuleaza instrucțiuni in limba engleza.

Visual Basic este un limbaj de programare simplu, „user friendly”, care poate fi invațat ușor și de persoane care nu au o pregatire prealabila in programare. Invațarea acestui limbaj de catre copii, ii ajuta șa-și dezvolte gandirea și logica. Poți alege sa programezi o aplicație in Visual Basic doar pentru amuzament, sau poți alege sa creezi aplicații mult mai complexe, comerciale și industriale.

In cazul meu, am ales sa creez acest joc pentru a-mi forma o baza in acest tip de aplicație. In viitor aș dori sa evoluez la programarea unor jocuri educative pentru copii. In trecut, la serviciu, am folosit Visual Basic pentru aplicații de tip industrial (o interfața grafica intre operator și mașina).

Deși sunt multe versiuni de Visual Basic accesibile pe piața, Visual Basic 6.0 este standardul din care au fost imbunatațite și dezvoltate versiuni mai noi. Visual Basic 6.0 se preteaza la lucrul pe diferite versiuni ale sistemului de operare Windows.

Acesta este motivul pentru care l-am ales in dezvoltarea aplicației mele.

1.1.2. Mediul Visual Basic [2]

La start, mediul Visual Basic 6.0 va afișa casuța de dialog prezentata in Figura 1.1.

Figura 1.1. Casuța de dialog in Visual Basic

Poți alege sa creezi un nou proiect, „New project”, sa deschizi un proiect existent deja, sau sa selectezi dintr-o lista de programe deschise recent. [2]

Deși sunt multe tipuri de proiecte care pot fi create, cel mai uzual este proiectul „Standard.exe”

Structura unui proiect Visual Basic se poate vedea in Figura 1.2.

Acesta este compusa din:

spațiu de lucru pentru crearea interfeței aplicației

fereastra de proiect care prezinta fișierele create in aplicația dumneavoastra

fereastra de proprietați care prezinta proprietați ale diferitelor funcții de control și obiecte create in aplicația dumneavoastra

Tot aici se poate vedea și bara de instrumente care consista in toate butoanele de control

necesare pentru crearea unei aplicații Visual Basic (Figura 1.3).

Aceste butoane de control includ ferestre de text (text box), butoane de comanda (command buttons), etichete (labels), ferestre combo (combo box), ferestre de comanda pentru imagini (picture boxes), ferestre de comanda pentru imagini (image boxes), temporizatoare (timers) și alte obiecte care pot fi aduse in fereastra de creare pentru a indeplini anumite cerințe in concordanța cu evenimentele asociate lor.

Figura 1.2. Structura unui proiect Visual Basic

Figura 1.3. Butoane de control in Visual Basic

1.2. Crearea unei aplicații simple utilizand Visual Basic [7]

Pentru crearea unei aplicații simple, se incepe prin a lansa Microsoft Visual Basic. In mod obișnuit, un spațiu de lucru predefinit Form1 va fi afișat pentru crearea unei aplicații noi. [7]

La comanda de dublu clic pe acest Form1 va aparea fereastra care conține codul sursa al acestui Form1. Fereastra de cod se compune dintr-o bara de mesaje imparțita in doua parți. La stanga se gașeste o lista de obiecte, iar in partea dreapta evenimentele asociate acestor obiecte, sau proceduri asociate listei de obiecte.

Figura 1.4 Fereastra de cod inVisual Basic

Pentru a alege obiectele, se acceseaza lista de obiecte. In Figura 1.5 se poate vedea aplicația form, butonul de comanda cu numele „Command1”, eticheta cu numele „Label1” și imaginea cu numele „Picture1”.

Figura 1.5 Aplicația form

Similar, la accesarea prin clic a ferestrei de proceduri, o lista de proceduri asociata cu obiectul Form se afiseaza: Activate, Click, DblClick (Double Click), DragDrop, keyPress etc. Fiecare obiect are setul lui propriu de proceduri. Puteți selecta un obiect și puteți scrie coduri pentru oricare din proceduri pentru a indeplini anumi sarcini.

In exemplul urmator se poate vedea un cod pentru o aplicație simpla, de afișare a unui text. Cum declarațiile de inceput și de sfarșit sunt deja conținute de spațiul de lucru al ferestrei de cod, ramane doar de conceput mesajul pe care dorim sa-l afișam (cu funcția „Print”).

Exemplul 1:

Private Sub Form_Load ()

Form1.show

Print „Mulțumesc pentru atenția acordata licenței mele! Ana Giurea”

End Sub

Figura 1.6 Afișarea unui mesaj la rularea programului

In general, se definesc trei pași in crearea unei aplicații Visual Basic”

Pasul 1: Crearea unei interfețe

Pasul 2: Setarea proprietaților de control (obiecte)

Pasul 3: Scrierea codului de procedura

Capitolul 2. Secvențe de cod in Visual Basic

2.1. Scrierea de cod, informații generale [6]

Pentru a incepe scrierea de cod pentru o procedura event, trebuie mai intai sa accesați obiectul, prin dublu clic. De exemplu,cand accesați prin dublu clic un buton de comanda,fereastra de cod va aparea cu urmatorul cod:

Private Sub Command1_Click

{}

End Sub

Codul programului este facut dintr-un numar de declarații care seteaza proprietați anume sau declanșeaza anumite acțiuni. [6]

Sintaxa prin care se seteaza proprietațile unui obiect sau setarea unor anumite valori acestui obiect este:

Object. Property

De exemplu, declarația Form1.Show inseamna „a se arata (show) aplicația form cu numele Form1”.

Exemplu 1:

Private Sub Command1_click

Label1.Visible=False

Label2.Visible=True

Text1.Text=”Corect”

End sub

Private Sub Command1_click

Label1.Caption=”Buna”

Image1.visible=True

End sub

Private Sub Command1_click

Picture1.Show=True

Timer1.Enabled=True

Label1.Caption=”Incepe numararea”

End sub

In Exemplul 1, prin apasarea butonului de comanda 1, eticheta 1 devine invizibila și eticheta 2 devine vizibila și textul „Corect” va aparea in caseta de dialog Text1.

Prin apasarea butonului de comanda1 a doua oara,acesta va face ca eticheta label1 sa-și schimbe declarația cu „Buna” și Imaginea 1 va deveni vizibila.

Prin apasarea butonului de comanda1 a treia oara, acesta va face sa apara imagiea Picture1,incepe numaratoarea prin timer și eticheta label1 iși schimba starea la „Incepe numararea”.

Sintaxele care nu au nevoie de setarea unor proprietați specifice sunt cele din limba engleza: Print, If…Then…Else…End If, For…Next, Select Case….End Select, End și Exit Sub.

De exemplu, Print ”Visual Basic” face sa apara afișat textul Viual Basic pe ecran și comanda End incheie programul.

2.2. Tipuri de date in Visual Basic [3]

a) Date numerice

Datele numerice sunt compuse din numere, care pot fi compuse prin utilizarea diferitelor variante de operatori standard ca: adunare, scadere, inmulțire, imparțirea ș.a.m.d. In Visual Basic, datele numerice sunt imparțite in 7 tipuri, așa cum se poate vedea in tabelul de mai jos.[3]

Tabelul 1.1. Date numerice

b) Date non numerice

Datele non numerice sunt de tip: boolean, data, string etc. Aceste date de tip non numeric sunt sumarizate in tabelul de mai jos [3]

Tabelul 1.2. Date non numerice

c) Date literale

Tabelul 1.3. Date literale

2.2.1 Lucrul cu variabilele in Visual Basic [8]

In Visual Basic, variabilele sunt arii alocate de catre computer pentru stocarea datelor. Fiecare variabila trebuie denumita. Pentru a denumi o variabila in Visual Basic, trebuie urmate o serie de reguli.

Numele variabilelor

Regulile pentru setarea numelor variabilelor sunt urmatoarele:

– trebuie sa fie mai puțin de 255 de caractere

– nu este permisa existența spațiilor

– nu trebuie ca numele variabilei sa inceapa cu un numar

b) Declararea variabilelor

In Visual Basic, variabilele trebuie declarate inainte de a fi folosite, prin alocarea de nume și tip. Variabilele se pot declara implicit sau explicit.

De exemplu, suma=text1.text inseamna ca variabila suma este declarata implicit și gata sa primeasca un semnal de la casuța de dialog Text1. [8]

Pentru declararea explicita,variabilele sunt declarate in secțiunea generala de cod, folosindu-se comanda Dim.

Dim variableName as DataType

Exemplu: Dim parola As String

Dim total As Integer

Dim date As Date

Asignarea valorilor variabilelor

Dupa declararea variabilelor folosind declarația Dim, putem asigna valori acelor variabile.Forma generala a unui asign este:

Variabila = Expresie

Variabila poate fi o expresie matematica, un numar, un string, o valuare booleana etc. Exemple:

primulNumar = 100

numeUtilizator = „Ana Giurea”

Label1.Visible = True

2.3. Controlling Program Flow

2.3.1. Operatori condiționali [8]

Controlul flow-ului Visual Basic poate fi facut folosind diferiți operatori. Acești operatori sunt instrumente puternice care permit programului Visual Basic sa compare valori ale datelor și sa decida ce acțiune sa indeplineasca prima oara, daca sa execute sau se termine programul etc. [8]

Acești operatori sunt descriși in tabelul de mai jos:

Tabelul 1.4. Operatori condiționali

2.3.2. Operatori logici

In Visual Basic se folosesc și cațiva operatori logici. Aceștia sunt descriși in tabelul de mai jos:

Tabelul 1.5. Operatori logici

2.3.3. Declarațiile „If…..Then…..Elseif….Else” cu operatori

Pentru un control eficient al funcționarii programului Visual Basic, trebuie folosite declarațiile „If…Then…Elseif…Else” impreuna cu operatori logici și operatori condiționali.

Formatul general pentru declarația „If…Then…Elseif…Else” este redat mai jos:

If condiție Then

Visual Basic – expresie

Elseif

Visual Basic – expresie

Else

Visual Basic – expresie

End If

2.3.4. Declarația „Select Case …. End Select” [5]

Pentru mai multe declarații condiționale este mai bine a se folosi declarația Select Case. Prin folosirea declarațiilor „If…Then…Elseif…Else” s-ar crea un șir lung de declarații de program, greu de urmarit. [5]

Structura acestei declarații e descrisa mai jos:

Select Case descriere

Case Value1

Una sau mai multe declarații Visual Basic

Case Value2

Una sau mai multe declarații Visual Basic

Case Value

Una sau mai multe declarații Visual Basic

Case Value

Una sau mai multe declarații Visual Basic

End Select

Capitolul 3. Funcții

3.1. Introducere in funcțiile Visual Basic [5]

Funcțiile sunt similare cu procedurile normale, dar scopul lor este de a accepta anumite intrari și de a returna o valoare care este mai apoi pasata secvenței principale pentru terminarea executarii programului. Sunt doua tipuri de funcții: funcțiile build-in (funcții interne) și funcțiile create de programatori. [5]

Formatul general al unei funcții este:

FunctionName (argumente)

Argumentele sunt valori ce sunt pasate funcției.

3.1.2. Funcția MsgBox ()

Obiectivul funcției MsgBox este acela de a crea o fereastra pop – up și de a atenționa utilizatorul ca este nevoie de operarea unei comenzi prin apasarea unui buton inainte de a continua.

Formatul de MsgBox este descris cum urmeaza:

MsgDumneavoastra = MsgBox(Prompt, Style Value, Title)

Argumentele sunt explicare mai jos:

– Prompt: va afișa mesajul in fereastra de mesaj

– Style Values: determina ce fel de buton de comanda va aparea in fereastra de dialog

– Title: va afișa titlul in fereastra de mesaj.

Tabelul 1.6. Funcția MsgBox

Exemplu: mai jos este exemplificat crearea a trei butoane de comanda și a unei etichete:

Figura 1.7. Fereastra de dialog cu trei butoane și o eticheta

Private Sub Test_Click ()

Dim testmsg As Integer

testmsg = MsgBox(„Click to test”, 1, „Test message”)

If testmsg = 1 Then

Display.Caption = „Testare reusita”

Else

Display.Caption = „Testare nereusita”

End If

End Sub

Daca se da click pe buton, o fereastra de mesaj va aparea,ca cea din Figura 1.8. Cand se apasa „Ok”, mesajul „Testare reușita” va fi afișata, iar la apasarea butonului „Cancel” mesajul „Testare nereușita” va fi afișat.

Pentru a realiza ferestre de mesaj mai sofisticate, se pot adauga și icoane pe langa mesaj. Exista patru tipuri de icoane disponibile in Visual Basic, așa cum este aratat in tabelul 1.7

Tabelul 1.7. Mesaje și icoane folosite in Visual Basic

In acest exemplu, urmatoarea fereastra de mesaj va aparea:

Figura 1.8. Fereastra pop – up creata in Visual Basic

3.1.3. Funcția InputBox () [9]

Funcția InputBox() va afișa o fereastra de mesaj unde utilizatorul poate introduce o valuare sau un mesaj sub forma de text. Forma acestei funcții este:

MesajulMeu = InputBox(Prompt, Title, default_text,x-position, y-position)

MesajulMeu poate fi o variabila de mai multe tipuri, dar in mod uzual aceasta este declarata ca string, variabila care accepta intrari date de utilizator. [9]

Argumentele sunt explicate mai jos:

– Prompt: Mesajul afișat in fereastra de intrare

– Title: Titlul in fereastra de intrare

– Default-text: Mesajul standard de afișat

– X-position și y-position: poziționarea in funcție de coordonate a casuței de dialog

Figura 1.9. Buton Ok

Procedura pentru butonul „Ok”:

Private Sub OK_Click ()

Dim userMsg As String

userMsg = InputBox („Care este mesajul dvs?”, Message Entry Form”, „Enter your message here”, 500, 700)

If userMsg<> „” Then

message.Caption = userMsg

Else

message.Caption = „No Message”

End If

End Sub

La apasarea butonului „Ok”, fereastra de dialog aratata in Figura 1.10 va aparea. Dupa ce utilizatorul introduce mesajul și apasa „Ok”, mesajul va fi afișat in fereastra,iar la apasarea butonului „Cancel”, mesajul afișat va fi „No message”.

Figura 1.10. Fereastra de dialog

3.2. Matrici [10]

Cand se lucreaza cu un singur element putem utiliza o singura variabila. Totuși, cand avem de utilizat o lista de elemente asemanatoare, avem nevoie sa declaram o matrice de variabile in loc sa utilizam o variabila pentru fiecare element. De exemplu, daca trebuie sa introducem o suta de nume, in loc sa declaram o suta de variabile, putem declara o matrice.

Prin definiție, o matrice este un grup de variabile de același fel și cu același nume. diferențierea fiecarui element din matrice se face prin folosirea subscripturilor, valoarea de index a fiecaruia, de exemplu nume (1), nume (2),nume (3) etc. [10]

3.2.1. Declararea matricilor [18]

Putem folosi declarațiile „Public” sau „Dim” pentru a declara o matrice, in același mod in care declaram o variabila. Declarația „Public” declara o matrice o matrice ale carei variabile pot fi folosite in tot programul, global, in timp ce declarația „Dim” declara o matrice ale carei variabile pot fi folosite doar local.

Forma generala de declarare a unei matrici este urmatoarea:

Dim arrayNume (subs) as dataType

Public arrayNume (subs) as dataType

„Subs” indica indexul ultimului element din matrice,in loc de numarul elementelor din matrice. Aceasta se intampla deoarece Visual Basic asigneaza un index „0” primului element și nu „1”. De exemplu, Dim carte (9) va declara o matrice careare zece elemente: carte (0), carte (1), carte (2), carte (3), carte(4), carte (5), carte (6), carte (7), carte (8),carte (9).

Adițional, folosind Dim Count (100 to 500) ca Integer, va declara o matrice care consista in elemente incepand de la Count(100) și terminand la Count(500). [18]

Exemplu :

Dim studentName(10) as String

Dim num As Integer

Private Sub addName()

For num = 1 To 10

studentName (num) = InputBox („Introduceți nume student”, „Enter Name”,””,1500,4500)

If studentName (num) <>”” Then

Form1.Print studentName (num)

Else

End

End If

Next

End Sub

Private Sub Start_Click()

Form1.Cls

addName

End Sub

Programul de mai sus accepta date prin introducerea lor intr-o fereastra de dialog.De asemenea, acesta permite introducerea a zece nume o data, dupa apasarea butonului start.

Matricile multidimensionale sunt adesea necesare cand avem de facut programe mai complexe,in special cele cu un numar mare de date. Datele sunt de obicei aranjate in forme tabelare, iar aici se pot folosi matricile tabelare.

Forma de declarare a unei matrici multidimensionale este:

Dim arrayName (num1, num2) as dataType

unde num1 este sufixul primei dimensiuni (linii), iar num2 este sufixul celei de-a doua dimensiuni (coloane).

Capitolul 4. Elemente grafice

4.1. Funcțiile linie și forma (line and shape control) [11]

Elementele grafice sunt parți foarte importante din Visual Basic, deoarece o interfața prietenoasa și atractiva, va incanta utilizatorii. In Visual Basic sunt patru funcții de baza care se pot folosi pentru desenarea elementelor grafice in Visual Basic: funcția linie (line control), funcția forma (shape control), fereastra imagine (image box) și fereastra poza (picture box). [11]

Pentru a desena o linie dreapta, se da clic pe butonul de linie și apoi,in fereastra de desen, se deseneaza linia. Dupa ce se deseneaza aceasta linie, i se pot schimba și caracteristicile: culoare, grosime, și stil, folosindu-se declarațiile BorderColor, BorderWidth, Border Style.

La fel și in cazul desenarii unor forme. Forma standard este un dreptunghi, dar se pot alege și urmatoarele forme: cerc, oval, și dreptunghi cu unghiuri rotunjite, schimband valoarea property de la 0, cum e setata standard pentru dreptunghi, cu 1,2,3,4 sau 5. La fel ca și la linie, se pot seta mai multe caracteristici: culoare, grosime, stil.

Figura 1.10. Ferestre pentru realizarea elementelor grafice

4.2. Funcțiile Image Box și Picture Box [12]

Funcțiile linie și forma sunt folositoare atunci cand trebuie desenate elemente simple. Pentru elemente mai complexe și pentru imbunatațirea afișajului interfeței, trebuie inserate imagini și desene proprii. In Visual Basic sunt definite doua funcții puternice pentru a realiza acest lucru: image box și picture box. [12]

Pentru a incarca o imagine sau o poza, se da clic pe butonul de „picture property” și va aparea o fereastra de control de unde utilizatorul va putea alege de unde sa incarce o imagine. De asemenea, se poate incarca o imagine folosind declarația LoadPicture() și codul urmator:

Image1.Picture = LoadPicture („C:\path name\picture file name”) or

picture1.Picture = LoadPicture („C:\path name\picture file name”)

De exemplu, urmatoarea declarație va incarca poza grape.gif in fereastra image:

Image1.Picture = LoadPicture („C:\My Folder\Visual Basic program\Images\grape.gif)

De asemenea, in Exemplu aratat, de fiecare data cand se va apasa butonul „change pictures”, se pot vedea 3 imagini. La fiecare apasare de buton aceste imagini se vor schimba. Programul folosește funcția Rdn pentru a genera variabile integer random și apoi folosește funcția „LoadPicture” pentru a incarca diferitele poze in fereastra.

Exemplu:

Dim a, b, c As Integer

Private Sub Command1_Click ()

Randomize Timer

a = 3 + Int (Rnd * 3)

b = 3 + Int (Rnd * 3)

c = 3 + Int (Rnd * 3)

If a = 3 Then

Image1 (0).Picture = LoadPicture ("C:\My Folder\VISUAL BASIC

program\Images\grape.gif")

End If

If a = 4 Then

Image1 (0).Picture = LoadPicture ("C:\My Folder\VISUAL BASIC

program\Images\cherry.gif")

End If

If a = 5 Then

Image1 (0).Picture = LoadPicture ("C:\My Folder\VISUAL BASIC

program\Images\orange.gif")

End If

If b = 3 Then

Image1 (1).Picture = LoadPicture ("C:\My Folder\VISUAL BASIC

program\Images\grape.gif")

End If

If b = 4 Then

Image1 (1).Picture = LoadPicture ("C:\My Folder\VISUAL BASIC

program\Images\cherry.gif")

End If

If b = 5 Then

Image1 (1).Picture = LoadPicture ("C:\My Folder\VISUAL BASIC

program\Images\orange.gif")

End If

If c = 3 Then

Image1 (2).Picture = LoadPicture ("C:\My Folder\VISUAL BASIC

program\Images\grape.gif")

End If

If c = 4 Then

Image1 (2).Picture = LoadPicture ("C:\My Folder\VISUAL BASIC

program\Images\cherry.gif")

End If

If c = 5 Then

Image1 (2).Picture = LoadPicture ("C:\My Folder\VISUAL BASIC

program\Images\orange.gif")

End If

End Sub

Figura 1.11. Element grafic

Pentru crearea unui meniu de vizualizare și cautare a imaginilor din calculator este nevoie de funcțiile ComboBox, DriveListBox, TextBox, sa fie introduse in form-ul folosit.

– ComboBox: funcția aceasta afișeaza și valideaza selecția diferitelor tipuri de fișiere

– DriveListBox: permite selecția diferitelor partiții disponibile pe computer

– DirListBox: afișeaza directoarele partiției selectate

– TextBox: afișeaza fișierele selectate

– FileListBox: afișeaza fișierele disponibile

Coduri relevante trebuie scrise pentru a coordona funcțiile de mai sus ca aplicația sa funcționeze corespunzator. Programul trebuie sa urmeze urmatorul fir logic: [12]

Pasul 1. Utilizatorul alege tipul de fișiere pe care vrea sa le afișeze

Pasul 2. Utilizatorul selecteaza partiția care conține fișierele

Pasul 3. Utilizatorul cauta in directoare și subdirectoare pana gasește fișierele dorite. Acestea ar trebui sa fie afișate in FileListBox.

Pasul 4. Utilizatorul selecteaza fișierele dorite și apasa butonul „Show”

Pasul 5. Utilizatorul parasește aplicația prin apasarea butonului „Exit”.

Capitolul 5.Crearea aplicațiilor multimedia [18]

In Visual Basic se pot crea și aplicații multimedia care pot reda CD-uri audio, diferite fișiere audio și mp3, wav, și midi; diferite fișiere video de genul avi, mpeg etc. [18]

Pentru ca in cadrul jocului prezentat in lucrarea de licența s-a folosit ca redare audio un fișier de tip wav, doar noțiunea de interfața CD audio va fi explicata.

In acest program, se vor insera cinci butoane ca și etichete: „Play, Next, Previous, Stop și Exit”. De asemenea se va introduce și o eticheta unde se va afișa numarul melodiei curente.

Cea mai importanța declarație in acest program este setarea deviceului CDAudio:

MMControl1.DeviceType = „CDAudio”

Pentru afișarea numarului curent al melodiei, se folosește declarația:

trackNum.Caption = MMControl1.Track

Comenzile „Play, Previous și Stop” sunt create cu declarația:

MMControl1.Command = „Play”,

MMControl1.Command = „Next”,

MMControl1.Command = „Prev”,

MMControl1.Command = „Stop”.

In ultimul rand, trebuie asigurat ca Microsoft Media Control se inchide cand utilizatrorul inchide CD playerul.

Programul este descris mai jos:

Private Sub Form_Load ()

'To position the page at the center

Left = (Screen.Width – Width) \ 2

Top = (Screen.Height – Height) \ 2

End Sub

Private Sub Form_Activate ()

'Load the CDPlayer

MMControl1.Notify = False

MMControl1.Wait = True

MMControl1.DeviceType = "CDAudio"

MMControl1.Command = "Open"

End Sub

Private Sub MMControl1_StatusUpdate ()

'Update the track number

trackNum.Caption = MMControl1.Track

End Sub

Private Sub Next_Click ()

MMControl1.Command = "Next"

End Sub

Private Sub Play_Click ()

MMControl1.Command = "Play"

End Sub

Private Sub Previous_Click ()

MMControl1.Command = "Prev"

End Sub

Private Sub Stop_Click ()

MMControl1.Command = "Stop"

End Sub

Private Sub Exit_Click ()

MMControl1.Command = "Stop"

MMControl1.Command = "Close"

End

End Sub

Private Sub Form1_unload ()

‘Unload the CDPlayer

MMControl1.Command = "Close"

End Sub

Figura 1.12. CD player creat in Visual Basic

5.2. Animațiile [17]

Deși Visual Basic nu este capabil sa dezvolte animații avansate, se pot crea totuși animații interesante. Cea mai simpla metoda de a crea o animație este prin a seta proprietațile unui set de imagini sau texte și etichete in True și False prin declanșarea unui set de evenimente ca de exemplu clic stanga mouse. [17]

Exemplu: Urmatorul program creaza imaginea unui avion care se mișca in patru direcții: Nord, Sud, Est, Vest. Pentru a realiza acest lucru, trebuie inserate cinci imagini ale aceluiași obiect in fereastra de lucru. Se seteaza imaginea din centru ca fiind True și celelalte False. La pornire, utilizatorul va vizualiza doar imaginea din centru. In pasul urmator, se introduc patru butoane de comanda in fereastra de lucru și se seteaza etichetele cu Muta Nord, Muta Est, Muta Vest, Muta Sud.

Codul este prezentat mai jos:

Private Sub Command1_Click()

If Text1.Text = "n" Then

Image1.Visible = False

Image3.Visible = True

Image2.Visible = False

Image4.Visible = False

Image5.Visible = False

ElseIf Text1.Text = "e" Then

Image1.Visible = False

Image4.Visible = True

Image2.Visible = False

Image3.Visible = False

Image5.Visible = False

ElseIf Text1.Text = "w" Then

Image1.Visible = False

Image3.Visible = False

Image2.Visible = False

Image4.Visible = False

Image5.Visible = True

ElseIf Text1.Text = "s" Then

Image1.Visible = False

Image3.Visible = False

Image2.Visible = True

Image4.Visible = False

Image5.Visible = False

End If

End Sub

Prin apasarea succesiva a butoanelor, starea imaginilor se va seta din False in True, creind astfel impresia ca avionul s-a mișcat.

Figura 1.13. Alicație multimedia in Visual Basic

Un alt tip interesant de animație este cel in care acțiunea se termina ciclic, de exemplu – bataia

aripilor unui fluture.

Pentru a realiza acest exemplu, este nevoie de opt imagini ale fluturelui cu aripile in diferite

stadii de deschidere. Aceste imagini trebuie suprapuse, prima imagine fiind vizibila (True) și celalalte nu (False) la pornire. Se creaza un buton de comanda denumit „Animate”. Prin folosirea proprietaților : image.visible = true și image.visible=false, sau If…then, se obține urmatoarea animație. [18]

Codul pentru aceasta animație este:

Private Sub Command1_Click ()

If Image1.Visible = True Then

Image1.Visible = False

Image2.Visible = True

ElseIf Image2.Visible = True Then

Image2.Visible = False

Image3.Visible = True

ElseIf Image3.Visible = True Then

Image3.Visible = False

Image4.Visible = True

ElseIf Image4.Visible = True Then

Image4.Visible = False

Image5.Visible = True

ElseIf Image5.Visible = True Then

Image5.Visible = False

Image6.Visible = True

ElseIf Image6.Visible = True Then

Image6.Visible = False

Image7.Visible = True

ElseIf Image7.Visible = True Then

Image7.Visible = False

Image8.Visible = True

ElseIf Image8.Visible = True Then

Image8.Visible = False

Image1.Visible = True

End If

End Sub

Figura 1.14. Animație „Fluture” in Visual Basic

Un alt tip de animație este cel care utilizeaza metoda Move. Sintaxa este urmatoarea:

Object.Move x,y

unde x este distanța de la stanga ecranului și y este distanța de la partea superioara a ecranului. De exemplu, declarația Image1.Move 1000, va muta imaginea la 1000 pixeli distanța de marginea stanga și 1000 de pixeli de marginea superioara a ecranului.

Urmatorul exemplu va muta o imagine la locația cu coordonatele (1000, 1000) la primul clic și lafel la fiecare clic aceasta imagine se va muta la 100 pixeli de marginea stanga și 100 de pixeli de marginea superioara.

Private Sub Image1_Click()

Image1.Move 1000 + x, 1000 + x

x = x + 100

End Sub

Capitolul 6. Aplicația de tip joc

6.1. Scurta introducere

Aplicația dezvoltata, subiectul acestei lucrari de licența, este un joc simplu, structurat pe diferite nivele de dificultate.

Jocul are trei module. Aplicația consista in existența unui pion și a unui sau mai multor „inamici”, urmaritori.

Primul modul consista in necesitatea colorarii spațiilor libere din labirint, in timp ce un personaj negativ te urmarește, iar contorul inregistreaza timpul petrecut pentru colorare. Daca urmaritorul ajunge langa personaj, jocul se termina.

Al doilea modul este mai complicat, prin existența mai multor urmaritori. Aceștia au diferite viteze și diferite logici de program (cel mai lent dintre ei se mișca aleator pe planșa, urmatorul este setat a gasi personajul și restul au diferite logici de urmarire, incercand sa ajunga la coordonatele personajului)

In fiecare joc controlul jucatorului se face in felul urmator:

– mișcare la stanga: litera „A”

– mișcare la dreapta: litera „S”

– mișcare sus: litera „W”

– mișcare jos: litera „Z”

In fiecare joc, pionul care trebuie mutat, are o infațișare diferita, și este in mișcare. (mișcarea se realizeaza prin rotirea unor imagini – 8, intr-un interval de timp dat: se realizeaza prin timer1_timer).

a) Joc1

Scopul este de a parcurge toata planșa (spațiile parcurse schimba culoarea). In acest timp adversarul (PC-ul) are la dispoziție un urmaritor, care la primul nivel este destul de lent și nu are multa logica in cod (se deplaseaza mai mult aleator). Un alt adversar este timpul: este necesara parcurgerea planșei in timpul indicat de contorul din stinga jos (in program este realizat de Timer4_Timer). Odata cu trecerea nivelelor, atit viteza cit și logica adversarului sporesc. (toate planșele au alte trasee, și alte imagini, atit pentru spatiile libere de parcurs, cit și spatiile care reprezinta ziduri, cit și traseul care a fost parcurs/colorat.)

b) Joc 2

Este varianta cea mai avansata: aici sunt 4 adversari, de la cei mai lenți și fara logica pina la cel mai rapid care poseda și o logica superioara.

Aceasta logica se refera la urmatorul aspect:

planșa este de forma unei matrici (indici x si y): Ax,y ,unde x=0 la 15, y=0 la 15.

Daca poziția curenta a jucatorului propriu este A(3,5) , iar a adversarului B(3,8), atunci aceasta logica verifica Xb=Xa=3,deci in coordonate X se afla pe aceeși linie; (Yb=8) > (Ya=5), deci prima mișcare pe care o face adversarul este de a sari un pas in minus pe coordonata Y.

Acum acesta are noile coordonate:B(3,7).

Logica se reia, iar daca jucatorul nostru nu a fost mutat in continuare urmeaza un pas in minus pe coordonata y, deci noile coordonate sunt: B(3,6).

Mișcarea se face cu un timer: Timer2_Timer.

In partea de program se selecteaza tipul de logica folosita de adversar (prin funcțiile denumite move_enemy_novice, move_enemy_intermediate, move_enemy_advanced, move_enemy_advanced2).

Select Case nivel

Case „novice”

move_enemy_novice

Case „intermediate”

move_enemy_intermediate

Case „advanced”

move_enemy_advanced

Case „advanced2”

move_enemy_advanced2

Case Else

move_enemy_novice

End Select

Toate planșele conțin codul complet, se selecteaza doar funcția. In cazurile planșelor cu mai mulți adversari, exista aceasta logica pentru fiecare dintre ei.

c) Joc3

Este un joc in care trebuie din nou parcursa toata planșa. Acesta este dedicat folosirii de catre copii pentru dezvoltarea spiritului de observație și orientare. Aici nu exista urmaritori, nici timp limita, dar provocarea este de parcurgere a planșei fara intoarcere (nu se poate reveni pe o casuța anterioara): exista riscul ca jocul sa se blocheze. Daca planșa este terminata, trecem la urmatorul nivel. (in acest pachet se afla 10 planșe pentru acest tip de joc).

6.2. Paginile jocului

Pagina de pornire a aplicației este prezentata in Figura 1.15.

Figura 1.15. Pagina de pornire a aplicației „Joc”

Interfața este compusa din

Butoanele „Joc1”, „Joc2”, „Joc3” pentru alegerea nivelurilor de joc

Butonul „Exit” pentru ieșirea din aplicație

Butoanele pentru stop / start muzica

Eticheta de afișare a datei și orei

Eticheta de selecție a jucatorului

Codul pentru butoanele selecție joc este compus dintr-o declarație standard pentru butoane in Visual Basic:

Public x As intro

Dim asciitemp As Integer

Dim asciitemp1

Dim acum As Date

Dim datab As Database

Dim dbtraseu_parcurs As Database

Dim dbplayers As Recordset

Dim var As Integer

Dim stop_music As Boolean

Jocul 2 este mai complex, avand mai mulți jucatori tip „enemy”, cu viteze mai mari, cu intrari/ieșiri in zid și existența unui cub pe care pionul poate sa-l mute,dar adversarii nu.

In cele ce urmeaza, se va exemplifica codul pentru aceste elemente.

Jocul 1 și Jocul 3 au elemente mai puține, iar aceste elemente vor fi acoperite de explicațiile pentru Jocul 2.

6.2.1 Definirea dimensiunilor planșei de lucru

Pentru definirea dimensiunilor planșei se definesc urmatoarele variabile:

'numar max de coloane pe x și pe y

Const maxx = 16

Const maxy = 16

Aceasta secțiune conține constantele aferente numarului maxim de poziții alocate planșei.

Pentru desenarea planșei se folosesc matricele de variabile boolean:

'matrici pentru definire cimpuri

Dim liber(maxx – 1, maxy – 1) As Boolean

Dim colorat(maxx – 1, maxy – 1) As Boolean

Dim pietricele(maxx – 1, maxy – 1) As Boolean

Dim special(maxx – 1, maxy – 1) As Boolean

Dimensiunile planșei de joc s-a scris codul:

'dimensiuni plansa joc – cod

Me.Width = xplansa1 + (xstep / 8)

Me.Height = yplansa1 + ystep + ystep.

6.2.2. Definirea pozițiilor pionului și a adversarilor

Pentru definirea pozițiilor pionilor se definesc urmatoarele variabile:

'poziție curenta player1

Dim xpos, ypos As Integer,

Poziția curenta a pionului se stabilește in urma acționarii tastelor sus, jos, stinga dreapta (alese literele mici w,z,a,s) și sunt reprezentate prin numerele intregi xpos și ypos.

Codul este format din :

'poziție curenta enemy

Dim xen, yen As Integer

'poziție curenta enemy2

Dim xen2, yen2 As Integer

'poziție curenta enemy3

Dim xen3, yen3 As Integer

'poziție curenta enemy4

Dim xen4, yen4 As Integer,

Pentru memorarea pozițiilor anterioare parcurse, se definesc variabilele folosite pentru pozițiile x respectiv y pentru toți cei 4 urmaritori.

Dim xenback, yenback As Integer

Dim xenback2, yenback2 As Integer

Dim xenback3, yenback3 As Integer

Dim xenback4, yenback4 As Integer,

Sunt stabilite variabilele care memoreaza in fiecare pas al programului poziția anterioara a celor 4 urmaritori. Acestea se folosesc pentru a reactualiza poziția curenta a fiecaruia dintre urmaritori in cazul in care au trecut pe o poziție interzisa (adica o poziție in afara planșei: x>15 sau y>15, unde x are valori intre 0,15 iar y intre 0,15 sau o poziție care are un zid: acestea sunt diferite in fiecare planșa și joc, și sunt descrise la incarcarea formei respective Form Load). Deci daca un jucator a trecut pe o poziție interzisa, se reincarca poziția anterioara.

La fel exista și pentru propriul pion poziții anterioare, tot pentru revenire in caz de depașire dimensiune planșa sau trecerea pe o poziție interzisa:

'variabile pentru revenire pe poz anterioara, și colorare poz anterioara

Dim xback, yback

Variabila liber(x,y) se refera la cimpurile permise pentru deplasarea tuturor jucatorilor, variabilele Dim colorat(x , y) se folosesc pentru culori date cimpurilor deja parcurse de propriul jucator, pietricele(x , y) se folosesc pentru cimpurile ce conțin zid, iar special (x , y) pentru cubul care poate fi mutat de propriul jucator, dar nu și de adversari.

In partea Private Sub Form_KeyPress(KeyAscii As Integer) se afla și definirea tastelor folosite pentru deplasarea pionului (aceasta secțiune este activata de Visual Basic in momentul acționarii unei taste):

xback = xpos

yback = ypos

s1 = KeyAscii

Label1 = s1

z=122 jos

y=121 –pentru tastatura germana!

If s1 = 122 Or s1 = 121 Then

ypos = ypos + 1

If ypos > maxy – 1 Then

ypos = maxy – 1

change_position = False

End If

Rezolvarea sau pierderea unuia dintre nivelele jocului este data de variabilele:

'variabila pentru sfirșit ai ciștigat

Dim sfirsit As Boolean

'variabila pentru pierdut planșa – revenire meniu principal

Dim pierdut As Boolean

'constanta pentru pierderea jocului de player1

Const tsec = 100

Reprezinta constanta folosita pentru timerul in secunde care daca este depasit reprezinta pierderea jocului.

Funcția avand codul:

Function jump1(x, y)

jump = True

If xpos = 0 Then

xpos = 15

Else

xpos = (x + maxx – 1) Mod (maxx – 1)

End If

ypos = (y + maxy / 2) Mod maxy

End Function

reprezinta funcția speciala folosita la saltul din partea stinga sus spre dreapta jos, respectiv invers, și stinga jos spre dreapta sus respectiv invers.

Aceasta este folosita in interiorul programului, in partea Private Sub Form_KeyPress(KeyAscii As Integer) cu codul:

'perfectare salt conform desen de pe sageți

If (xpos = 0 And ypos = 4) Or _

(xpos = 15 And ypos = 4) Or _

(xpos = 0 And ypos = 12) Or _

(xpos = 15 And ypos = 12) Then

temp = jump1(xpos, ypos)

End If

Unde sunt și definite pozițiile de salt:

1. x=0,y=4

2. x=15,y=4

3. x=0,y=12

4. x=15,y=12.

Acestea se folosesc doar pentru jucatorul propriu; adversarii nu pot efectua saltul, trebuie sa urmeze traseul complet pentru deplasare.

Planșa are coordonatele (0,0) in colțul stinga sus, coordonatele (x,y)=(15,0) in colțul dreapta sus și (15,15) in dreapta jos.

Tot in partea Private Sub Form_KeyPress(KeyAscii As Integer) se afla și definirea tastelor folosite pentru deplasarea pionului (aceasta secțiune este activata de Visual Basic in momentul acționarii unei taste):

xback = xpos

yback = ypos

s1 = KeyAscii

Label1 = s1

'z=122 jos

'y=121 –pentru tastatura germana!

If s1 = 122 Or s1 = 121 Then

ypos = ypos + 1

If ypos > maxy – 1 Then

ypos = maxy – 1

change_position = False

End If

If pietricele(xpos, ypos) = True And change_position Then

If ypos + 1 < maxy Then

If liber(xpos, ypos + 1) Then

pietricele(xpos, ypos) = False

pietricele(xpos, ypos + 1) = True

move_brick_by_player1 = True

Picture4(0).Top = Picture4(0).Top + ystep

Else

xpos = xback

ypos = yback

End If

End If

End If

End If

'––-

'w=119 up

If s1 = 119 Then

ypos = ypos – 1

If ypos < 0 Then

ypos = 0

change_position = False

End If

'––-

'

If pietricele(xpos, ypos) And change_position Then

If ypos >= 0 Then

If liber(xpos, ypos – 1) Then

pietricele(xpos, ypos) = False

pietricele(xpos, ypos – 1) = True

move_brick_by_player1 = True

Picture4(0).Top = Picture4(0).Top – ystep

Else

xpos = xback

ypos = yback

End If

End If

End If

End If

'–––

'a=97 stinga

If s1 = 97 Then

xpos = xpos – 1

If xpos < 0 Then

xpos = 0

change_position = False

End If

If pietricele(xpos, ypos) And change_position Then

If xpos – 1 >= 0 Then

If liber(xpos – 1, ypos) Then

pietricele(xpos, ypos) = False

pietricele(xpos – 1, ypos) = True

move_brick_by_player1 = True

Picture4(0).Left = Picture4(0).Left – xstep

Else

xpos = xback

ypos = yback

End If

End If

End If

End If

'–––

's=115 dreapta

If s1 = 115 Then

xpos = xpos + 1

If xpos > maxx – 1 Then

xpos = maxx – 1

change_position = False

End If

'

If pietricele(xpos, ypos) And change_position Then

If xpos + 1 < maxx Then

If liber(xpos + 1, ypos) Then

pietricele(xpos, ypos) = False

pietricele(xpos + 1, ypos) = True

move_brick_by_player1 = True

Picture4(0).Left = Picture4(0).Left + xstep

Else

xpos = xback

ypos = yback

End If

End If

End If

End If

'–––

'daca casuța respectiva nu este libera(adica conține zid,'atunci nu se poate trece pe ea

If liber(xpos, ypos) = False Then

xpos = xback

ypos = yback

End If

Codul :

xback = xpos

yback = ypos

reinițializeaza pozițiile anterioare inaintea executarii urmatoarei mișcari.

Variabila s1 = KeyAscii este folosita pentru determinarea codululi ascii al tastei activate.

Tastarea literei z (respectiv y in cazul folosirii tastaturii germane) este data de urmatoarea secvența de program:

'z=122 jos

'y=121 –pentru tastatura germana!

If s1 = 122 Or s1 = 121 Then

ypos = ypos + 1,

care modifica poziția curenta ypos=ypos+1.

Dupa cum se vede poziția anterioara a ramas yback (folosita in cazul unei incercari de poziționare pe un cimp interzis: fie zid, fie depașire numar maxim sau minim poziție curenta planșa, cum a fost descris anterior).

Verificarea corectitudinii poziției maxime se face in urmatoarele linii:

If ypos > maxy – 1 Then

ypos = maxy – 1

change_position = False

End If

In secțiunea:

If pietricele(xpos, ypos) = True And change_position Then

xpos = xback

ypos = yback

End If

Se face reactualizarea pe poziția anterioara a pionului daca poziția incercata de a fi executata definește un zid.

La fel și codul:

'daca casuța respectiva nu este libera(adica conține zid) atunci nu se poate trece pe ea

If liber(xpos, ypos) = False Then

xpos = xback

ypos = yback

End If.

Tot in secțiunea Private Sub Form_KeyPress(KeyAscii As Integer) se afla si comanda:

colorat(xpos, ypos) = True.

Aceasta este situata dupa toate verificarile, și dupa ce poziția noua (xpos,ypos) este confirmata (adica este o mutare legala din punct de vedere al jocului). Instrucțiunea coloreaza poziția respectiva.

Funcția move_brick_by_player1 muta cutia de catre jucatorul propriu in condițiile acceptate de grafica planșei, și blocheaza trecerea sau mutarea acesteia de catre toți adversarii. Aceasta este inca o forma ajutatoare creata pentru propriul jucator in cel mai greu joc din colecție (alaturi de salturile indicate de sageți care nu pot fi urmate de adversari).

6.2.3. Definirea traseului și a zidurilor

In secțiunea Private Sub Form_Load() se incarca toate datele/variabilele/obiecte folosite in planșa curenta.

De exemplu:

sfirsit = False

pierdut = False

theend = False

'inițializare: totul e liber si necolorat: urmeaza desenarea zidurilor

For ilib = 0 To maxx – 1

For jlib = 0 To maxy – 1

liber(ilib, jlib) = False

colorat(ilib, jlib) = False

pietricele(ilib, jlib) = False

special(ilib, jlib) = False

Next jlib

Next ilib

Dupa aceasta inițializare a planșei, cu o forma complet libera, se incarca traseul pentru planșa respectiva:

'desenare traseu: necesar doar stabilire ce este zid!

liber(0, 2) = True

liber(1, 2) = True

liber(1, 3) = True

liber(1, 4) = True

……..

Variabila tip matrice de intreg cu 2 dimensiuni, liber(x,y) este activa pe 0, adica casuța este libera daca liber(x,y)=false. (in cazul true se afla un zid in poziția respectiva).

Secțiunea urmatoare, tot din Private Sub Form_Load() incarca pozele pentru adversari, și stabilește parametrii acestora :

'inițializare poze:

Dim cntpict3 As Integer

'enemy1

Picture9.Height = Picture3(0).Height

Picture9.Width = Picture3(0).Width

Picture9.AutoSize = False

Picture9.AutoRedraw = False

Picture9 = LoadPicture("c:\game1\enemy.jpg")

'enemy2

Picture5.Height = Picture3(0).Height

Picture5.Width = Picture3(0).Width

Picture5.AutoSize = False

Picture5.AutoRedraw = False

Picture5 = LoadPicture("c:\game1\enemy2.jpg")

'enemy3

Picture7.Height = Picture3(0).Height

Picture7.Width = Picture3(0).Width

Picture7.AutoSize = False

Picture7.AutoRedraw = False

Picture7 = LoadPicture("c:\game1\enemy3.jpg")

'enemy4

Picture8.Height = Picture3(0).Height

Picture8.Width = Picture3(0).Width

Picture8.AutoSize = False

Picture8.AutoRedraw = False

Picture8 = LoadPicture("c:\game1\enemy4.jpg")

6.2.4. Elemente de grafica (imagini, poze)

Incarcarea pozelor pentru propriul jucator, care este format dintr-o secvența de 8, este data de:

(Picture3(j1) reprezinta o matrice de imagini, cu cele 8 descrise cu i de la 0 la7)

'player1:

For j1 = 0 To 7

Picture3(j1).Top = ypos * ystep

Picture3(j1).Left = xpos * xstep

Picture3(j1).Visible = False

Next j1

Picture3(0) = LoadPicture("c:\game1\player10.jpg")

Picture3(1) = LoadPicture("c:\game1\player11.jpg")

Picture3(2) = LoadPicture("c:\game1\player12.jpg")

Picture3(3) = LoadPicture("c:\game1\player13.jpg")

Picture3(4) = LoadPicture("c:\game1\player14.jpg")

Picture3(5) = LoadPicture("c:\game1\player15.jpg")

Picture3(6) = LoadPicture("c:\game1\player16.jpg")

Picture3(7) = LoadPicture("c:\game1\player17.jpg").

Incarcarea pozelor pentru desenarea traseului se face folosind urmatorul artificiu: Picture4(ilib + jlib * maxy) reprezinta o matrice unidimensionala de imagini, folosita pentru pozițiile (x,y), definite ca x+y* maxy, petru a parcurge toata planșa fiind necesare x*y matrici unidimensionale (nu se pot folosi matrici bidimensionale de imagini in Visual Basic ).

' pentru liber-pozaA iar pentru liber=FALSE pozaB

For ilib = 0 To maxx – 1

For jlib = 0 To maxy – 1

Picture4(ilib + jlib * maxy).Visible = False

If liber(ilib, jlib) = False Then

'incarcare doar pentru cimpurile ocupate, adica liber(x,y)=FALSE, adica "zid"

Picture1(ilib + jlib * maxy).AutoSize = True

Picture1(ilib + jlib * maxy).AutoRedraw = False

'incarcare poza pentru ziduri

Picture1(ilib + jlib * maxy) = LoadPicture("c:\game1\zid2_2.jpg")

Else

Picture1(ilib + jlib * maxy) = LoadPicture("c:\game1\liber2_2.jpg")

End If

Next jlib

Next ilib

Sunt 2 avantaje in folosirea astfel a Visual Basic (adica pozele sunt toate incarcate in form load, și nu in timpul parcurgerii programului, iar dimensionarea se face din linii de comanda și nu din desenarea in forma grafica a planșei):

programul ruleaza mai rapid (altfel la fiecare deplasare a unuia din pionii, propriu sau adversar programul ar aștepta incarcarea pozei). Astfel este un timp aferent de incarcare, vizibil și la pornirea jocului 3 din meniul intro.

modificari ulterioare se pot face direct din cod (dimensiuni, poziții, relații intre dimensiuni ale diferitelor obiecte, ș.a.m.d.).

Activarea folosiri tastaturii din linie de comanda se realizeaza cu codul aflat tot in Private Sub Form_Load():

'activare tastatura!

Me.KeyPreview = True.

Inițializarea pozițiilor tuturor casuțelor se face cu bucla dubla, dupa j și i (Picture1(act).Left = i * xstep, Picture1(act).Top = j * ystep):

'bucla for j, for i pentru inițializare poziții picture1(act), adica unitatea de desenare

For j = 0 To 15

For i = 0 To 15

act = 16 * j + i

Picture1(act).Left = i * xstep

Picture1(act).Width = xstep

Picture1(act).Height = ystep

Picture1(act).Top = j * ystep

Next i

Next j.

Dimensiunile sunt fixate de

Picture1(act).Width = xstep

Picture1(act).Height = ystep

Pozițiile de salt descrise anterior sunt date de:

special(0, 4) = True

special(0, 12) = True

special(15, 4) = True

special(15, 12) = True

Picture6(0) = LoadPicture("c:\game1\jumpst1.jpg")

Picture6(4) = LoadPicture("c:\game1\jumpst2.jpg")

Picture6(5) = LoadPicture("c:\game1\jumpdr1.jpg")

Picture6(6) = LoadPicture("c:\game1\jumpdr2.jpg")

Picture6(0).Top = 4 * ystep

Picture6(0).Left = 0

Picture6(4).Top = 12 * ystep

Picture6(4).Left = 0

Picture6(5).Top = 12 * ystep

Picture6(5).Left = 15 * xstep

Picture6(6).Top = 4 * ystep

Picture6(6).Left = 15 * xstep

For act = 0 To 6

Picture6(act).Width = xstep

Picture6(act).Height = ystep

Picture6(act).Visible = True.

Cutia (pietricele) poate fi mutata este incarcata astfel:

'incarca poza pentru pietricele!

Picture4(0).Top = 5 * ystep

Picture4(0).Left = 5 * xstep

Picture4(0).AutoSize = True

Picture4(0).AutoRedraw = False

Picture4(0) = LoadPicture("c:\game1\brick.jpg")

Picture4(0).Visible = True

Instrucțiunile de tip Picture4(0) = LoadPicture("c:\game1\brick.jpg") folosite in cadrul programului permit o flexibilitate, adica se pot modifica direct desenele fara afectarea codului programului.

Blocarea mutarii cutiei pe o casuța ce conține zid se face cu:

'intercondiționare:unde este zid, nu pot exista pietricele!!!!

For ilib = 0 To maxx – 1

For jlib = 0 To maxy – 1

If liber(ilib, jlib) = False Then

pietricele(ilib, jlib) = False

End If

Next jlib

Next ilib.

Comanda executata la terminarea codului VB aferent plansei in curs:

Private Sub Form_Terminate()

Set x = intro

x.Hide

Set x = Nothing

Programele propriu zise ruleaza prin timere.

In timer1, se afla și schimbarea pozei propriului jucator (intre cele 8, simuleaza o animație, curent sunt doar 2 desene suprapuse peste cele 8 poze, se poate dezvolta doar prin desenare):

Private Sub Timer1_Timer()

'face schimbarea intre imaginile lui player1, adica animația!

'face toate imaginile pentru player 1 invizibile

For j1 = 0 To 7

Picture3(j1).Top = ypos * ystep

Picture3(j1).Left = xpos * xstep

Picture3(j1).Visible = False

Next j1

'imaginea curent vizibila

Picture3(i1).Visible = True

i1 = i1 + 1

'revenire la prima poza

If i1 = 8 Then

i1 = 0

End If

Prima data cu bucla For j1 = 0 To 7 se seteaza poziția desenelor, peste cea curenta și se seteaza toate pozele invizibile:

Picture3(j1).Visible = False.

Doar poza curenta este vizibila:

Picture3(i1).Visible = True

Instrucțiunea i1 = i1 + 1 seteaza ca poza curenta urmatoarea poza. (adica pentru urmatoarea parcurgere a timerului 1).

Este necesara și o verificare de depașire numar poze maxim:

'revenire la prima poza

If i1 = 8 Then

i1 = 0

End If,

care genereaza o revenire la prima poza in cazul depașirii.

'coloreaza spațiile trecute de pion

Dim icol, jcol

For icol = 0 To maxx – 1

For jcol = 0 To maxy – 1

If colorat(icol, jcol) = True Then

Cum este explicat și de comentariul din interiorul programului, toate pozele sunt incarcate odata cu form load, iar in cadrul programului ele sunt doar activate sau dezactivate cu comada „visible”.

6.2.5. Testarea corecta a funcționarii prin cod

Urmatoarea secțiune a fost folosita la crearea programului, pentru testarea corecta a funcționarii, și modificari:

'labeluri pentru verificare funcționare program

'afișeaza poziția curenta pentru player1 și enemy

'Label1.Caption = colorat(xpos, ypos)

Label2.Caption = xpos

Label3.Caption = ypos

Label6.Caption = xen

Label8.Caption = yen

6.2.6. Rezolvarea / pierderea jocului

Verificarea ciștigarii jocului, adica daca toata planșa a fost parcursa (și implicit colorata) se face cu codul:

'verifica terminarea jocului prin colorarea tuturor spațiilor, adica colorat(x,y)=true pe toata planșa!

Dim cendx, cendy As Integer

Dim nrtot As Integer

nrtot = 0

For cendx = 0 To maxx – 1

For cendy = 0 To maxy – 1

If colorat(cendx, cendy) = True Or liber(cendx, cendy) = False Or special(cendx, cendy) =

True Then

nrtot = nrtot + 1

End If

Next cendy

Next cendx

Label4 = nrtot

sfirsit = ai_cistigat(nrtot)

Bucla care folosește cendx, cendy este pentru a determina numarul total de casuțe parcurse, nrtot. Linia de program sfirsit = ai_cistigat(nrtot) apeleaza funcția ai_cistigat cu parametrul nrtot, numarul total de casuțe parcurse determinat anterior, plus casuțele cu zid și cele speciale.

Private Function ai_cistigat(n As Integer) As Boolean

ai_cistigat = False

If n = maxx * maxy Then

ai_cistigat = True

MsgBox ("Ai cistigat!")

End If

Pierderea jocului aduce cu sine mesajul cu intrebarea daca se dorește reluarea (adica meniul principal), sau daca se dorește incheierea jocului:

If pierdut = True Or theend = True Then

cntend = 0

theend = False

pierdut = False

Timer4.Enabled = False

init_poz

verif = MsgBox("ai pierdut! continuare?", vbYesNo, "mesaj")

If verif <> vbNo Then

Unload Me

Set x = intro

x.Show

Else

Unload Me

End If

End If

Codul urmator:

If verif <> vbNo Then

Unload Me

Set x = intro

x.Show

verifica daca este selectata casuta „No” (fie prin tastatura, fie cu mouseul) și in acest caz se descarca prima data din memorie planșa curenta, și se seteaza x = intro, dupa care este afișata planșa initiala x.Show.

In caz contrar :

Else

Unload Me,

Adica doar se descarca din memorie planșa curenta, deci jocul/aplicația Visual Basic este incheiata in acest caz.

Este necesara de fiecare data, la deschiderea unei alte planșe descarcarea celei active, deoarece in caz contrar aceasta ramine rezidenta in memorie. (in acest caz doar un restart de Windows ar putea elibera memoria RAM).

6.2.7. Mișcarea pionilor pe planșe

Mișcarea primului urmaritor se face cu timerul timer2:

Private Sub Timer2_Timer()

If Not stop_en Then

'–––––––

'mișca enemy cu acest timer, și functie de nivelul selectat

move_enemy_advanced

'––––-

'desenare și pozitionare enemy

Picture9.Top = yen * ystep

Picture9.Left = xen * xstep

Picture9.Visible = True

End If

End Sub

Urmatorul adversar este mutat prin timer 3:

Private Sub Timer3_Timer()

If Not stop_en2 Then

' intotdeauna timer3 trebuie sa fie mai mic, pentru enemy2:

' enemy2 revine pe pozițiile anterioare daca cei 2 enemy se suprapun!

move_enemy_advanced2

'desenare

Picture5.Top = yen2 * ystep

Picture5.Left = xen2 * xstep

Picture5.Visible = True

End If

End Sub

Comentariile sunt necesare in program, acesta fiind lung și destul de complex. Daca se doreste o modificare ulterioara, de exemplu a vitezei unuia din urmaritori, prin modificarea timerului este destul de greu de gasit exact locul necesar modificarii in lipsa comentariilor.

Condițiile ca jocul sa fie pierdut, prin prinderea (poziționarea pe aceeași casuța) de catre adversar, este data de timer6:

Private Sub Timer6_Timer()

'nu este detectabil de ochi!

'condiție pierdut: prins de enemy

If xpos = xen And ypos = yen Then

pierdut = True

End If

'condiție pierdut: prins de enemy

If xpos = xen2 And ypos = yen2 Then

pierdut = True

End If

'condiție pierdut: prins de enemy

If xpos = xen3 And ypos = yen3 Then

pierdut = True

End If

'condiție pierdut: prins de enemy

If xpos = xen4 And ypos = yen4 Then

pierdut = True

End If

Tot odata aici sunt și codurile necesare ca adversarii sa nu ocupe aceeși poziție. (daca da unul din ei este mutat in poziția anterioara, conform codului).

'enemy1 cu 2 nu pot fi pe același punct

If xen = xen2 And yen = yen2 Then

xen2 = xenback2

yen2 = yenback2

End If

'enemy1 cu 2 și cu 3 nu pot fi pe același punct

If (xen = xen3 And yen = yen3) Or _

(xen2 = xen3 And yen2 = yen3) Then

xen3 = xenback3

yen3 = yenback3

End If

'enemy1 cu 2 și cu 3 și cu 4 nu pot fi pe același punct

If (xen = xen4 And yen = yen4) Or _

(xen2 = xen4 And yen2 = yen4) Or _

(xen3 = xen4 And yen3 = yen4) Then

xen4 = xenback4

yen4 = yenback4

End If

End Sub

Adversarul cel mai avansat (viteza, logica) este mișcat conform regulilor date de timer7:

Private Sub Timer7_Timer()

If Not stop_en4 Then

move_enemy_advanced4

'desenare

Picture8.Top = yen4 * ystep

Picture8.Left = xen4 * xstep

Picture8.Visible = True

End If

End Sub

Funcția de mișcare a acestuia este:

Function move_enemy_advanced4()

Dim tempx1

Dim tempx2 As Integer

xenback4 = xen4

yenback4 = yen4

'daca player1 este prins de enemy, enemy sta pe pozitie

If xen4 = xpos And yen4 = ypos Then

Else

'intrebare daca enemy este mai departe pe axa x sau y

If Abs(xpos – xen4) > Abs(ypos – yen4) Then

'intrebare daca miscare e in sens poz sau neg

If xpos > xen4 Then

'enemy merge in sens poz

xen4 = xen4 + 1

Else

''enemy merge in sens neg

xen4 = xen4 – 1

End If

Else

If ypos > yen4 Then

'enemy merge in sens poz

yen4 = yen4 + 1

Else

''enemy merge in sens neg

yen4 = yen4 – 1

End If

End If

End If

'––––––––––––––

'verificare daca enemy nu a ajuns in marginea plansei

If xen4 > 15 Then

xen4 = 15

End If

If xen4 < 0 Then

xen4 = 0

End If

If yen4 > 15 Then

yen4 = 15

End If

If yen4 < 0 Then

yen4 = 0

End If

'––––

'verificare daca poziția viitoare e libera

If Not liber(xen4, yen4) Then

xen4 = xenback4

yen4 = yenback4

'verificare daca poziția de mișcare controlata in caz ca se interpune intre player1 și enemy un spațiu ocupat, adica liber=false

'–

If xen4 <> xpos4 Then

If xen4 + 1 <= 15 Then

If liber(xen4 + 1, yen4) Then

xen4 = xen4 + 1

Else

If xen4 – 1 >= 0 Then

If liber(xen4 – 1, yen4) Then

xen4 = xen4 – 1

End If

End If

End If

End If

End If

'––

'–

If yen4 <> ypos Then

If yen4 + 1 <= 15 Then

If liber(xen4, yen4 + 1) Then

yen4 = yen4 + 1

Else

If yen4 – 1 >= 0 Then

If liber(xen4, yen4 – 1) Then

yen4 = yen4 – 1

End If

End If

End If

End If

End If

End If

If pietricele(xen4, yen4) = True Then

xen4 = xenback4

yen4 = yenback4

End If

End Function.

Capitolul 7. Concluzii

Acest proiect de licența a fost unul interesant din mai multe puncte de vedere.

În primul rând a fost o provocare pentru mine, inițial neavând foarte multe noțiuni despre programarea jocurilor pe calculator.

În al doilea rând am gasit satisfacție în ceea ce am realizat. Această aplicație poate reprezenta un prim pas în posibila mea carieră de dezvoltator.

Aplicația, in stadiul în care se află, nu se compară cu aplicațiile de mare succes. De aceea este necesara dezvoltarea și îmbunătățirea ei, precum și adaptarea acesteia la cerințele utilizatorului.

În perioadă de dezvoltare a acestei aplicații mi-am atins obiectivul principal de a crea aplicația și de a o distribui.

Dezvoltarea aplicației a decurs uniform, fară a întâmpina probleme majore. Cea mai mare incercare a fost insa crearea codului pentru mișcarea pionilor de tip „enemy” din „Joc 2”.

Pe viitor, mi-am fixat un obiectiv personal în vederea continuării dezvoltării acestei aplicații, implementarea unor noi idei și refacerea graficii.

Mi-aș dori dezvoltarea unor jocuri educative pentru copii și a unor jocuri pentru invațarea limbilor straine.

Bibliografie

[1] Liew Voon Kiong, Visual Basic 6.0 Made Easy, [09.05.2013]

[2] Wikipedia, Visual Basic, [08.04.2012]

[3] Visual Basic 6 für Dummies, Taschenbuch: 480 Seiten ,Editura: Wiley-VCH Editura GmbH & Co. KGaA; Auflage: 1. Auflage (1. Januar 2012), ISBN-10: 3527700919 ,ISBN-13: 978-3527700912, [01.01.2012]

[4] Evanghelos Petrousos, Das Visual Basic 6 Buch,Editura: Sybex-Editura GmbH (November 1999)

ISBN-10: 3815570182 ,ISBN-13: 978-3815570180, [09.04.2013]

[5] Walter Doberenz, Visual Basic 6: Kochbuch, Editura: Hanser Fachbuch

ISBN-10: 3446195920,ISBN-13: 978-3446195929, [12.04.2011]

[6] Klaus Löffelmann, Microsoft Visual Basic 2010 – Das Entwicklerbuch: Grundlagen, Techniken, Profi-Know-how , Editura: Microsoft Press; Auflage: 1., Aufl. (22. September 2010),ISBN-10: 3866455356, ISBN-13: 978-3866455351, [22.09.2010]

[7] John Connel, Beginning Visual Basic 6 Database Programming, Editura Wrox Press; Apress, ISBN-13: 9781590592519, ISBN-10: 1590592514 [08.05.2010]

[8] Online Tutorials, http://www.onlinetutorials.de/programmierung/buch-visual-basic/

[9] Michael Halvorson, Microsoft Visual Basic 6.0 – Schritt für Schritt, Microsoft Press Deutschland, ISBN-13: 9781595672519, ISBN-10: 15534592514 [10.05.2012]

[10] Dominique Maniez, Visual Basic 6.0 : Guide du programmeur, Édition : Dunod, ISBN10 : 2100072331- ISBN13 : [anonimizat] [10.05.2013]

[11] John Clark Craig, Jeff Webb, Atelier Visual Basic 6.0, Édition : Dunod,ISBN10 : 2840828588- ISBN13 : 9782840828587, [01.03.2011]

[12] Greg Perry, Le programmeur Visual Basic 6, Édition : Campus Press , ISBN10 : 2744017957- ISBN13 : 9782744017957, [05.04.2010]

[13] Kit de Formation Microsoft Visual Basic 6.0, Microsoft Corporation, Édition : Dunod, ISBN10 : 284082549X- ISBN13 : 9782840825494 [12.04.2013]

[14] Horia Dumitrascu, Sa invatam Basic, Editura Albatros, ISBN10 : 5643017957- ISBN13 : 34784017957, [01.02.2000]

[15] Lucian Vasiu, Aplicatii in Q Basic, Editura Tehnica, ISBN10 : 980017957- ISBN13 : 0045644017957, [05.08.1999]

[16] Felicia Ionescu, Baze de date relationale si aplicatii, Editura Tehnica, ISBN10 : 9521017957- ISBN13 : 222744017957, [01.03.2004]

[17] Microsoft Visual Basic 6.0 – Ghidul Programatorului, Editura Teora, ISBN10 : 6544055957- ISBN13 : 7682884017957, [25.02.2008]

[18] Sandor Kovacs, Programarea interfetelor cu Visual Basic 6.0 – elemente speciale, Editura Albastra, ISBN 973-650-076-4, [18.08.2009]

[19] Finaru Luminita Brav, Visual Basic primii pasi … si urmatorii, Editura Polirom, ISBN 556-679-462-3, [30.09.2001]

[20] Francesco Balena, Programming Microsoft Visual Basic 6.0, Microsoft Corporation, ISBN10 : 2744543957- ISBN13 : 9782778917957 , [15.05.2011]

[21] Michael Halvorson, Microsoft Visual Basic 6 Deluxe Learning Edition, Microsoft Press, ISBN10 : 2744017890- ISBN13 : 978984017957 ,[02.06.2012]

[22] Gary Cornell, Visual Basic 6 from the Ground Up, Editura: Osborne Mcgraw Hill ISBN10 : 2744017890- ISBN13 : 978984017957 ,[05.07.2009]

[23] Ed Koop, Anne Prince, Joel Murach, Murach's Visual Basic 6, Murach, ISBN10 : 2744987890- ISBN13 : 978984017966 ,[03.09.2008]

[24] http://www.visualbasicbooks.com/courses.html

Anexe

Figura 2.1. Visual Basic 6 – programul joc

Figura 2.2. Plansa de lucru – editare

Figura 2.3. Jocul 1 – grafica si mesaj

Figura 2.4 Jocul 2 – grafica

Figura 2.5 – Jocul 3 – grafica

Anexe

Figura 2.1. Visual Basic 6 – programul joc

Figura 2.2. Plansa de lucru – editare

Figura 2.3. Jocul 1 – grafica si mesaj

Figura 2.4 Jocul 2 – grafica

Figura 2.5 – Jocul 3 – grafica

Similar Posts