Code:

Strict
Graphics 1024,768,32
SetBlend LIGHTBLEND
Global x1:Int=540 'pount 0
Global y1:Int=125 'point 0
Global vx1:Int=200 '1
Global vy1:Int=350 '1
Global x2:Int=420 '2
Global y2:Int=670 '2
Global vx2:Int=700 '3
Global vy2:Int=350 '3
Global StepSetting = .1
Global counter=0
Global point:Int=0
Global MouseWas
Global GridPlot
Global Gridy
Global swap_x1=x1
Global swap_x2=x2
Global swap_vx1=vx1
Global swap_vx2=vx2
Global swap_y1 = y1
Global swap_y2 = y2
Global swap_vy1 = vy1
Global swap_vy2 = vy2
Repeat
Cls
SetColor 130,130,140
DrawLine 100,100,100,700
DrawLine 100,100,800,100
DrawLine 800,100,800,700
DrawLine 800,700,100,700
DrawLine 800,100,900,100
DrawLine 800,700,900,700
DrawLine 900,100,900,700
SetColor 90,90,100
For GridY= 1 To 18
For GridPlot = 1 To 21
Plot (GridPlot*32)+100,(GridY*32)+100
Next
Next
SetColor 215,215,215
Keys()
drawbezier (x1,y1,vx1,vy1,x2,y2,vx2,vy2)
SetColor 200,200,200
DrawText "mouse: "+(MouseX()-100)+","+(MouseY()-100),0,40
SetColor 200,200,200
DrawText "(R)everse (M)irror (F)lip (L)oop",0,70
DrawText "Mouse Wheel Changes Selection - [W][A][S][D] and RIGHT MOUSE move point",250,15
If point=0 Then SetColor 255,255,0 Else SetColor 200,200,200
DrawText "p0 coord: "+(x1-100)+","+(y1-100)+" - Start",0,0
DrawText "0 - Start",x1-2,y1-2
If MouseDown(2) And point=0 Then
x1=MouseX()
y1=MouseY()
EndIf
If point=1 Then SetColor 255,255,0 Else SetColor 200,200,200
DrawText "p1 coord: "+(vx1-100)+","+(vy1-100),0,10
DrawText "1",vx1-2,vy1-2
If MouseDown(2) And point=1 Then
vx1=MouseX()
vy1=MouseY()
EndIf
If point=2 Then SetColor 255,255,0 Else SetColor 200,200,200
DrawText "p2 coord: "+(x2-100)+","+(y2-100)+" - Finish",0,20
DrawText "2 - Finish",x2-2,y2-2
If MouseDown(2) And point=2 Then
x2=MouseX()
y2=MouseY()
EndIf
If point=3 Then SetColor 255,255,0 Else SetColor 200,200,200
DrawText "p3 coord: "+(vx2-100)+","+(vy2-100),0,30
DrawText "3",vx2-2,vy2-2
If MouseDown(2) And point=3 Then
vx2=MouseX()
vy2=MouseY()
EndIf
SetColor 255,255,255
If MouseZ() < MouseWas Then point=(point+1) Mod 4
If MouseZ() > MouseWas Then point=(point-1) Mod 4
If point = -1 point = 3 ; If point = 4 Then point = 0
MouseWas = MouseZ()
Flip
FlushMem
Until KeyDown(KEY_ESCAPE)
End
Function drawbezier (x1,y1,vx1,vy1,x2,y2,vx2,vy2)
counter = 0
SetColor 50,50,100
DrawLine x1,y1,vx1,vy1
DrawLine x2,y2,vx2,vy2
SetColor 255,50,50
For Local t:Float=0 To 1 Step .001
counter:+1
Local pointx:Float = x1*(1-t)^3 + 3*vx1*(1-t)^2*t + 3*vx2*(1-t)*t^2 + x2*t^3
Local pointy:Float = y1*(1-t)^3 + 3*vy1*(1-t)^2*t + 3*vy2*(1-t)*t^2 + y2*t^3
SetColor t*10,00,00
DrawRect pointx,pointy,2,2
SetColor t*1000,t*90,t*90
Plot pointx,pointy
If Counter = Rnd(20,90)
SetColor 50,50,255
Plot pointx,pointy
Counter = 0
EndIf
Next
End Function
Function Keys()
If KeyHit(Key_S)
If point = 0 Then y1:+1
If Point = 1 Then vy1:+1
If Point = 2 Then y2:+1
If Point = 3 Then vy2:+1
EndIf
If KeyHit(Key_W)
If Point = 0 Then y1:-1
If Point = 1 Then vy1:-1
If Point = 2 Then y2:-1
If Point = 3 Then vy2:-1
EndIf
If KeyHit(Key_A)
If Point = 0 Then x1:-1
If Point = 1 Then vx1:-1
If Point = 2 Then x2:-1
If Point = 3 Then vx2:-1
EndIf
If KeyHit(Key_D)
If Point = 0 Then x1:+1
If Point = 1 Then vx1:+1
If Point = 2 Then x2:+1
If Point = 3 Then vx2:+1
EndIf
If KeyHit (Key_M)
swap_x1 = x1
swap_x2 = x2
swap_vx1 = vx1
swap_vx2 = vx2
x1 = swap_x2
vx1 = swap_vx2
x2 = swap_x1
vx2 = swap_vx1
EndIf
If KeyHit (Key_F)
swap_y1 = y1
swap_y2 = y2
swap_vy1 = vy1
swap_vy2 = vy2
swap_x1 = x1
swap_x2 = x2
swap_vx1 = vx1
swap_vx2 = vx2
y1 = swap_y2
vy1 = swap_vy2
y2 = swap_y1
vy2 = swap_vy1
EndIf
If KeyHit (Key_R)
swap_y1 = y1
swap_y2 = y2
swap_vy1 = vy1
swap_vy2 = vy2
swap_x1 = x1
swap_x2 = x2
swap_vx1 = vx1
swap_vx2 = vx2
x1 = swap_x2
vx1 = swap_vx2
x2 = swap_x1
vx2 = swap_vx1
y1 = swap_y2
vy1 = swap_vy2
y2 = swap_y1
vy2 = swap_vy1
EndIf
If KeyHit (Key_L)
swap_y1 = y1
swap_y2 = y2
swap_vy1 = vy1
swap_vy2 = vy2
swap_x1 = x1
swap_x2 = x2
swap_vx1 = vx1
swap_vx2 = vx2
y1 = swap_y2
vy1 = swap_vy1
x1 = swap_x2
vx1 = swap_vx2
vx2 = swap_vx1
vy2 = swap_vy1
EndIf
EndFunction

build upon it! make an even better one