While 0=0
UpdateModel()
UpdateFrame()
FrameRate()
EndWhile
'======================================================
'MAIN SUBROUTINES
'======================================================
Sub UpdateModel
'SET SPEED DIRECTION & AXIS
For i = 1 To Array.GetItemCount(ball)
If tY[i] > Y[i] Then
dY[i] = speed
ElseIf tY[i] < Y[i] Then
dY[i] = -speed
EndIf
If tX[i] > X[i] Then
dX[i] = speed
ElseIf tX[i] < X[i] Then
dX[i] = -speed
EndIf
EndFor
'UPDATE POSITION
For i = 1 To Array.GetItemCount(ball)
X[i] = X[i] + dX[i]
Y[i] = Y[i] + dY[i]
EndFor
CollisionWithTarget()
EndSub
Sub UpdateFrame
'UPDATE FRAME
For i = 1 To Array.GetItemCount(ball)
Shapes.Move(ball[i], X[i], Y[i])
EndFor
EndSub
Sub FrameRate
delay = 15 - (Clock.ElapsedMilliseconds - start)
If delay > 0 Then
Program.Delay(delay)
EndIf
start = Clock.ElapsedMilliseconds
EndSub
'==============================================================
'COLLISIONS
'=============================================================
Sub CollisionWithTarget
'WHEN TARGET REACHED - SET NEW TARGET & CANCEL PRIOR AXIS
For i = 1 To Array.GetItemCount(ball)
If tY[i] = Y[i] And dX[i] = 0 Then 'SET X-AXIS TARGET & CANCEL Y-AXIS SPEED
dY[i] = 0
tX[i] = (Math.GetRandomNumber(cols)-1) * gap + origin
EndIf
If tX[i] = X[i] And dY[i] = 0 Then 'SET Y-AXIS TARGET & CANCEL X-AXIS SPEED
dX[i] = 0
tY[i] = (Math.GetRandomNumber(rows)-1) * gap + origin
EndIf
EndFor
EndSub
'DRAW GRID
For r = 0 To rows - 1
For c = 0 To cols - 1
GraphicsWindow.FillRectangle(gap * c + origin, gap * r + origin, gap, gap)
GraphicsWindow.DrawRectangle(gap * c + origin, gap * r + origin, gap, gap)
EndFor
EndFor