04-19-2025, 10:42 PM
Code: (Select All)
_Title "Color wheel" ' madscijr 2025-04-19
'Const fps = 60
Const cShowValues = _FALSE
Type PointType
x As Long
y As Long
d As Integer
End Type
Dim xmin, ymin As Integer
Dim xmax, ymax As Integer
Dim r, g, b As Long
Dim dr, dg, db As Integer
Dim cv, vr, vg, vb As Integer
Dim OldMouseX, OldMouseY As Integer
Dim arr(1 To 2) As PointType
Dim i As Integer
Dim count As Integer
Dim m$
Randomize Timer
xmin = 0: ymin = 0: xmax = 640: ymax = 480
'xmax = _DesktopWidth - 1: ymax = _DesktopHeight - 1
Screen _NewImage(xmax, ymax, 32)
_FullScreen
_Delay 2 ' wait a couple seconds before getting mouse coords
While _MouseInput: Wend: OldMouseX = _MouseX: OldMouseY = _MouseY ' initial mouse placement
r = 255: g = 0: b = 0
dr = 0: dg = 0: db = 1
cv = 7: vr = cv: vg = cv: vb = cv
arr(1).x = 0: arr(1).y = 0: arr(1).d = 1
arr(2).x = xmax: arr(2).y = ymax: arr(2).d = 3
count = 0
While _KeyDown(27) = 0
Line (arr(1).x, arr(1).y)-(arr(2).x, arr(2).y), _RGB32(r, g, b)
For i = 1 To 2
Select Case arr(i).d
Case 1:
arr(i).x = arr(i).x + 1
If arr(i).x >= xmax Then arr(i).d = 2
Case 2:
arr(i).y = arr(i).y + 1
If arr(i).y >= ymax Then arr(i).d = 3
Case 3:
arr(i).x = arr(i).x - 1
If arr(i).x <= xmin Then arr(i).d = 4
Case 4:
arr(i).y = arr(i).y - 1
If arr(i).y <= ymin Then arr(i).d = 1: count = count + 1
End Select
Next i
'If count = 2 Then Exit While ' exit after one cycle
' COLOR CHANGE TRUTH TABLE:
'RGB DR DG DB
'0FF 0 0 -1
'0F-
'0F0 +1 0 0
'+F0
'FF0
'F-0 0 -1 0
'F00
'F0+ 0 0 +1
'F0F
'-0F -1 0 0
'00F
'0+F 0 +1 0
If dr = 1 And dg = 0 And db = 0 Then
r = r + vr
If r >= 255 Then r = 255: dr = 0: dg = -1: db = 0
ElseIf dr = -1 And dg = 0 And db = 0 Then
r = r - vr
If r <= 0 Then r = 0: dr = 0: dg = 1: db = 0
ElseIf dr = 0 And dg = 1 And db = 0 Then
g = g + vg
If g >= 255 Then g = 255: dr = 0: dg = 0: db = -1
ElseIf dr = 0 And dg = -1 And db = 0 Then
g = g - vg
If g <= 0 Then g = 0: dr = 0: dg = 0: db = 1
ElseIf dr = 0 And dg = 0 And db = 1 Then
b = b + vb
If b >= 255 Then b = 255: dr = -1: dg = 0: db = 0
ElseIf dr = 0 And dg = 0 And db = -1 Then
b = b - vb
If b <= 0 Then b = 0: dr = 1: dg = 0: db = 0
End If
If cShowValues = _TRUE Then
Color _RGB32(0, 0, 0), _RGB32(255, 0, 0)
m$ = "R=" + Right$(String$(3, " ") + _ToStr$(r), 3)
Locate 2, 3: Print m$;
Color _RGB32(0, 0, 0), _RGB32(0, 255, 0)
m$ = "G=" + Right$(String$(3, " ") + _ToStr$(g), 3)
Locate 2, 9: Print m$;
Color _RGB32(0, 0, 0), _RGB32(0, 0, 255)
m$ = "B=" + Right$(String$(3, " ") + _ToStr$(b), 3)
Locate 2, 15: Print m$;
Color _RGB32(0, 0, 0), _RGB32(255, 0, 0)
m$ = "DR=" + Right$(String$(3, " ") + _ToStr$(dr), 3)
Locate 4, 2: Print m$;
Color _RGB32(0, 0, 0), _RGB32(0, 255, 0)
m$ = "DG=" + Right$(String$(3, " ") + _ToStr$(dg), 3)
Locate 4, 8: Print m$;
Color _RGB32(0, 0, 0), _RGB32(0, 0, 255)
m$ = "DB=" + Right$(String$(3, " ") + _ToStr$(db), 3)
Locate 4, 14: Print m$;
End If
' If user moves mouse, quit
While _MouseInput: Wend: If _MouseX <> OldMouseX Or _MouseY <> OldMouseY Then Exit While
_Display
'_Limit fps
Wend
'_AutoDisplay
'Sleep
System