Irgendwie bin ich nicht so wirklich zufriedenn damit...
Code: Alles auswählen
;seltsamerweise sind die wellen realistischer, je niedriger die Details...
InitSprite()
InitKeyboard()
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#detail
#Text_0
#Text_1
#Text_2
#Text_3
#start
#aend
#wellenlaenge
#gleich
#frame
EndEnumeration
Global detail.w
Global wasserspiegel.w
Global laenge.w
Global aend.w
Global x.w
Global warte.w
Global frame.b
frame=80
aend=20
laenge=40
wasserspiegel=200
detail=1000
Procedure Open_Window_0()
If OpenWindow(#Window_0, 290, 184, 600, 300, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Welleneinstellungen")
If CreateGadgetList(WindowID())
TrackBarGadget(#detail, 110, 230, 390, 30, 41, 2000)
TrackBarGadget(#aend, 110, 190, 390, 30, 0, 200)
TrackBarGadget(#wellenlaenge, 110, 150, 390, 30, 0, 300)
TrackBarGadget(#frame, 110, 110, 390, 30, 1, 127)
TextGadget(#Text_0, 10, 230, 100, 20, "Wasserdetails:"+Str(detail))
TextGadget(#Text_1, 10, 190, 100, 20, "Änderung:"+Str(aend))
TextGadget(#Text_2, 10, 150, 100, 20, "Wellenlänge:"+Str(laenge))
TextGadget(#Text_3, 10, 110, 110, 20, "Max FPS:" + Str(frame))
ButtonGadget(#start, 500, 220, 80, 40, "Start")
CheckBoxGadget(#gleich,10,70,180,20,"Wellenlänge=Änderung")
EndIf
EndIf
EndProcedure
Open_Window_0()
SetGadgetState(#detail,1000)
SetGadgetState(#aend,20)
SetGadgetState(#wellenlaenge,40)
SetGadgetState(#frame,frame)
1:
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventGadget
GadgetID = EventGadgetID()
If GadgetID = #detail
detail=GetGadgetState(#detail)
SetGadgetText(#Text_0, "Wasserdetails:"+Str(detail))
ElseIf GadgetID = #aend
aend=GetGadgetState(#aend)
SetGadgetText(#Text_1, "Änderung:"+Str(aend))
If GetGadgetState(#gleich)=1
laenge=GetGadgetState(#wellenlaenge)
SetGadgetText(#Text_2, "Wellenlänge:"+Str(laenge))
SetGadgetState(#wellenlaenge,aend)
EndIf
ElseIf GadgetID = #wellenlaenge
laenge=GetGadgetState(#wellenlaenge)
SetGadgetText(#Text_2, "Wellenlänge:"+Str(laenge))
If GetGadgetState(#gleich)=1
aend=GetGadgetState(#aend)
SetGadgetText(#Text_1, "Änderung:"+Str(aend))
SetGadgetState(#aend,laenge)
EndIf
ElseIf GadgetID =#frame
frame=GetGadgetState(#frame)
SetGadgetText(#Text_3,"Max FPS:"+Str(frame))
ElseIf GadgetID = #start
aend=GetGadgetState(#aend)
laenge=GetGadgetState(#wellenlaenge)
detail=GetGadgetState(#detail)
Goto start
EndIf
EndIf
Until Event = #PB_EventCloseWindow
End
start:
Dim TeilchenX(detail+1)
Dim TeilchenY(detail+1)
TeilchenY(detail+1)=wasserspiegel+10
TeilchenY(0)=wasserspiegel-10
For x=0 To detail+1
TeilchenX(x)=Int(x*(1024/detail))
TeilchenY(x)=wasserspiegel
Next
TeilchenX(1)=0
OpenScreen(1024,768,32,"wasser")
SetFrameRate(frame)
Repeat
ClearScreen(10,10,150)
If warte=0
TeilchenY(detail-40)=wasserspiegel-aend
TeilchenY(detail-20)=wasserspiegel+aend
warte=laenge
EndIf
warte=warte-1
StartDrawing(ScreenOutput())
For x=1 To detail
;TeilchenY(x-1)=TeilchenY(x-1)+1
Plot(TeilchenX(x),TeilchenY(x),RGB(0,0,255))
If TeilchenY(x)>TeilchenY(x+1) Or TeilchenY(x)>TeilchenY(x-1); Ein Komma vor der Or ändert die wellenform
TeilchenY(x)=TeilchenY(x)-1
ElseIf TeilchenY(x)<TeilchenY(x+1) Or TeilchenY(x)<TeilchenY(x-1);dito
TeilchenY(x)=TeilchenY(x)+1
EndIf
;If TeilchenY(x) < Wasserspiegel ;Sieht nur bei niedrigen Details gut aus
; TeilchenY(x) = TeilchenY(x)+0.5
;ElseIf TeilchenY(x) > Wasserspiegel
; TeilchenY(x) = TeilchenY(x)-0.4
;EndIf
LineXY(TeilchenX(x), TeilchenY(x),TeilchenX(x+1), TeilchenY(x+1),RGB(0,0,255))
Next
DrawingMode(1)
FrontColor(0,0,0)
Locate(10,10)
DrawText("Warte:"+Str(warte))
StopDrawing()
FlipBuffers()
ExamineKeyboard()
Until KeyboardReleased(#pb_key_escape)
CloseScreen()
warte=0
Goto 1: