Pitämällä välilyöntiä pohjassa voi 'kääntää' slimen (LR määrittää mihin suuntaan slime katsoo, 0 - oikealle, 1 - vasemmalle)
Kysymyksiä saa esittää. En silti haluaisi ruveta selittämään kaikkia laskuja.
Funktiota saa käyttää vapaasti (silmillä ja ilman)
Code: Select all
//Slime 360
SCREEN 730,375,32
ClsColor 0,0,255
Repeat
'SlimeAngle=GetAngle(100,100,MouseX(),MouseY())
SlimeAngle=SlimeAngle+1
If SlimeAngle>=360 Then SlimeAngle=SlimeAngle-360
Color 255,255,255
Text 0,0,"SlimeAngle: "+SlimeAngle
Text 0,10,"MOD: "+(SlimeAngle Mod 90)
Color 255,0,0
Slime360(100,100,37,SlimeAngle,MouseX(),MouseY(),KeyDown(cbkeyspace))
DrawScreen
Forever
//-------------------------------
Function Slime360(x,y,Radius,Angle,BallX,BallY,LR=0)
//Katsotaan josko kulma on 0, 90, 180 tai 270 (tai 360)
If Angle Mod 90 = 0 Then
If Angle = 0 Or Angle = 360 Then //jos kulma on 0 (tai 360)
For i=1 To Radius
ang#=ASin(Float(i)/Float(Radius))
Box x-Cos(ang#)*Radius,y-i,Int(Cos(ang#)*Radius)*2,1
Next i
EndIf
If Angle = 180 Then //jos kulma on 180
For i=1 To Radius
ang#=ASin(Float(i)/Float(Radius))
Box x-Cos(ang#)*Radius,y+i,Int(Cos(ang#)*Radius)*2,1
Next i
EndIf
If Angle = 90 Then //jos kulma on 90
'For i=1 To Radius
' ang#=ASin(Float(i)/Float(Radius))
' Box x-i,y-Cos(ang#)*Radius,1,Int(Cos(ang#)*Radius)*2
'Next i
For i=0 To Radius
ang#=ASin(Float(i)/Float(Radius))
Box x-Cos(ang#)*Radius,y-i,Cos(ang#)*Radius,1
Box x-Cos(ang#)*Radius,y+i,Cos(ang#)*Radius,1
Next i
EndIf
If Angle = 270 Then //jos kulma on 270
'For i=1 To Radius
' ang#=ASin(Float(i)/Float(Radius))
' Box x+i,y-Cos(ang#)*Radius,1,Int(Cos(ang#)*Radius)*2
'Next i
For i=0 To Radius
ang#=ASin(Float(i)/Float(Radius))
Box x,y-i,Cos(ang#)*Radius,1
Box x,y+i,Cos(ang#)*Radius,1
Next i
EndIf
Else //jos kulma EI ole 0, 90, 180 tai 270 (tai 360)
If Angle < 90 Then //jos kulma on 0-90
Highest=y-Radius
Lowest=y+Sin(Angle)*Radius
Middle=y-Sin(Angle)*Radius
For i=0 To Lowest-Highest
ang#=ASin(Float(Radius-i)/Float(Radius))
If Highest+i<=Middle Then
Box x-Cos(ang#)*Radius,Highest+i,Int(Cos(ang#)*Radius)*2,1
Else
Box x-Cos(ang#)*Radius,Highest+i,Int(Cos(ang#)*Radius)+((y-Highest)-i)/Tan(Angle),1
EndIf
Next i
EndIf
If Angle > 90 And Angle < 180 Then //jos kulma on 90-180
Highest=y-Sin(Angle)*Radius
Lowest=y+Radius
Middle=y+Sin(Angle)*Radius
For i=Radius-(y-Highest) To Radius*2
ang#=ASin(Float(Radius-i)/Float(Radius))
If y-Radius+i>=Middle Then
Box x-Cos(ang#)*Radius,y-Radius+i,Int(Cos(ang#)*Radius)*2,1
Else
Box x-Cos(ang#)*Radius,(y-Radius)+i,Int(Cos(ang#)*Radius)+(Radius-i)/Tan(Angle),1
EndIf
Next i
EndIf
If Angle > 180 And Angle < 270 Then //jos kulma on 180-270
Highest=y+Sin(Angle)*Radius
Lowest=y+Radius
Middle=y-Sin(Angle)*Radius
For i=Radius-(y-Highest) To Radius*2
ang#=ASin(Float(Radius-i)/Float(Radius))
If y-Radius+i>=Middle Then
Box x-Cos(ang#)*Radius,y-Radius+i,Int(Cos(ang#)*Radius)*2,1
Else
Box x+(Radius-i)/Tan(Angle),(y-Radius)+i,Int(Cos(ang#)*Radius)-(Radius-i)/Tan(Angle),1
EndIf
Next i
EndIf
If Angle > 270 Then //jos kulma on 270-360
Highest=y-Radius
Lowest=y-Sin(Angle)*Radius
Middle=y+Sin(Angle)*Radius
For i=0 To Lowest-Highest
ang#=ASin(Float(Radius-i)/Float(Radius))
If Highest+i<=Middle Then
Box x-Cos(ang#)*Radius,Highest+i,Int(Cos(ang#)*Radius)*2,1
Else
Box x+((y-Highest)-i)/Tan(Angle),Highest+i,Int(Cos(ang#)*Radius)-((y-Highest)-i)/Tan(Angle),1
EndIf
Next i
EndIf
EndIf
//SILMÄ - Ilman tätä tavallinen puoliympyrä
eyesize=Radius/2.5
Color 255,255,255
Circle x+Cos(Angle+45+90*LR)*(Radius-eyesize/2)-eyesize/2,y-Sin(Angle+45+90*LR)*(Radius-eyesize/2)-eyesize/2,eyesize,1
Color 0,0,0
Circle x+Cos(Angle+45+90*LR)*(Radius-eyesize/2)+Cos(GetAngle(x+Cos(Angle+45+90*LR)*(Radius-eyesize/2),y-Sin(Angle+45+90*LR)*(Radius-eyesize/2),BallX,BallY))*eyesize/4-eyesize/4,y-Sin(Angle+45+90*LR)*(Radius-eyesize/2)-Sin(GetAngle(x+Cos(Angle+45+90*LR)*(Radius-eyesize/2),y-Sin(Angle+45+90*LR)*(Radius-eyesize/2),BallX,BallY))*eyesize/4-eyesize/4,eyesize/2,1
EndFunction
Middle on y-kordinaatti, jossa 'tasainen osuus' muuttuu 'kaartevakis osuudeksi', ei matalin eikä korkein kohta
Lowest on matalin y-kordinaatti piirrettävässä puoliympyrässä