Testing QBJS tags
#1
[qbjs]'Option _Explicit
'_Title "Tessellation 4" ' b+ 2023-05-19
' Inspired by Charlie's BAM example
' https(colon)//staging.qb64phoenix.com/showthread.php?tid=1646&pid=15772#pid15772

' b+ 2023-05-09 - Tiling with a pattern
' Tessellation 2 will try color filled with more background black.
' Tessellation 3 Charlie mentions a mirror image for interesting tessellating,
' lets try mirroring both x and y axis.
'
' Tessellation 4
'  Use b key to toggle between
'      1. 3 color tessellation
'      2. 4 color tessellation
'  and use c key to toggle between
'      1. a random set of colors
'      2. contrast (a red, a green, a blue and 4th is white)
'
'DefLng A-Z
Randomize Timer
Screen _NewImage(800, 600, 32) ' full rgb range here
_ScreenMove 250, 50
Dim Shared Pix '  Pix is number of pixels to Tile side
Dim Shared Scale ' Change a pixel to a bigger square block for not so subtle patterns
Dim Shared Tile '  Handle that stores Tile Image in memory to call up with _PutImage
Dim Shared B '    Toggle color mode from 3 to 4 and back
Dim Shared C '    Toggle Contrast set and Random set of colors
ReDim Shared Pal(1 To 4) As _Unsigned Long ' palette to hold 3 or 4 colors
Dim K$, t$
Do
    K$ = InKey$
    If K$ = "b" Then B = 1 - B '        toggle coloring mode on a b keypress
    If K$ = "c" Then C = 1 - C '        toggle coloring mode on a b keypress

    ' update the title according current b and c toggles
    If B Then t$ = "4" Else t$ = "3"
    If C Then t$ = t$ + " Contrasted Colors" Else t$ = t$ + " Random Colors"
    _Title t$ + ">>> use b to toggle 3|4 colors, c to toggle random|contrast, any other for next screen"

    MakePalette '                      3 or 4 random colors according to b
    MakeTile '                          create a new random tiling pattern
    Tessellate '                        tile the screen with it
    _PrintString (740, 580), "ZZZ..." ' Show user we are sleeping awaiting a key press
    Sleep
Loop Until _KeyDown(27) ' quit when detect escape key on sleep

Sub MakePalette
    Dim As Long n, i
    If B Then n = 4 Else n = 3
    ReDim Pal(1 To n) As _Unsigned Long
    For i = 1 To n
        If C Then
            If B Then
                If i = 4 Then Pal(i) = C3~&(999) Else Pal(i) = C3~&(10 ^ (i - 1) * Int(Rnd * 10))
            Else
                Pal(i) = C3~&(10 ^ (i - 1) * Int(Rnd * 10))
            End If
        Else
            Pal(i) = C3~&(Int(Rnd * 1000))
        End If
    Next
End Sub

Sub MakeTile ' make a random tile to Tesselate according to B Mode coloring
    Pix = Int(Rnd * 9) + 4 '          sets tile size pix X pix or a 4X4 to 12X12 Tile coloring
    Scale = Int(Rnd * 6) + 4 '        to change pixels to square blocks
    If Tile Then _FreeImage Tile '    throw old image away
    Tile = _NewImage(2 * Scale * Pix - 1, 2 * Scale * Pix - 1) '  make new one
    _Dest Tile '                      draw in the memory area Tile not on screen
    Dim As Long y, x, q
    For y = 0 To Scale * Pix Step Scale
        For x = 0 To Scale * Pix Step Scale
            If B Then q = Int(Rnd * 4) + 1 Else q = Int(Rnd * 3) + 1
            Line (x, y)-Step(Scale, Scale), Pal(q), BF ' this should be integer since Tile is
            Line (2 * Scale * Pix - x - 1, y)-Step(Scale, Scale), Pal(q), BF
            Line (x, 2 * Scale * Pix - y - 1)-Step(Scale, Scale), Pal(q), BF
            Line (2 * Scale * Pix - x - 1, 2 * Scale * Pix - y - 1)-Step(Scale, Scale), Pal(q), BF
        Next
    Next
    _Dest 0
End Sub

Sub Tessellate ' just covering the screen with our Tile
    Dim As Long y, x
    For y = 0 To _Height Step 2 * Scale * Pix
        For x = 0 To _Width Step 2 * Scale * Pix
            _PutImage (x, y)-Step(2 * Scale * Pix, 2 * Scale * Pix), Tile, 0
        Next
    Next
End Sub

Function C3~& (n) ' New (even less typing!) New Color System 1000 colors with up to 3 digits
    Dim s3$, r As Long, g As Long, b As Long
    s3$ = Right$("000" + LTrim$(Str$(n)), 3)
    r = Val(Mid$(s3$, 1, 1))
    If r Then r = 28 * r + 3
    g = Val(Mid$(s3$, 2, 1))
    If g Then g = 28 * g + 3
    b = Val(Mid$(s3$, 3, 1))
    If b Then b = 28 * b + 3
    C3~& = _RGB32(r, g, b)
End Function[/qbjs]

So what am I doing wrong?
b = b + ...
Reply
#2
@bplus it does not work like a [code] or [qb] block. It works as a youtube like share.

Like you have to go to qbjs.org, write something, then share it with the share link like this:


[Image: qbjs-share.png]

I will update the announcement post to reflect this.

  1. Go to qbjs.org
  2. Write some code
  3. Click the share button
  4. Copy the share link from the dialog to clipboard
  5. In forum use CTRL-SHIFT-S to switch to source mode (for whitespace preservation)
  6. Type: [qbjs]
  7. Paste from clipboard
  8. Type: [/qbjs]
grymmjack (gj!)
GitHubYouTube | Soundcloud | 16colo.rs
Reply
#3
OK but I still can't get the darned thing to work in QBJS.

Is it that Functions can't return unsigned long colors?
I have one called C3~& that is supposed to return an _RGB32 color

Also I don't see Shared as keyword in QBJS so rewrite the code adding all the variables as parameters to subs and functions what a pain!
b = b + ...
Reply
#4
(06-05-2023, 07:35 PM)bplus Wrote: OK but I still can't get the darned thing to work in QBJS.

Is it that Functions can't return unsigned long colors?
I have one called C3~& that is supposed to return an _RGB32 color

Also I don't see Shared as keyword in QBJS so rewrite the code adding all the variables as parameters to subs and functions what a pain!
Hey @bplus!  Looks like _PutImage is not handling the Step option as expected.  I made a minor change to use a non-step version.  Is this more what you expected?

Reply
#5
(06-05-2023, 07:35 PM)bplus Wrote: Also I don't see Shared as keyword in QBJS so rewrite the code adding all the variables as parameters to subs and functions what a pain!

Shared is supported.
Reply
#6
Yeah, that's it! Thanks!

So not Step in _PutImage. Surely it works in Line?
b = b + ...
Reply
#7
(06-05-2023, 08:00 PM)bplus Wrote: Yeah, that's it! Thanks!

So not Step in _PutImage. Surely it works in Line?

Yes, Step works in Line.  I'll put a fix for step in _PutImage on the list for the 0.8 release.
Reply
#8
It would be nice if it worked more like the first post of this thread, instead of the base-64 continent I found after purposely hitting "Reply" button on post #4.

That's before the first post could be edited. I understand the technical workings about QBJS for security reasons and stuff.
Reply
#9
This is a test to see if forum attachments can be used in combination with the qbjs tag:

Nope, doesn't work... nothing to see here

Working now... The first example is loaded from the attached program.bas:


The second example is loaded from the attached custom-font.zip:


grymmjack's edit tests below:

attachment insert into post button bbcode nested inside qbjs bbcode:
[qbjs]attachment=1875[/qbjs]

qbjs bbcode original from qbjs.org share (with code arg):


qbjs BASIC code wrapped in bbcode:
[qbjs]
PRINT "Nested code is wrapped by qbjs bbcode"
[/qbjs]


Attached Files
.bas   program.bas (Size: 19 bytes / Downloads: 156)
.zip   custom-font.zip (Size: 51.54 KB / Downloads: 85)
Reply
#10
Custom font demo fixed for QB64pe run anyway.


Attached Files
.zip   custom-font-modb+.zip (Size: 33.55 KB / Downloads: 11)
b = b + ...
Reply




Users browsing this thread: 4 Guest(s)