Toivottavasti joku tästä oppii tekemään edes tuon taivaan, maan kohalla meni vähän hankalammaksi, ja rumemmaksi
Code: Select all
SCREEN 1000, 750,0,2
SetWindow "Moukarinheitto",3
FrameLimit 40
SW=ScreenWidth()
SH=ScreenHeight()
SandAmount=20 'Hiekkapartikkeleiden määrä
Dim SandX(SandAmount), SandY(SandAmount), SandVelX#(SandAmount), SandVelY#(SandAmount) 'Hiekan muuttujat(sijainti & nopeus)
BG=MakeObjectFloor()
SkyW=1000 'Taivas-tekstuurin leveys
SkyH=700 'Taivas-tekstuurin korkeus
CloudSize=100 'Pilvien koko
Sky=MakeImage(SkyW,SkyH) 'Tehdään kuva taivaaksi
DrawToImage Sky
Color Rand(80,120),Rand(80,130),Rand(160,250) 'Arvotaan sinertävä väri taivaaksi
Box 0,0,SkyW,SkyH 'Väritetään sillä taivas
For i=1 To Int((SkyW+SkyH)/100) 'Tehdään pilviä taivaan koon mukaan, muuta jakajaa jos haluat muuttaa pilvien tiheyttä
BW=Rand(10,CloudSize) 'Uuden pilven leveys
BX=Rand(SkyW-CloudSize-BW) 'Uuden pilven X-sijainti
BH=Rand(10,CloudSize) 'Uuden pilven korkeus
BY=Rand(SkyH-CloudSize-BH) 'Uuden pilven Y-sijainti
Color 240+Rand(10),240+Rand(10),240+Rand(10) 'Arvotaan vaalea väri pilveä varten
For X1=BX To BX+BW 'Käydään läpi jokainen vaakasijainti pilven sisällä
For Y1=BY To BY+BH 'ja pystysijainti myös!
S=Rand(CloudSize) 'Tämä määrää pilven yksittäisen "palleron" koon
If Rand(30)=0 Then Ellipse X1,Y1,S+Rand(-5,5),S+Rand(-5,5)
Next Y1
Next X1
Next i
DrawToScreen
PaintObject BG,Sky
PositionObject BG,0,0,-1 'Siirretään taivasta "taaemmaksi"
Ground1=MakeImage(SW,100) 'Tehdään maan tekstuuri ruudun levyiseksi
DrawToImage Ground1
Color Rand(170,200),Rand(150,180),Rand(50) 'Maanläheisiä värejä
Box 0,30,SW,70 'Väritetään tausta reikien varalta
For X1=0 To SW/10
For Y1=2 To 9
Color 220-Y1*7,170-Y1*10,Rand(5) 'Maanläheisiä värejä
RY=Rand(-10,5)
RR=Rand(15,35)
Circle X1*10,Y1*10+RY,RR
If X1>SW/10-3 Then Circle X1*10-SW,Y1*10+RY,RR
Next Y1
Next X1
DrawToScreen
Ground2=CloneImage(Ground1) 'Tehdään kopio maasta, jotta saadaan jatkuva tekstuuri aikaiseksi
Dim VelX#(1),VelY#(1),X#(1),Y#(1),Dis#,Ang#
Const Grav=-.4 'Painovoiman suuruus
Joustavuus=20 'Moukarin nauhan(?) oletus joustavuus
PositionCamera 100000,300 'Purkkaa joka estää maailmanlopun(huomaat kyllä mistä puhun jos muutat nollaksi ja heität väärään suuntaan)
X(1)=100000
DrawToWorld ON
Repeat
For s=0 To SandAmount 'Hiekkapartikkeleiden päivittäminen
Color 180+s*3,150-s*2,30 'Valitaan sävy(ei arvota, koska se aiheuttaa hiekan välkkymistä)
Line SandX(s),SandY(s),SandX(s)+SandVelX(s),SandY(s)+SandVelY(s)
SandX(s)=SandX(s)+SandVelX(s) 'Liikutetaan
SandY(s)=SandY(s)+SandVelY(s) 'hiekkaa
SandVelX(s)=SandVelX(s)*.9 'Hidastetaan
SandVelY(s)=SandVelY(s)*.9 'myös
SandVelY(s)=SandVelY(s)+Grav 'Painovoima
Next s
DrawImage Ground1,-CameraX() Mod SW,SH-100+CameraY() 'Asetetaan maa-tekstuurit niin,
DrawImage Ground2,-CameraX() Mod SW+SW,SH-100+CameraY() 'että syntyy jatkuvuuden vaikutelma
MX=MouseWX() 'Otetaan ylös hiireen sijainti
MY=MouseWY()
If Heitetty=0 Then 'Jos pallo kädessä
X(0)=MX 'Asetetaan nauhan pää hiireen
Y(0)=MY
VelY(0)=0
VelX(0)=0
Dis=Distance(X(1),Y(1),MX,MY) 'Haetaan etäisyys hiirestä palloon
Ang=GetAngle(X(1),Y(1),MX,MY) 'ja kulma myös
VelX(1)=CurveValue(Cos(Ang)* Dis,VelX(1),Joustavuus) 'Asetetaan edellä hankittujen tietojen
VelY(1)=CurveValue(Sin(Ang)*-Dis,VelY(1),Joustavuus) 'mukaan pallolle nopeudet
PositionCamera CameraX(),CurveValue(0,CameraY(),30) 'Liikutetaan kameraa pelkästään pystysuunnassa maantasolle
Else
Dis=Distance(X(0),Y(0),X(1),Y(1)) 'Haetaan etäisyys nauhan päästä palloon
Ang=GetAngle(X(0),Y(0),X(1),Y(1)) 'sekä kulma
VelX(0)=CurveValue(Cos(Ang)* Dis,VelX(0),Joustavuus*2) 'Lasketaan nopeudet
VelY(0)=CurveValue(Sin(Ang)*-Dis,VelY(0),Joustavuus*2) 'nauhan päälle
PositionCamera CurveValue(X(1),CameraX(),7),CurveValue(Y(1)/30,CameraY(),7) 'Kamera seuraa palloa
If CameraY()<0 Then PositionCamera CameraX(),0 'Estetään kameran putoaminen maan alle
EndIf
If MouseHit(1) Then
StartX=MX 'Heitetään pallo tai
Heitetty=(Heitetty+1) Mod 2 'otetaan se kiinni
EndIf
For i=0 To 1
VelY(i)=VelY(i)+Grav 'Päivitetään fysiikat
VelX(i)=VelX(i)*.99
VelY(i)=VelY(i)*.99
If Y(i)<-SH/2+90 Then 'Törmäys maahan
VelY(i)=-Vely(i)*.4:Y(i)=-SH/2+90:VelX(i)=VelX(i)*.8
If i = 1 Then 'Heitetään hiekkaa jos osuja oli pallo
For s=0 To SandAmount
SandX(s)=X(i)
SandY(s)=Y(i)-10
SandVelX(s)=Cos(Rand(0,180))*Rand(1,5)+VelX(i)*Rnd(1.5)
SandVelY(s)=Sin(Rand(0,180))*Rand(1,5)+VelY(i)*Rnd(1.5)
Next s
EndIf
EndIf
X(i)=X(i)+VelX(i)
Y(i)=Y(i)+VelY(i)
Next i
Color 0,0,0
Line X(0), Y(0), X(1), Y(1) 'Piirtäminen
Circle X(1)-15,Y(1)+15,30
Text 1,1,"Joustavuus: "+Joustavuus+" Nuolinäppäimistä muuttaa"
Joustavuus=Joustavuus+UpKey()-DownKey()
If Heitetty=0 Then StartX=X(1)
Text 1,15,"Matka: "+(Int(X(1)-StartX))
If Y(1)>SH/2 Then
X1=X(1)-CameraX()+SW/2
If X1>SW-TextWidth(Y(1)+SW/2) Then X1=SW-TextWidth(Y(1)+SW/2)
If X1<10 Then X1=10
Text X1,30,Int(Y(1)+SW/2)
EndIf
DrawScreen
DrawGame
Until EscapeKey()