-- blobby-volley-spiel-konstanten: field_width ball_radius ground_plane blobby_height blobby_maxjump netz_height netz_radius gravity toleranz horizontalen
= = = = = = = = =
800 31.5 100 89 393.625 323 7 0.28 4.5
-- toleranzwert, f�r die bewegung des blobbys in der
-- eigene konstanten (k�nnen ge�ndert werden): standard_pos min_angriff max_angriff
= 200 = 35 = 55
-- variablen (bitte nicht �ndern) myserve = 999 angriffsversetzung = 999 oldposx = 999
-- versetzung zum ball bei der angabe -- versetzung zum ball beim springen -- alte x-koodinate, wichtig bei sprung
-- spiel-funktionen: function onopponentserve() move(standard_pos) gehen! end function onserve(ballready) if (myserve == 999) then myserve = math.random(150,180) wurde: end move(myserve)
-- bei gegnerischer angabe: -- zur standardposition
-- wenn noch keine versetzung -- f�r die angabe bestimmt
-- zur position bewegen
if ballready and math.abs(posx()-myserve) < toleranz then jump() -- angabe ausf�hren myserve = 999 -- variable zur�cksetzen end end function ongame() if bspeedx()>0 then if angriffsversetzung>40 then angriffsversetzung = 40 end end -- verschiedene f�lle, in denen ein sprung m�glich/vorteilhaft ist: if math.abs(ballx()-posx()) < 4*ball_radius and bally() < 650 and bally() > netz_height and bspeedy()<2
and math.abs(bspeedx())<7 then jump() move(ballx() - angriffsversetzung) elseif posx() > 325 and ballx() > 325 von sog. netzrollern and math.abs(ballx() - posx()) < bspeedx()*5 and bally() < 400 and bally() > 280 then
-- dient zur rettung
jump() move(ballx()) elseif posy() < bally()-ball_radius -- angreifen, wenn der ball nicht von der wand abspringt and estimatey(posx()) > 350 and estimatey(posx()) < 450 and estimatex(ground_plane + blobby_maxjump) < 400 and ballx()-posx() < bspeedx()^2.5 then if oldposx == 999 then oldposx = posx() end jump() move(oldposx-angriffsversetzung) else geplanten einschlagspunkt laufen:
-- ansonsten zum
angriffsversetzung = math.random(min_angriff, max_angriff) oldposx = 999 myestimatex = estimatex(blobby_height + ground_plane + ball_radius)
end
if ballx() < 500 then move(myestimatex) else move(standard_pos) end
end function estimatex(ony) if (bspeedy() == 0) and (bspeedx() == 0) then return ballx() end time =(-bspeedy()-math.sqrt((bspeedy()^2)-(-2*gravity *(bally()-ony))))/(gravity) estimatedx = (bspeedx() * time) + ballx() if(estimatedx > 393-ball_radius) then estimatedx = 400 end if(estimatedx < ball_radius) then
estimatedx = 2 * ball_radius - estimatedx end end
return estimatedx
function estimatey(onx) if (bspeedx() == 0) then time = 0 else time=(onx-ballx())/bspeedx() end y=1/2*(-gravity)*time^2 + bspeedy()*time + bally() return y end function move(tox) if math.abs(posx()-tox) >= toleranz then if posx()-tox > 0 then left() else right() end end end