Oefening: Timer

De Timer is een object dat niet zichtbaar is in uw programma. Het zorgt er alleen voor dat op vaste tijdstippen een procedure met de naam Timer wordt gestart. De voornaamste eigenschap van de timer is het Interval. Dit is de tijd in milliseconden tussen twee opeenvolgende aanroepen van de procedure Timer.

ØOefening: maak een nieuw project aan met de naam OefTimer bijvoorbeeld. Zet het liefst weer in een aparte map op uw diskette.

ØPlaats een timer-object op een formulier. Waar je hetobject plaatst is niet van belang. Het is bij het uitvoeren van het programma niet zichtbaar. Dit ziet er dan ongeveer als volgt uit:



ØKlik de timer aan en bekijk de eigenschappen in het properties-venster:

Met de eigenschap:

Enabled: kunt u de timer activeren (true) of uitschakelen(false)

Interval: geeft de tijd aan in milliseconden tussen twee timer-events. Als dit nul is is de timer eveneens uitgeschakeld.

ØZet het interval op 1000. De tijd tussen twee events is dan juist één seconde.

ØKlik op het venster met de programmacode. Zorg dat het event Timer1_Timer zichtbaar is en plaats er volgende code in:

ØLaat het programma runnen. Elke seconde verschijnt er het woordje “Tik” op het formulier. 

ØVerander het interval eens in 100 en 5000 en laat het programma opnieuw runnen. 

Laten we dit eens toepassen om een eenvoudig biljartprogramma te schrijven. Een biljartbal tekenen we met de instructie circle (x,y), Straal, kleur

Waarin:x,y de coördinaten zijn van het middelpunt

Straal de lengte van de straal

Kleur de randkleur van de cirkel.

Als u de cirkel wil opvullen, zet dan de eigenschap Fillstyle van het formulier op Solid.

De eigenschap DrawWidth van het formulier bepaalt de breedte van de rand. Geef deze de waarde 1.

De eigenschap Fillcolor bepaalt de opvulkleur. We gaan dit softwarematig instellen zodat we ballen van verschillende kleur kunnen tekenen.

ØGeef de achtergrond van het formulier een mooie donkergroene kleur, zoals een biljart. Doe dit door in het event Form_Load de volgende code te plaatsen:

Private Sub Form_Load()

Form1.BackColor = vbGreenKleur van het biljartlaken

Form1.ForeColor = vbGreen‘Kleur van de cirkelrand

WitX = ScaleWidth / 2‘Midden van het formulier

WitY = ScaleHeight / 2

StapX = 4‘De groottte van de verplaatsing

StapY = 3

Straal = 10

FillColor = vbWhite‘Kleur van de bal

Circle (WitX, WitY), 10, vbWhite

End Sub

ScaleWidthgeeft de breedte van het formulier aan, en ScaleHeight de hoogte. Hierdoor plaatsen we de cirkel (bal) precies in het midden van het formulier.


Pas eveneens volgende eigenschappen van het formulier Form1 aan:

Autoredraw: True.

DrawWidth = 1

FillStyle:Solid

ScaleMode: 3 – pixel

Declareer ook volgende variabelen:

Option Explicit

Private StapX As Integer‘Verplaatsing in de x-richting

Private StapY As Integer‘Verplaatsing in de y-richting

Private WitX As Integer‘X-coordinaat van de witte bal

Private WitY As Integer‘Y-coordinaat van de witte bal

Private Straal as integer ‘Straal van de bal

Wis de intsructie debug.print “Tik” in het event Timer1_Timer.

ØRun het programma:

Mooi, maar nu moeten we de bal nog laten rollen! Hiervoor gaan we gebruik maken van de timer. Bij elke tik van de timer laten we de bal een beetje bewegen in de x-richting en in de y-richting. We plaatsen de grootte van de stap in de variabelen StapX (voor de x-richting) en StapY voor de y-richting.De plaats van de witte bal onthouden we in de variabelen WitX en WitY.

ØPlaats daartoe de volgende code in het timer-event Timer1_Timer:

Private Sub Timer1_Timer()

FillColor = vbGreen'Vaag bal weg door een groene te tekenen

Circle (WitX, WitY), Straal 

WitX = WitX + StapX‘Verplaats de bal

WitY = WitY + StapY

FillColor = vbWhite

Circle (WitX, WitY), Straal ' Teken hem in de nieuwe positie

End Sub

ØZet het interval van de timer op 100 msec

Laat het programma runnen. De bal verplaatst zich mooi, maar….hij kaatst natuurlijk niet terug tegen de band….

Om dit op te lossen moeten we na elke verplaatsing van de bal, gaan testen of hij misschien de rand raakt. Zijn middenpunt bevindt zich dan op een afstand gelijk aan de straal van de band. Als dat gebeurt moeten we de bewegingsrichting StapX, StapY omkeren. StapY als hij tegen de bovenste of onderste lange band komt, en StapX als hij links of rechts de band raakt.

ØProbeer eens of u zelf de nodige programmacode kan schrijven!!!
Als het u iet lukt kunt u hieronder even spieken


Oefening 1: Leg bij het op het veld ergens willekeurig een rode bal. Als de witte bal de rode raakt, moet het programma een MsgBox geven met de vermelding RAAK!!!, en het programma stopt daarna. Bewaar de plaats van de rode bal in de variabelen RoodX en RoodY.

Oefening 2: Stop de witte bal door het klikken op het formulier. Als u opnieuw klikt rolt de witte bal verder.

Broncode

Oefening 3: Zorg ervoor dat de bal stilaan trager rolt, en tenslotte stilvalt.Tip: bij elke timer-tik moeten de waarden van StapX en StapY kleiner worden.
Vraag: gaat het niet evengoed door de timer steeds langzamer te laten tikken? Of is dat minder goed?




Een verder uitgewerkte versie "Drieband" vindt u hieronder. U moet via minstens drie banden de rode bal trachten te raken. De richting van de bal kunt u zelf instellen. De bal loopt stilaan "uit" en valt stil. De stootkracht kunt u niet instellen. Misschien een goede oefening voor de liefhebber om dit aspect erbij te voegen?

Broncode