QB64 Phoenix Edition
Lightning Globe - 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: Lightning Globe (/showthread.php?tid=3022)



Lightning Globe - SMcNeill - 09-11-2024

Since everyone is playing around with balls, globes, coins, circles and tigers and bears -- Oh my!!  I decided to share this old Lightning Globe that I'd wrote sometime back in the stone ages of QB64.   Maybe Dav, or someone skilled with the SOUND command will go in and add a nice little zappy zappy sizzle for us.

Just click on the screen and watch the lightning globe make lightning!

Code: (Select All)
Screen _NewImage(640, 480, 32)
Dim Kolor As _Unsigned Long
Const LevelOfVariance = 5 'Change this value to have fun with the strength of the "draw" to target.
Do
_Limit 60
Cls
Circle (320, 240), 20, &HFFAAAAAA
Paint (320, 240), &HFFAAAAAA
While _MouseInput: Wend
If _MouseButton(1) Then
StartX = 320: StartY = 240: EndX = _MouseX: EndY = _MouseY
Kolor = &HFF000000 + Int(Rnd * &H1000000)
Color Kolor
Do Until StartX = EndX And StartY = EndY
CoinToss = Rnd * 100 'The strength of "draw" which pulls the lightning to the target.
If CoinToss < LevelOfVariance Then 'Higher values meander less and go directly to the target.
XChange = Sgn(EndX - StartX) '-1,0,1, drawn always towards the mouse
YChange = Sgn(EndY - StartY)
Else
XChange = Int(Rnd * 3) - 1 '-1, 0, or 1, drawn in a random direction to let the lightning wander
YChange = Int(Rnd * 3) - 1
End If
StartX = StartX + XChange
StartY = StartY + YChange
PSet (StartX, StartY), Kolor
Loop
End If
_Display
Loop



RE: Lightning Globe - Pete - 09-11-2024

I submit TheBOB's rain and thunder OGG's.


RE: Lightning Globe - DANILIN - 09-11-2024

Penultimate line

_Display: _Delay .5

will show lightning in slow motion

like in my slow "School themes"

https://qb64phoenix.com/forum/showthread.php?tid=310&page=3


RE: Lightning Globe - NakedApe - 09-11-2024

Very cool, Steve! That's some fancy programming... and I likes zappin' thangs!


RE: Lightning Globe - SierraKen - 09-16-2024

I remember us playing with globes back in the ancient times. Here is mine: 

Code: (Select All)

'This program was made on Sept. 5, 2019 by SierraKen
'Thank you to B+ and Steve from the QB64 forum for the inspiration and some help.
_Title "Lightning Globe by SierraKen - Use Mouse and Left Mouse Button On the Globe. Esc to end."
_ScreenMove 400, 60
Screen _NewImage(800, 600, 32)
x = 400
y = 300
c = 1
st = 2
go:
a$ = InKey$
If a$ = Chr$(27) Then End
_Limit 1000
Line (400, 300)-(150, 600), _RGB32(50, 50, 50)
Line (400, 300)-(650, 600), _RGB32(50, 50, 50)
Line (150, 600)-(650, 600), _RGB32(50, 50, 50)
Paint (500, 580), _RGB32(50, 50, 50)

For sz = 1 To 200 Step .25
    c = c + .05 + r
    Circle (x, y), sz, _RGB32(c, c / 2, c)
Next sz
c = 0
For sz = 1 To 30 Step .25
    c = c + .005
    Circle (x, y), sz, _RGB32(c, c, c)
Next sz

While _MouseInput: Wend
handx = _MouseX: handy = _MouseY: MB = _MouseButton(1)

If l > 500 Then l = 500
If l < 50 Then l = 50

If MB = -1 And _Hypot(handx - 400, handy - 300) < 200 Then
    r = .1
    Randomize Timer
    lxx = (Rnd * 60) + 370
    lyy = (Rnd * 60) + 270
    Randomize Timer
    lxxx = (Rnd * 60) + 370
    lyyy = (Rnd * 60) + 270
    bolts = Int(Rnd * 100) + 1
    Circle (lxx, lyy), 4, _RGB32(255, 245, 255)
    Paint (lxx, lyy), _RGB32(255, 245, 255)
    If bolts > 50 Then
        Circle (lxxx, lyyy), 4, _RGB32(255, 245, 255)
        Paint (lxxx, lyyy), _RGB32(255, 245, 255)
    End If

    Do
        _Limit 1000
        oldlx = lxx
        oldly = lyy
        oldlxx = lxxx
        oldlyy = lyyy
        If lxx < handx Then dxx = 10
        If lxx > handx Then dxx = -10
        If lyy < handy Then dyy = 10
        If lyy > handy Then dyy = -10
        If lxxx < handx Then dxxx = 10
        If lxxx > handx Then dxxx = -10
        If lyyy < handy Then dyyy = 10
        If lyyy > handy Then dyyy = -10
        Randomize Timer
        dx = (Rnd * 8) - 4
        dy = (Rnd * 8) - 4
        Randomize Timer
        dxxxx = (Rnd * 8) - 4
        dyyyy = (Rnd * 8) - 4
        lxx = lxx + dx
        lyy = lyy + dy
        lxx = lxx + dxx
        lyy = lyy + dyy
        lxxx = lxxx + dxxxx
        lyyy = lyyy + dyyyy
        lxxx = lxxx + dxxx
        lyyy = lyyy + dyyy
        Line (oldlx, oldly)-(lxx, lyy), _RGB32(255, 230, 255)
        If bolts > 50 Then Line (oldlxx, oldlyy)-(lxxx, lyyy), _RGB32(255, 230, 255)
        ttt = ttt + 1
        If ttt > 20 Then
            Circle (lxx, lyy), 10, _RGB32(255, 245, 255)
            Paint (lxx, lyy), _RGB32(255, 245, 255)
            GoTo nex:
        End If
    Loop
End If
r = 0
nex:
ttt = 0
Randomize Timer
lxx2 = (Rnd * 60) + 370
lyy2 = (Rnd * 60) + 270
Randomize Timer
lxx3 = (Rnd * 200) + 270
lyy3 = (Rnd * 200) + 170
Randomize Timer
lxx4 = (Rnd * 60) + 370
lyy4 = (Rnd * 60) + 270
Randomize Timer
lxx5 = (Rnd * 200) + 270
lyy5 = (Rnd * 200) + 170

Circle (lxx2, lyy2), 4, _RGB32(255, 245, 255)
Paint (lxx2, lyy2), _RGB32(255, 245, 255)
Circle (lxx4, lyy4), 4, _RGB32(255, 245, 255)
Paint (lxx4, lyy4), _RGB32(255, 245, 255)

Do
    _Limit 1000
    oldlx2 = lxx2
    oldly2 = lyy2
    oldlx4 = lxx4
    oldly4 = lyy4
    If lxx2 < lxx3 Then dxx = 10
    If lxx2 > lxx3 Then dxx = -10
    If lyy2 < lyy3 Then dyy = 10
    If lyy2 > lyy3 Then dyy = -10

    If lxx4 < lxx5 Then dxx2 = 10
    If lxx4 > lxx5 Then dxx2 = -10
    If lyy4 < lyy5 Then dyy2 = 10
    If lyy4 > lyy5 Then dyy2 = -10
    Randomize Timer
    dx = (Rnd * 8) - 4
    dy = (Rnd * 8) - 4
    Randomize Timer
    dx2 = (Rnd * 8) - 4
    dy2 = (Rnd * 8) - 4
    lxx2 = lxx2 + dx
    lyy2 = lyy2 + dy
    lxx2 = lxx2 + dxx
    lyy2 = lyy2 + dyy
    lxx4 = lxx4 + dx2
    lyy4 = lyy4 + dy2
    lxx4 = lxx4 + dxx2
    lyy4 = lyy4 + dyy2
    Line (oldlx2, oldly2)-(lxx2, lyy2), _RGB32(255, 161, 255)
    Line (oldlx4, oldly4)-(lxx4, lyy4), _RGB32(255, 161, 255)
    ttt2 = ttt2 + 1
    If ttt2 > 50 Then
        Circle (lxx2, lyy2), 8, _RGB32(255, 230, 255)
        Paint (lxx2, lyy2), _RGB32(255, 230, 255)
        Circle (lxx4, lyy4), 8, _RGB32(255, 230, 255)
        Paint (lxx4, lyy4), _RGB32(255, 230, 255)
        GoTo nex2:
    End If
Loop

nex2:
Line (0, 0)-(_Width, _Height), _RGB32(0, 0, 0, 30), BF
ttt2 = 0
_Display
GoTo go:
'Going back to the start of Main Loop.