Hi, something like this might get you on the right track. Within the Type you can add other shapes and the mathematical code to achieve "MouseHover" for the current shape. Good luck!
Strict
Global SCREEN_WIDTH = 1400
Global SCREEN_HEIGHT = 900
Graphics SCREEN_WIDTH, SCREEN_HEIGHT
Local target:TTarget = New TTarget
Local score:Int = 0
SeedRnd(MilliSecs())
While Not KeyDown(KEY_ESCAPE)
Cls()
target.Update()
If target.MouseHover() score = score + 1
target.Draw()
SetColor(255, 255, 255)
DrawText(score, 10, 10)
Flip()
Wend
Type TTarget
Field x:Int
Field y:Int
Field shape:Int = 0
Field deadline:Int 'Millisecs when target should move
Field radius:Float = 30.0
Field SHAPE_CIRCLE:Int = 0
Field SHAPE_RECTANGLE:Int = 1
Field SHAPE_TRIANGLE:Int = 2
Method New()
Reposition()
End Method
Method Reposition()
deadline = MilliSecs() + Rand(1000, 5000)
x = Rand(0 + radius, SCREEN_WIDTH - radius)
y = Rand(0 + radius, SCREEN_HEIGHT - radius)
End Method
Method MouseHover:Int()
Select shape
Case SHAPE_CIRCLE
If DistPoints(MouseX(), MouseY(), x, y) < radius Return 1 Else Return 0
Case SHAPE_RECTANGLE
Case SHAPE_TRIANGLE
End Select
EndMethod
Method DistPoints:Float(x1:Float, y1:Float, x2:Float, y2:Float)
Local yDist:Float = Abs(y1 - y2)
Local xDist:Float = Abs(x1 - x2)
Return Sqr(yDist ^ 2 + xDist ^ 2)
End Method
Method Update()
If MilliSecs() > deadline Reposition()
End Method
Method Draw()
SetColor(255, 0, 0)
Select shape
Case SHAPE_CIRCLE
DebugLog("CIRCLE")
DrawOval(x, y, radius, radius)
Case SHAPE_RECTANGLE
Case SHAPE_TRIANGLE
End Select
End Method
EndType
|