Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Screen Savers
#68
MYSTIFY Clone with a little customizable twist:

Also using a _MEM pointer so that I can have an array attached to a User Defined type


Code: (Select All)


Option _Explicit
Type PointType
    X As Long
    Y As Long
    XInc As Integer
    YInc As Integer
End Type

Dim Shared Pt As PointType


Type BOXTYPE
    POINTS As _MEM
    NUMPOINTS As Integer
    bCOLOR As _Unsigned Long
End Type


Dim Shared X_ColorChange As Integer
Dim Shared Y_ColorChange As Integer


Dim Shared XLimit As Long
Dim Shared YLimit As Long
Dim Shared NumPoints As Long
Dim Shared NumBoxes As Long
Dim Shared NumLines As Long
Dim FrameSpeed As Long

Dim Shared TrailPointer As Long
Dim Shared CurTrail As Long
Dim Shared DrawPointer As Long

Dim I As Long
Dim J As Long

Randomize Timer


Width 60, 50
_Title "SET UP MYSTIFY"
GoSub SPEEDMESSAGE

Dim x$
Locate 3, 2
Print "USE DEFAULT VALUES --> : ";
Line Input x$
x$ = _Trim$(UCase$(x$))
If x$ = "" Then
    Print
    Print "ERROR"
    GoTo GETYBOUNCE
End If
If (Left$(x$, 1) = "Y") Then
    NumBoxes = 2
    NumPoints = 4
    NumLines = 30
    X_ColorChange = _TRUE
    Y_ColorChange = _FALSE
    FrameSpeed = 60
    GoTo start_me_up
End If
Cls
FrameSpeed = 60




GETNUMBOX:
GoSub SPEEDMESSAGE
Locate 2, 2
Print "NUMBER OF BOXES (1 to 10) --> : ";
Line Input x$
If Val(x$) < 1 Or Val(x$) > 10 Then
    Print
    Print "ERROR -->"; x$; " Is not Valid !"
    GoTo GETNUMBOX
End If
NumBoxes = Val(x$)
Cls
GETNUMCORNERS:
GoSub SPEEDMESSAGE
Locate 3, 2
Print "NUMBER OF BOX CORNERS (3 to 10) --> : ";
Line Input x$
If Val(x$) < 3 Or Val(x$) > 10 Then
    Print
    Print "ERROR -->"; x$; " Is not Valid !"
    GoTo GETNUMCORNERS
End If
NumPoints = Val(x$)
Cls
gettraillines:
GoSub SPEEDMESSAGE
Locate 2, 2
Print "NUMBER OF TRAILING BOXES (8 to 100) --> : ";
Line Input x$
If Val(x$) < 8 Or Val(x$) > 100 Then
    Print
    Print "ERROR -->"; x$; " Is not Valid !"
    GoTo gettraillines
End If
NumLines = Val(x$)
Cls
GETXBOUNCE:
GoSub SPEEDMESSAGE
Locate 3, 2
Print "Change Color on X Bounce (Y/N) --> : ";
Line Input x$
x$ = _Trim$(UCase$(x$))
If x$ = "" Then
    Print
    Print "ERROR"
    GoTo GETXBOUNCE
End If
X_ColorChange = (Left$(x$, 1) = "Y")
Cls
GETYBOUNCE:
GoSub SPEEDMESSAGE
Locate 3, 2
Print "Change Color on Y Bounce (Y/N) --> : ";
Line Input x$
x$ = _Trim$(UCase$(x$))
If x$ = "" Then
    Print
    Print "ERROR"
    GoTo GETYBOUNCE
End If
Y_ColorChange = (Left$(x$, 1) = "Y")



start_me_up:





TrailPointer = 0

XLimit = 1152
YLimit = 864

Dim Shared DRAW_TRAIL As Integer

DRAW_TRAIL = _FALSE

ReDim BOXS(0 To NumBoxes - 1) As BOXTYPE
ReDim TrailBoxes(NumBoxes, NumLines) As BOXTYPE

For I = 0 To NumBoxes - 1
    INIT_BOX BOXS(I)
    For J = 0 To NumLines - 1
        INIT_BOX TrailBoxes(I, J)
        TrailBoxes(I, J).bCOLOR = _RGB32(0, 0, 0, 255)
    Next
Next

Screen _NewImage(XLimit, YLimit, 32)
Line (0, 0)-(XLimit - 2, YLimit - 1), _RGB32(0, 0, 0, 255), BF
_FullScreen , _Smooth

Dim C As Long
DrawPointer = 0
CurTrail = 0
TrailPointer = 0
DRAW_TRAIL = _FALSE

Do
    For I = 0 To NumBoxes - 1
        If DRAW_TRAIL Then DrawBox TrailBoxes(I, CurTrail)
        DrawBox BOXS(I)
        CopyBox BOXS(I), TrailBoxes(I, TrailPointer)
        MoveBox BOXS(I)
    Next
    If DRAW_TRAIL Then
        CurTrail = CurTrail + 1
        If CurTrail = NumLines Then CurTrail = 0
    End If
    TrailPointer = TrailPointer + 1
    If TrailPointer = NumLines Then
        DRAW_TRAIL = _TRUE
        TrailPointer = 0
    End If

    C = _KeyHit
    If C = _KEY_UP Then
        If FrameSpeed < 200 Then FrameSpeed = FrameSpeed + 1
    End If
    If C = _KEY_DOWN Then
        If FrameSpeed > 20 Then FrameSpeed = FrameSpeed - 1
    End If
    _Limit FrameSpeed
Loop Until C = 27


System



SPEEDMESSAGE:
Locate 20, 10
Color 10
Print "ARROW KEYS WILL CONTROL ANIMATION SPEED."
Color 15
Return








Sub CopyBox (Box1 As BOXTYPE, Box2 As BOXTYPE)
    Dim DPoints(0 To NumPoints - 1) As PointType
    _MemGet Box1.POINTS, Box1.POINTS.OFFSET, DPoints()
    _MemPut Box2.POINTS, Box2.POINTS.OFFSET, DPoints()
End Sub

Function RandomColor&&
    Static R As Integer
    Static G As Integer
    Static B As Integer
    Static Total As Integer
    GETCOLORS:
    R = Int(Rnd * 255) + 1
    G = Int(Rnd * 255) + 1
    B = Int(Rnd * 255) + 1
    Total = R + G + B
    If Total < 100 GoTo GETCOLORS
    RandomColor = _RGB32(R, G, B, 255)
End Function



Sub INIT_BOX (BOX As BOXTYPE)
    Dim DPoints(0 To NumPoints - 1) As PointType
    Dim I As Long
    Dim R As Integer
    Dim G As Integer
    Dim B As Integer
    BOX.POINTS = _MemNew(Len(Pt) * NumPoints)
    For I = 0 To NumPoints - 1
        DPoints(I).X = Int(Rnd * XLimit)
        DPoints(I).Y = Int(Rnd * YLimit)
        DPoints(I).XInc = Int(Rnd * 5) + 1
        DPoints(I).YInc = Int(Rnd * 5) + 1
        If Int(Rnd * 11) < 5 Then
            DPoints(I).XInc = DPoints(I).XInc * -1
        End If
        If Int(Rnd * 11) < 5 Then
            DPoints(I).YInc = DPoints(I).YInc * -1
        End If
    Next
    _MemPut BOX.POINTS, BOX.POINTS.OFFSET, DPoints()
    BOX.bCOLOR = RandomColor
End Sub



Sub DrawBox (Box As BOXTYPE)
    Dim I As Long
    Dim X As Long
    Dim Y As Long
    Dim X2 As Long
    Dim Y2 As Long
    Dim DestIndx As Long
    Dim Dest As Long
    Dim DPoints(0 To NumPoints - 1) As PointType
    _MemGet Box.POINTS, Box.POINTS.OFFSET, DPoints()

    Dest = NumPoints - 1
    For I = 0 To Dest
        If I = Dest Then DestIndx = 0 Else DestIndx = I + 1
        X = DPoints(I).X
        Y = DPoints(I).Y
        X2 = DPoints(DestIndx).X
        Y2 = DPoints(DestIndx).Y
        Line (X, Y)-(X2, Y2), Box.bCOLOR
    Next
End Sub

Sub MoveBox (Box As BOXTYPE)
    Dim I As Long
    Dim X As Long
    Dim Y As Long
    Dim X2 As Long
    Dim Y2 As Long
    Dim DestIndx As Long
    Dim Dest As Long
    Dim DPoints(0 To NumPoints - 1) As PointType
    _MemGet Box.POINTS, Box.POINTS.OFFSET, DPoints()
    Dest = NumPoints - 1
    For I = 0 To Dest
        DPoints(I).X = DPoints(I).X + DPoints(I).XInc
        DPoints(I).Y = DPoints(I).Y + DPoints(I).YInc
        If DPoints(I).X >= XLimit Then
            DPoints(I).X = XLimit
            DPoints(I).XInc = (Int(Rnd * 5) + 1) * -1
            If X_ColorChange Then
                Box.bCOLOR = RandomColor
            End If
        End If
        If DPoints(I).X <= 0 Then
            DPoints(I).X = 0
            DPoints(I).XInc = (Int(Rnd * 5) + 1)
        End If
        If DPoints(I).Y >= YLimit Then
            DPoints(I).Y = YLimit
            DPoints(I).YInc = (Int(Rnd * 5) + 1) * -1
            If Y_ColorChange Then
                Box.bCOLOR = RandomColor
            End If
        End If
        If DPoints(I).Y <= 0 Then
            DPoints(I).Y = 0
            DPoints(I).YInc = (Int(Rnd * 5) + 1)
        End If
    Next
    _MemPut Box.POINTS, Box.POINTS.OFFSET, DPoints()
End Sub







Reply


Messages In This Thread
Screen Savers - by bplus - 04-27-2022, 12:29 AM
RE: Screen Savers - by Dav - 04-27-2022, 02:26 PM
RE: Screen Savers - by bplus - 04-27-2022, 02:33 PM
RE: Screen Savers - by bplus - 04-30-2022, 11:55 PM
RE: Screen Savers - by madscijr - 04-17-2025, 01:22 PM
RE: Screen Savers - by Dav - 05-01-2022, 07:22 PM
RE: Screen Savers - by bplus - 05-01-2022, 08:26 PM
RE: Screen Savers - by bplus - 05-02-2022, 12:00 AM
RE: Screen Savers - by madscijr - 04-12-2025, 05:56 AM
RE: Screen Savers - by Coolman - 05-02-2022, 09:42 AM
RE: Screen Savers - by bplus - 05-03-2022, 02:13 AM
RE: Screen Savers - by bplus - 05-09-2022, 01:32 PM
RE: Screen Savers - by bplus - 05-19-2022, 07:22 PM
RE: Screen Savers - by bplus - 05-21-2022, 11:22 PM
RE: Screen Savers - by Pete - 05-21-2022, 11:27 PM
RE: Screen Savers - by bplus - 05-21-2022, 11:38 PM
RE: Screen Savers - by Pete - 05-22-2022, 04:39 AM
RE: Screen Savers - by bplus - 06-17-2022, 01:10 PM
RE: Screen Savers - by johnno56 - 06-18-2022, 12:23 AM
RE: Screen Savers - by Kernelpanic - 06-18-2022, 11:48 AM
RE: Screen Savers - by bplus - 06-18-2022, 01:47 AM
RE: Screen Savers - by bplus - 06-18-2022, 12:33 PM
RE: Screen Savers - by SierraKen - 06-20-2022, 09:50 PM
RE: Screen Savers - by bplus - 06-21-2022, 12:15 AM
RE: Screen Savers - by bplus - 06-29-2022, 04:52 PM
RE: Screen Savers - by SierraKen - 06-29-2022, 06:10 PM
RE: Screen Savers - by vince - 07-01-2022, 10:32 PM
RE: Screen Savers - by bplus - 07-01-2022, 11:05 PM
RE: Screen Savers - by bplus - 07-04-2022, 06:54 PM
RE: Screen Savers - by Kernelpanic - 07-04-2022, 09:11 PM
RE: Screen Savers - by bplus - 07-04-2022, 09:54 PM
RE: Screen Savers - by Kernelpanic - 07-05-2022, 02:14 PM
RE: Screen Savers - by bplus - 07-19-2022, 08:28 PM
RE: Screen Savers - by bplus - 08-28-2022, 12:55 AM
RE: Screen Savers - by TempodiBasic - 08-29-2022, 09:26 AM
RE: Screen Savers - by bplus - 09-06-2022, 12:35 AM
RE: Screen Savers - by SierraKen - 09-08-2022, 07:37 PM
RE: Screen Savers - by bplus - 09-09-2022, 02:22 AM
RE: Screen Savers - by SpriggsySpriggs - 09-15-2022, 04:38 PM
RE: Screen Savers - by bplus - 09-15-2022, 05:20 PM
RE: Screen Savers - by bplus - 01-31-2023, 04:21 PM
RE: Screen Savers - by vince - 02-01-2023, 07:27 AM
RE: Screen Savers - by bplus - 02-01-2023, 05:05 PM
RE: Screen Savers - by bplus - 03-13-2023, 10:51 PM
RE: Screen Savers - by vince - 03-31-2023, 11:09 PM
RE: Screen Savers - by bplus - 04-01-2023, 12:09 AM
RE: Screen Savers - by bplus - 05-14-2024, 03:00 PM
RE: Screen Savers - by PhilOfPerth - 05-15-2024, 08:24 AM
RE: Screen Savers - by bplus - 05-15-2024, 11:15 PM
RE: Screen Savers - by bplus - 08-20-2024, 12:00 AM
RE: Screen Savers - by bplus - 02-08-2025, 01:20 AM
RE: Screen Savers - by bplus - 04-12-2025, 10:49 AM
RE: Screen Savers - by madscijr - 04-12-2025, 05:01 PM
RE: Screen Savers - by SMcNeill - 04-17-2025, 01:32 PM
RE: Screen Savers - by madscijr - 04-17-2025, 04:42 PM
RE: Screen Savers - by SMcNeill - 04-17-2025, 05:03 PM
RE: Screen Savers - by NakedApe - 04-17-2025, 01:34 PM
RE: Screen Savers - by bplus - 04-17-2025, 02:59 PM
RE: Screen Savers - by madscijr - 04-17-2025, 05:54 PM
RE: Screen Savers - by SMcNeill - 04-17-2025, 05:59 PM
RE: Screen Savers - by madscijr - 04-17-2025, 06:58 PM
RE: Screen Savers - by madscijr - 04-18-2025, 03:07 AM
RE: Screen Savers - by madscijr - 04-18-2025, 07:55 PM
RE: Screen Savers - by aadityap0901 - 10-31-2025, 10:15 AM
RE: Screen Savers - by Unseen Machine - 11-01-2025, 01:41 AM
RE: Screen Savers - by aadityap0901 - 11-01-2025, 08:35 AM
RE: Screen Savers - by bplus - 01-09-2026, 03:40 PM
RE: Screen Savers - by ahenry3068 - 01-09-2026, 06:36 PM
RE: Screen Savers - by bplus - 01-09-2026, 08:33 PM
RE: Screen Savers - by bplus - 01-11-2026, 03:28 AM
RE: Screen Savers - by bplus - 01-11-2026, 11:44 AM
RE: Screen Savers - by ahenry3068 - 01-11-2026, 02:35 PM
RE: Screen Savers - by bplus - 01-11-2026, 03:15 PM
RE: Screen Savers - by ahenry3068 - 01-11-2026, 09:58 PM
RE: Screen Savers - by bplus - 01-13-2026, 12:51 AM

Forum Jump:


Users browsing this thread: 2 Guest(s)