Kerrankin jaksoin paneutua ongelmaan oikein kunnolla. Tässä sinulle melkein valmis runko biljardipeliin
Code: Select all
SCREEN 640, 480
// Alustetaan kaikki muuttujat floateiksi
x# = ScreenWidth()/2 // X koordinaatti
y# = ScreenHeight()/2 // Y koordinaatti
xforce# = 0 // X suunnan vektori
yforce# = 0 // Y suunnan vektori
force# = 0 // Force (voima)
pforce# = 0 // Pending force (odottava voima)
angle# = 0 // Angle (kulma)
Const KITKA = 0.99
Repeat
// Jos voima ON suurempi kuin 0
If force > 0 Then
// Vähennetään voimaa
force = Round(force * KITKA, 2)
xforce = Round(xforce * KITKA, 2)
yforce = Round(yforce * KITKA, 2)
Else // Jos voima ei ole suurempi kuin 0
// niin piiretään tähtäinviiva
Line MouseX(), MouseY(), x, y
EndIf
// Jos painetaan hiirestä niin kasvatetaan odottavaa voimaa
If MouseDown(1) And force <= 0 Then
// Kasvatetaan odottavaa voimaa
pforce = pforce + 0.1
EndIf
// Rajoitetaan odottavan voiman suuruutta
If pfocre > 20 Then pforce = 20
// Kun päästetään hiiri ylös niin lyödään palloa
If MouseUp(1) And force <= 0 And pforce > 0 Then
// Pistetään voimaan odottava voima ja nollataan odottava voima
force = pforce
pforce = 0
// Muutetaan kulma hiiren ja pallon suunnan mukaisesti
angle = GetAngle(MouseX(), MouseY(), x, y)//GetAngle(x, y, MouseX(), MouseY())
// Lasketaan vektorien voimien suuruudet
xforce = Cos(angle) * force
yforce = - Sin(angle) * force
EndIf
// Muutetaan pallon koordinaatteja
x = x + xforce
y = y + yforce
// Estetään palloa menemästä rajojen ulkopuolelle
If x < 0 Or x > ScreenWidth() Then xforce = -xforce
If y < 0 Or y > ScreenHeight() Then yforce = -yforce
// Piirretään pallo
Color 255, 255, 255
Circle x-8, y-8, 16, True
// Piirretään tekstejä
Text 0, 0, "x: "+x
Text 0, 13, "y: "+y
Text 0, 26, "force: "+force
Text 0, 39, "pforce: "+pforce
Text 200, 0, "xforce: "+xforce
Text 200, 13, "yforce: "+yforce
Text 200, 26, "angle: "+angle
DrawScreen
Forever
Function Round(value#, ac)
strvalue$ = Str(value#)
lefts$ = GetWord(strvalue$, 1, ".")
rights$ = GetWord(strvalue$, 2, ".")
rounded# = Float(lefts$ + "." + Left(rights$, ac))
Return rounded
EndFunction