QB64 Phoenix Edition
WiggleBlocks - Printable Version

+- QB64 Phoenix Edition (https://qb64phoenix.com/forum)
+-- Forum: QB64 Rising (https://qb64phoenix.com/forum/forumdisplay.php?fid=1)
+--- Forum: Code and Stuff (https://qb64phoenix.com/forum/forumdisplay.php?fid=3)
+---- Forum: Programs (https://qb64phoenix.com/forum/forumdisplay.php?fid=7)
+---- Thread: WiggleBlocks (/showthread.php?tid=2187)



WiggleBlocks - James D Jarvis - 11-19-2023

just a little doodling really.

Code: (Select All)
'wiggleblocks
'
'just some doodling with internal SVGs
'for QB64PE 3.9.0 and later
Screen _NewImage(300, 300, 32)
_Title "WiggleBlocks <q> to quit"
Dim As Long simg
Dim x(3, 4), y(3, 4)
Randomize Timer
For n = 1 To 4
    x(1, n) = Int(1 + Rnd * 80): x(2, n) = Int(1 + Rnd * 80): x(3, n) = Int(1 + Rnd * 80)
    y(1, n) = Int(1 + Rnd * 80): y(2, n) = Int(1 + Rnd * 80): y(3, n) = Int(1 + Rnd * 80)
Next
angle = 0
kb$ = "#" + Hex$(100 + Rnd * 40) + Hex$(140 + Rnd * 40) + Hex$(80 + Rnd * 40)
Do
    Cls
    s$ = svgsquare$(1, x(), y(), "#CCBBDD")
    simg = _LoadImage(s$, 32, "memory")
    _PutImage (0, 0), simg
    _PutImage (200, 0), simg
    _FreeImage simg
    wigglexy x(), y()
    s$ = svgsquare$(2, x(), y(), "#ACABDD")
    simg = _LoadImage(s$, 32, "memory")
    _PutImage (100, 0), simg
    _PutImage (100, 200), simg
    _FreeImage simg
    wigglexy x(), y()
    If Int(1 + Rnd * 10) < 3 Then kb$ = "#" + Hex$(100 + Rnd * 40) + Hex$(140 + Rnd * 40) + Hex$(80 + Rnd * 40)
    s$ = svgsquare$(3, x(), y(), kb$)
    simg = _LoadImage(s$, 32, "memory")
    _PutImage (0, 100), simg
    _PutImage (200, 100), simg
    _PutImage (0, 200), simg
    _FreeImage simg
    wigglexy x(), y()
    k$ = "#" + Hex$(100 + Rnd * 40) + Hex$(140 + Rnd * 40) + Hex$(80 + Rnd * 40)
    s$ = svgsquare$(4, x(), y(), k$)
    simg = _LoadImage(s$, 32, "memory")
    _PutImage (100, 100), simg
    _PutImage (200, 200), simg
    _Display
    _Delay 0.04
    _FreeImage simg
Loop Until InKey$ = "q"
System


Sub wigglexy (x(), y())
    'wiggle the little rectangles
    For n = 1 To 4
        For r = 1 To 3
            x(r, n) = x(r, n) + Int(Rnd * 4) - Int(Rnd * 4)
            y(r, n) = y(r, n) + Int(Rnd * 4) - Int(Rnd * 4)
            If x(r, n) < 1 Then x(r, n) = Int(1 + Rnd * 80)
            If y(r, n) < 1 Then y(r, n) = Int(1 + Rnd * 80)
            If x(r, n) > 90 Then x(r, n) = Int(1 + Rnd * 80)
            If y(r, n) > 90 Then y(r, n) = Int(1 + Rnd * 80)
        Next
    Next n
End Sub

Function svgsquare$ (n, x(), y(), f$)
    'define one of the svgsquares
    xa$ = _Trim$(Str$(x(1, n)))
    xb$ = _Trim$(Str$(x(2, n)))
    xc$ = _Trim$(Str$(x(3, n)))
    ya$ = _Trim$(Str$(y(1, n)))
    yb$ = _Trim$(Str$(y(2, n)))
    yc$ = _Trim$(Str$(y(3, n)))
    'build a string to create an SVG image
    s$ = "<svg width='100' height='100' x='0' y='0' >"
    s$ = s$ + "<rect x='5' y='5' width='90' height='90' rx='10' ry='10' fill='" + f$ + "' />"
    s$ = s$ + "<rect x='+" + xa$ + "' y='+" + ya$ + "' width='20' height='20'rx='5' ry='5' fill='red'  /><rect x='+" + xb$ + "' y='+" + yb$ + "' width='20' height='20' rx='3' ry='3' fill='yellow' />"
    s$ = s$ + "<rect x='" + xc$ + "' y='+" + yc$ + "' width='20' height='20'rx='8' ry='8' fill='green'  />"
    s$ = s$ + "</svg>"
    svgsquare$ = s$
End Function



RE: WiggleBlocks - grymmjack - 11-23-2023

(11-19-2023, 04:16 PM)James D Jarvis Wrote: just a little doodling really.

This is pretty cool @JamesDJarvis!

Here is a screenshot.

[Image: james-d-jarvis-svg-wiggle-blocks.gif]


RE: WiggleBlocks - James D Jarvis - 11-23-2023

Thanks. I think loading an SVG from code into memory has given us a slightly more modern DRAW command.