Code: Select all
; Snow - by Werner Albus - www.nachtoptik.de
Procedure timer_events()
Global time_event=EventTimer()
EndProcedure
ExamineDesktops()
OpenWindow(0,DesktopWidth(0)/2-100,DesktopHeight(0)/2-300,600,400,"Simple Snow")
If InitSprite() = 0 Or InitKeyboard() = 0 Or OpenWindowedScreen(WindowID(0),0,0,600,400,0,0,0,#PB_Screen_WaitSynchronization) = 0
MessageRequester("Error", "Can not init Spritesystem",0)
End
EndIf
AddWindowTimer(0,1,90)
BindEvent(#PB_Event_Timer, @timer_events())
CreateImage (0,600,400) ; Create Background
StartDrawing(ImageOutput (0))
DrawingMode ( #PB_2DDrawing_Gradient )
BackColor (0)
FrontColor ($FF901E)
LinearGradient (0,-300,0,1500)
Box (0,0,600,400)
StopDrawing()
Dim snow_x(1400) : Dim snow_y(1400); Create Snow Field
Dim settle(600) ; Addon - settle a little Snow
Dim settle_hat(200) ; Addon - settle a little Snow on the Hat
For i=1 To 1400
snow_x(i)=Random(598)+1 ; X Range -2
snow_y(i)=-Random(1400)
Next i
Repeat
If time_event=1
FlipBuffers ()
time_event=0
StartDrawing(ScreenOutput())
DrawImage(ImageID(0),0,0)
Circle(450,325,15,$EFEFEF) ; Addon - Simple Snowman :-)
Circle(450,350,20,$EFEFEF) : Circle(450,328,6,0)
Circle(450,325,7, $EFEFEF) : Circle(450,325,2,$0045FF)
Circle(450,385,30,$EFEFEF) : Circle(450,345,1,0)
Circle(443,320,1, 0) : Circle(457,320,1,0)
Circle(450,350,1, 0) : Circle(450,355,1,0)
Circle(450,370,1, 0) : Circle(450,375,1,0) ; ----
For ix=1 To 1400 ; Let it snow
go=snow_y(ix)+snow_add_y
If go>0 And go<400
If Not Random(2)
Plot(snow_x(ix)+Random(1)-1,snow_y(ix)+snow_add_y)
Else
Circle(snow_x(ix)+Random(1)-1,snow_y(ix)+snow_add_y,Random(1))
EndIf
EndIf
Next ix
snow_add_y+1
If snow_add_y>1400
snow_add_y=400
EndIf
For ii=1 To 599 ; Addon - settle a little Snow ---
If Point(ii,398)=$FFFFFF
settle(ii)=1
EndIf
If settle(ii)
Circle(ii,399,1)
EndIf
Next ii
settle(Random(600))=0
settle(Random(600))=0
settle(Random(600))=0 ;----------------------------
For ii=1 To 26 ; Addon - settle a little Snow on the Hat --
If Point(ii+436,300)=$FFFFFF
settle_hat(ii)=1
EndIf
If settle_hat(ii)
Circle(ii+436,301,1)
EndIf
Next ii
settle_hat(Random(200))=0 ;---------------------------------
Box(437,302,26,15,$828282) ;-- Addon Snowman´s Hat --
StopDrawing()
EndIf
Repeat
event=WindowEvent()
Select event
Case #PB_Event_CloseWindow
quit=1
EndSelect
Until event=0
Until quit