fb:porticula NoPaste
Bewegte, transparente Kreise mit Farbwechsel
Uploader: | nemored |
Datum/Zeit: | 18.07.2014 17:41:38 |
' "Rauch"-Kreise (Regenbogeneffekt)
' Idee von dreael; Bewegung und Farbwechsel von nemored
#Define Fensterbreite 640
#Define Fensterhoehe 480
#Define Minimalradius 2
#Define Maximalradius 50
#Define Streifenbreite 2.0
#Define Streifenzahl 10
#Define AnzahlKreise 20
#Include Once "fbgfx.bi"
Randomize
Type Kreis
As Single x, y, vx, vy, r, dr
As Integer farbe
End Type
Function Quadrat(s As Single) As Single
Quadrat = s * s
End Function
' Hier die Kreise unserer "Wolke"
Dim regenbogenfarben(47) As UInteger
For i As Integer = 1 To 8
regenbogenfarben(i- 1) = RGB( 0, 0, i*32-1)
regenbogenfarben(i+ 7) = RGB( 0, i*32-1, 255)
regenbogenfarben(i+15) = RGB( 0, 255, 256-i*32)
regenbogenfarben(i+23) = RGB(i*32-1, 255, 0)
regenbogenfarben(i+31) = RGB( 255, 256-i*32, 0)
regenbogenfarben(i+39) = RGB(256-i*32, 0, 0)
Next
Dim k(AnzahlKreise) As Kreis
For i As Integer = LBound(k) to UBound(k)
With k(i)
.x = Rnd*Fensterbreite
.y = Rnd*Fensterhoehe
.vx = Rnd*10 - 5
.vy = Rnd*10 - 5
.r = Rnd*(Maximalradius-Minimalradius) + Minimalradius
.dr = Rnd - .5
.farbe = Int(Rnd*(Ubound(regenbogenfarben) + 1))
End With
Next
ScreenRes Fensterbreite, Fensterhoehe, 32, 1, FB.GFX_ALPHA_PRIMITIVES
Width 80, 30
Dim i As Integer, y As Integer, x As Integer, abstMin As Single, abst As Single
Dim j As Integer, f As Integer
Dim As Any Ptr hintergrund = ImageCreate(Fensterbreite, Fensterhoehe)
Dim As Any Ptr vordergrund = ImageCreate(Fensterbreite, Fensterhoehe)
For i=1 To 30
For j=1 To 61 Step 20
Locate i, j
Print "Kreise mit CIRCLE *";
Next j
Next i
Get (0, 0)-(Fensterbreite-1, Fensterhoehe-1), hintergrund
Do
' neue Kreisposition
For i = LBound(k) To UBound(k)
With k(i)
.x += .vx
If .x < 0 Or .x > Fensterbreite Then
.vx *= -1
.x += 2*.vx
End If
.y += .vy
If .y < 0 Or .y > Fensterhoehe Then
.vy *= -1
.y += 2*.vy
End If
.r += .dr
If .r < Minimalradius Or .r > Maximalradius Then
.dr *= -1
.r += 2*.dr
End If
End With
Next
' zeichnen
Line vordergrund, (0, 0)-(Fensterbreite-1, Fensterhoehe-1), rgb(255, 0, 255), BF
For i = Streifenzahl To 0 Step -1
For j = LBound(k) To UBound(k)
If i > 0 Then
f = k(j).farbe + i
If f > UBound(regenbogenfarben) Then f -= UBound(regenbogenfarben)
Circle vordergrund, (k(j).x, k(j).y), k(j).r + CSng(i) * Streifenbreite, regenbogenfarben(f), , ,1.0, F
Else
Circle vordergrund, (k(j).x, k(j).y), k(j).r + CSng(i) * Streifenbreite, RGB(255, 0, 255), , ,1.0, F
k(j).farbe += 1
if k(j).farbe > UBound(regenbogenfarben) Then k(j).farbe = 0
End If
Next j
Next i
ScreenLock
Put (0, 0), hintergrund, Pset
Put (0, 0), vordergrund, Trans
ScreenUnlock
Sleep 50
Loop Until Len(Inkey)