
Code: Select all
EnableExplicit
#xRes = 800
#yRes = 600
#Pos1 = 175
#Pos2 = 375
Structure Twister
ang.f
amp.f
x1.f
x2.f
x3.f
x4.f
EndStructure
Procedure DrawTwister(*twister.Twister)
Protected a.i
For a = 1 To 600 Step 2
*twister\x1 = ((Sin(Radian((a/*twister\amp) + *twister\ang))) * 100) + 300
*twister\x2 = ((Sin(Radian((a/*twister\amp) + *twister\ang + 90))) * 100) + 300
*twister\x3 = ((Sin(Radian((a/*twister\amp) + *twister\ang + 90 * 2))) * 100) + 300
*twister\x4 = ((Sin(Radian((a/*twister\amp) + *twister\ang + 90 * 3))) * 100) + 300
If *twister\x1 < *twister\x2
FrontColor(RGB(255, 0, 255))
LineXY(*twister\x1 - #Pos1, a, *twister\x2 - #Pos1, a)
LineXY(*twister\x1 + #Pos2, a, *twister\x2 + #Pos2, a)
EndIf
If *twister\x2 < *twister\x3
FrontColor(RGB(0, 0, 255))
LineXY(*twister\x2 - #Pos1, a, *twister\x3 - #Pos1, a)
LineXY(*twister\x2 + #Pos2, a, *twister\x3 + #Pos2, a)
EndIf
If *twister\x3 < *twister\x4
FrontColor(RGB(0, 255, 0))
LineXY(*twister\x3 - #Pos1, a, *twister\x4 - #Pos1, a)
LineXY(*twister\x3 + #Pos2, a, *twister\x4 + #Pos2, a)
EndIf
If *twister\x4 < *twister\x1
FrontColor(RGB(255, 255, 0))
LineXY(*twister\x4 - #Pos1, a, *twister\x1 - #Pos1, a)
LineXY(*twister\x4 + #Pos2, a, *twister\x1 + #Pos2, a)
EndIf
Next
*twister\ang + 2
If *twister\ang >= 360
*twister\ang = 0
EndIf
EndProcedure
InitSprite()
InitKeyboard()
OpenWindow(0, 0, 0, #xRes, #yRes, "Twister", #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, #xRes, #yRes, 0, 1, 1)
Define twister.Twister
twister\amp = 7
SetFrameRate(30)
Repeat
Repeat:Until WindowEvent() = 0
ExamineKeyboard()
StartDrawing(ScreenOutput())
DrawTwister(twister)
StopDrawing()
FlipBuffers()
ClearScreen(0)
Until KeyboardPushed(#PB_Key_Escape)