Microsoft Small Basic

Program Listing: RTV559
GraphicsWindow.Width=400
GraphicsWindow.Height=400

MaakBlokken()

GraphicsWindow.DrawBoundText(10,10,1000,"Sleep een blok met de rechter muisknop")
GraphicsWindow.DrawBoundText(10,25,1000,"Draai een blok met de linker muisknop")


GraphicsWindow.MouseDown=OnMouseDown
GraphicsWindow.MouseMove=OnMouseMove
GraphicsWindow.MouseUp=OnMouseUp



Sub Maakblokken
'we bewaren van drie blokken de positie en de draairichting

For teller=1 To 3
blok[teller]["x"]=Math.GetRandomNumber(200)+50
blok[teller]["y"]=Math.GetRandomNumber(200)+50
blok[teller]["hoek"]=Math.GetRandomNumber(360)

' we kiezen nog een willekeurige breedte en hoogte
w=Math.GetRandomNumber(50)+10
h=Math.GetRandomNumber(50)+10

' maak een shape (onthoud hem in "s" van shape
blok[teller]["s"]=Shapes.AddRectangle(w,h)

' plaats het blok op de juiste plek
Shapes.Move(blok[teller]["s"],blok[teller]["x"],blok[teller]["y"])
'en in de juiste richting
shapes.Rotate(blok[teller]["s"],blok[teller]["hoek"])
endfor

EndSub


Sub OnMouseUp
' down=0
endsub

Sub OnMouseMove
'bewaar de huidige positie van de muis
x=GraphicsWindow.MouseX
y=GraphicsWindow.MouseY

If mouse.IsRightButtonDown then
' slepen
dx=x-startx
dy=y-starty

blok[geselecteerdblok]["x"]=blok[geselecteerdblok]["x"]+dx
blok[geselecteerdblok]["y"]=blok[geselecteerdblok]["y"]+dy
Shapes.Move(blok[geselecteerdblok]["s"],blok[geselecteerdblok]["x"],blok[geselecteerdblok]["y"])

startx=x
starty=y


ElseIf Mouse.IsLeftButtonDown then
' roteren
' bepaal de hoek die bij startx,starty hoort (tov de huidige positie)
' bepaal de hoek die bij x,y hoort (tov de huidige positie)

h1=math.ArcTan((startx-blok[geselecteerdblok]["x"])/(starty-blok[geselecteerdblok]["y"]))
h1=360-math.GetDegrees(h1)
h2=math.ArcTan((x-blok[geselecteerdblok]["x"])/(y-blok[geselecteerdblok]["y"]))
h2=360-math.GetDegrees(h2)

GraphicsWindow.BrushColor="white"

'GraphicsWindow.fillRectangle(10,10,200,50)
'GraphicsWindow.BrushColor="blue"
'GraphicsWindow.DrawBoundText(10,10,100,h1)
'GraphicsWindow.DrawBoundText(10,20,100,h2)

startx=x
starty=y

' blok[geselecteerdblok]["hoek"]=blok[geselecteerdblok]["hoek"]+h2-h1
blok[geselecteerdblok]["hoek"]=h1

' shapes.Rotate(blok[teller]["s"],blok[teller]["hoek"])
shapes.Rotate(blok[geselecteerdblok]["s"],h1)


endif
endsub

Sub OnMouseDown
down=1

'dit zijn x en y-coordinaten van de muis
startx=GraphicsWindow.MouseX
starty=GraphicsWindow.MouseY

'welke blok is het dichtstbij?

geselecteerdblok=0
rmin=99999999999999 'heel groot
For teller=1 To 3
dx=startx-blok[teller]["x"]
dy=starty-blok[teller]["y"]
r=math.SquareRoot(dx*dx+dy*dy)
If r rmin=r
geselecteerdblok=teller
endif
endfor


endsub