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
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Dezvoltarea Unei Aplicatii Tip Joc In Visual Basic 6 (ID: 149747)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
