Post by bplus on Jun 27, 2023 17:59:18 GMT
Thanks to dbox quick work I can share the animation with you:
qbjs.org/?code=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
Click link above (don't be intimidated that's cpmpressed code), then click Play Triangle on top left side of site's screen that comes up. To center animation on the screen click the arrow triagle pointing left at top right corner of screen.
Here is my QB64 code:
dbox Dim 'd some variables and put an $IF for FCirc (fill circle) sub for running in QBJS
PS he also inserted a _Limit because the JS part of QBJS can kick butt drawing filled circles compared to QB64!
Fun stuff!
qbjs.org/?code=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
Click link above (don't be intimidated that's cpmpressed code), then click Play Triangle on top left side of site's screen that comes up. To center animation on the screen click the arrow triagle pointing left at top right corner of screen.
Here is my QB64 code:
_Title "Plasma Snake - any key to change color" 'b+ 2023-06-27
' inspired once again by Paul Dunn aka ZXDunny here:
' https://retrocoders.phatcode.net/index.php?topic=634.0
' and my mod? hopefully I can do same or similar PLUS allow you to change plasma schemes!
' Plus put a face on it!
' lets see!
Screen _NewImage(800, 600, 32) ' 32 = all colors of _RGBA32() = millions!
_ScreenMove 250, 60 ' you may want different
Randomize Timer ' + so we start different each time, who wants to see same old snake?
Dim Shared PR, PG, PB, CN ' for setup and changing Plasma Color Schemes
PR = Rnd ^ 2: PG = Rnd ^ 2: PB = Rnd ^ 2 ' setup one to start
da = 1: r = 60
Do
CN = 0 ' reset plasma index to 0 for consistent color bands
For x = r To 800 - r ' make a snake body
CN = CN + .5
Color _RGB32(127 + 127 * Sin(PR * CN), 127 + 127 * Sin(PG * CN), 127 + 127 * Sin(PB * CN))
FCirc x, 300 + (300 - r) * Sin(_D2R(x + a)), r, _DefaultColor
Next
' Put a face on it!
x = x - 1
y = 300 + (300 - r) * Sin(_D2R(x + a))
' eyes
FCirc x - .625 * r, y - .1 * r, .125 * r, &HFF000000
FCirc x + .625 * r, y - .1 * r, .125 * r, &HFF000000
Circle (x - .62 * r, y - .1 * r), .1 * r, &HFFFFFFFF
Circle (x + .62 * r, y - .1 * r), .1 * r, &HFFFFFFFF
' nose
FCirc x - .1 * r, y + .35 * r, .025 * r, &HFF000000
FCirc x + .1 * r, y + .35 * r, .025 * r, &HFF000000
' mouth
Line (x - 4, y + .65 * r)-(x + 4, y + .655 * r), &HFFFF0000, BF
' and a little tongue of course
If m Mod 20 = 0 Then ' flash every 10 loops
Line (x - 2, y + .655 * r)-(x + 2, y + .9 * r), &HFFFF0000, BF
Line (x - 2, y + .9 * r)-(x - .08 * r, y + r), &HFFFF0000
Line (x + 2, y + .9 * r)-(x + .08 * r, y + r), &HFFFF0000
End If
_Display
If m Mod 20 = 0 Then ' erase the tongue flash every 10 loops
Line (x - 2, y + .655 * r)-(x + 2, y + .9 * r), _DefaultColor, BF
Line (x - 2, y + .9 * r)-(x - .08 * r, y + r), _DefaultColor
Line (x + 2, y + .9 * r)-(x + .08 * r, y + r), _DefaultColor
End If
m = m + 1
a = a + da
If Len(InKey$) Then PR = Rnd ^ 2: PG = Rnd ^ 2: PB = Rnd ^ 2
Loop Until _KeyDown(27)
Sub FCirc (CX As Long, CY As Long, R As Long, C As _Unsigned Long)
Dim Radius As Long, RadiusError As Long
Dim X As Long, Y As Long
Radius = Abs(R): RadiusError = -Radius: X = Radius: Y = 0
If Radius = 0 Then PSet (CX, CY), C: Exit Sub
Line (CX - X, CY)-(CX + X, CY), C, BF
While X > Y
RadiusError = RadiusError + Y * 2 + 1
If RadiusError >= 0 Then
If X <> Y + 1 Then
Line (CX - Y, CY - X)-(CX + Y, CY - X), C, BF
Line (CX - Y, CY + X)-(CX + Y, CY + X), C, BF
End If
X = X - 1
RadiusError = RadiusError - X * 2
End If
Y = Y + 1
Line (CX - X, CY - Y)-(CX + X, CY - Y), C, BF
Line (CX - X, CY + Y)-(CX + X, CY + Y), C, BF
Wend
End Sub
dbox Dim 'd some variables and put an $IF for FCirc (fill circle) sub for running in QBJS
Import G2D From "lib/graphics/2d.bas"
_Title "Plasma Snake - any key to change color" 'b+ 2023-06-27
' inspired once again by Paul Dunn aka ZXDunny here:
' https://retrocoders.phatcode.net/index.php?topic=634.0
' and my mod? hopefully I can do same or similar PLUS allow you to change plasma schemes!
' Plus put a face on it!
' lets see!
Screen _NewImage(800, 600, 32) ' 32 = all colors of _RGBA32() = millions!
'_ScreenMove 250, 60 ' you may want different
Randomize Timer ' + so we start different each time, who wants to see same old snake?
Dim Shared PR, PG, PB, CN ' for setup and changing Plasma Color Schemes
Dim a, m, x, y
PR = Rnd ^ 2: PG = Rnd ^ 2: PB = Rnd ^ 2 ' setup one to start
da = 1: r = 60
Do
CN = 0 ' reset plasma index to 0 for consistent color bands
For x = r To 800 - r ' make a snake body
CN = CN + .5
Color _RGB32(127 + 127 * Sin(PR * CN), 127 + 127 * Sin(PG * CN), 127 + 127 * Sin(PB * CN))
FCirc x, 300 + (300 - r) * Sin(_D2R(x + a)), r, _DefaultColor
Next
' Put a face on it!
x = x - 1
y = 300 + (300 - r) * Sin(_D2R(x + a))
' eyes
FCirc x - .625 * r, y - .1 * r, .125 * r, &HFF000000
FCirc x + .625 * r, y - .1 * r, .125 * r, &HFF000000
Circle (x - .62 * r, y - .1 * r), .1 * r, &HFFFFFFFF
Circle (x + .62 * r, y - .1 * r), .1 * r, &HFFFFFFFF
' nose
FCirc x - .1 * r, y + .35 * r, .025 * r, &HFF000000
FCirc x + .1 * r, y + .35 * r, .025 * r, &HFF000000
' mouth
Line (x - 4, y + .65 * r)-(x + 4, y + .655 * r), &HFFFF0000, BF
' and a little tongue of course
If m Mod 20 = 0 Then ' flash every 10 loops
Line (x - 2, y + .655 * r)-(x + 2, y + .9 * r), &HFFFF0000, BF
Line (x - 2, y + .9 * r)-(x - .08 * r, y + r), &HFFFF0000
Line (x + 2, y + .9 * r)-(x + .08 * r, y + r), &HFFFF0000
End If
_Display
_Limit 60
If m Mod 20 = 0 Then ' erase the tongue flash every 10 loops
Line (x - 2, y + .655 * r)-(x + 2, y + .9 * r), _DefaultColor, BF
Line (x - 2, y + .9 * r)-(x - .08 * r, y + r), _DefaultColor
Line (x + 2, y + .9 * r)-(x + .08 * r, y + r), _DefaultColor
End If
m = m + 1
a = a + da
If Len(InKey$) Then PR = Rnd ^ 2: PG = Rnd ^ 2: PB = Rnd ^ 2
Loop Until _KeyDown(27)
Sub FCirc (CX As Long, CY As Long, R As Long, C As _Unsigned Long)
$If WEB Then
G2D.FillCircle CX, CY, R, C
$Else
Dim Radius As Long, RadiusError As Long
Dim X As Long, Y As Long
Radius = Abs(R): RadiusError = -Radius: X = Radius: Y = 0
If Radius = 0 Then PSet (CX, CY), C: Exit Sub
Line (CX - X, CY)-(CX + X, CY), C, BF
While X > Y
RadiusError = RadiusError + Y * 2 + 1
If RadiusError >= 0 Then
If X <> Y + 1 Then
Line (CX - Y, CY - X)-(CX + Y, CY - X), C, BF
Line (CX - Y, CY + X)-(CX + Y, CY + X), C, BF
End If
X = X - 1
RadiusError = RadiusError - X * 2
End If
Y = Y + 1
Line (CX - X, CY - Y)-(CX + X, CY - Y), C, BF
Line (CX - X, CY + Y)-(CX + X, CY + Y), C, BF
Wend
$End If
End Sub
PS he also inserted a _Limit because the JS part of QBJS can kick butt drawing filled circles compared to QB64!
Fun stuff!