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.
|