1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
-- Flags und runners
wait = 0
naechsterBallSchmettern = true -- evtl Variablennamen wechseln
angriffsstaerke = 50 -- versetzung zum Ball je grsser desto tiefer fliegt der Service 0-64( 64 ist ca CONST_BALLRADIUS + CONST_BLOBBY_BAUCH_RADIUS)
angriffsstaerkeNeuBerechnen =false -- neuberechnung von angriffsstaerke => Variable Angriffe
-- Konstanten
CONST_FELD_LAENGE = 800
CONST_BALL_RADIUS = 31.5
CONST_GROUND_PLANE = 100
CONST_MITTE = CONST_FELD_LAENGE/2
CONST_RECHTER_RAND = CONST_FELD_LAENGE - CONST_BALL_RADIUS
CONST_BLOBBY_HOEHE = 89
CONST_BLOBBY_KOPF_RADIUS = 25
CONST_BLOBBY_BAUCH_RADIUS = 33
CONST_BLOBBY_KOPF_BERUEHRUNG = CONST_GROUND_PLANE + CONST_BLOBBY_HOEHE + CONST_BALL_RADIUS
CONST_NETZ_RADIUS = 7
CONST_NETZ_HOEHE = 157
-- Linke Berhrungsebene des Balls falls er ans Netz kommt
CONST_NETZ_LINKS = CONST_MITTE - CONST_NETZ_RADIUS - CONST_BALL_RADIUS
function OnOpponentServe()
moveto(120)
generatenaechsterBallSchmettern() -- der gegner soll den smash ja nicht vorhersagen knnen
end
function OnServe(ballready)
moveto(ballx())
wait = wait + 1
naechsterBallSchmettern = true
if ballready then
if wait > 90 then
jump()
wait = 0
end
end
end
function OnGame()
naechsterBallSchmetternFlagTesten() -- schaut ob der bot angreifen soll oder nicht
target = estimImpact(ballx(),bally(),bspeedx(),bspeedy(),CONST_BLOBBY_KOPF_BERUEHRUNG)
if target > 440 then
moveto(120)
else
if naechsterBallSchmettern then
sprungattacke(angriffsstaerke)
return
end
-- nun kmmern wir uns um die Blle die ans netz prallen
if ((target > CONST_NETZ_LINKS) and (ballx() < CONST_NETZ_LINKS)) then
netzappraller(target)
return
end
moveto(target)
end
end
function netzappraller(p_target)
moveto(CONST_NETZ_LINKS - (p_target - CONST_NETZ_LINKS) + math.abs(bspeedx()*bspeedx()*1.4))
end
function sprungattacke(p_angriffsstaerke)
moveto(ballx()-p_angriffsstaerke) -- Bei der Sprungatacke wird die Strke des gewnschten schlages angegeben
if bally() < 580 then
jump()
end
end
function naechsterBallSchmetternFlagTesten()
if (touches() == 3) then -- falls der Bot einen Anschlag Findet der Direckt punktet so wird der Wer nicht neu berechnet da er dann nciht auf 3 Berhrungen kommt
naechsterBallSchmettern = false
angriffsstaerkeNeuBerechnen = true -- da wrde es sicher auch einen Inteligenteren Test geben.
return
end
if (angriffsstaerkeNeuBerechnen == true) then
generatenaechsterBallSchmettern()
end
if (ballx() > CONST_MITTE) then -- wenn der ball auf der Anderen Seite ist soll der bot nicht naechsterBallSchmettern sein
naechsterBallSchmettern = false
return
end
if (touches() == 2) then -- nach der 2. Berhrung angreifen
if (bally() > 500) then -- erst wenn der Ball hoeher als 500 fliegt sonst gibt es keinen schnen Schmetterball.
naechsterBallSchmettern = true
end
return
end
if ((ballx() < (400-CONST_BALL_RADIUS)) and (bally() < 200) and (math.abs(bspeedx()) < 40)) then -- der ball knnte noch drber fliegen ** noch optimieren
naechsterBallSchmettern = true
return
end
end
function generatenaechsterBallSchmettern()
angriffsstaerkeNeuBerechnen = false;
angriffsstaerke = math.random(20,55) -- variiert mit der Angriffsstrke also auch mit den Anschlgen
end
function estimImpact(bx,by,vbx,vby,destY) -- erlaubt ein besseres Estimate mit ein paar umbeding ntigen Angaben
bgrav = 0.28
time1 =(-vby-math.sqrt((vby^2)-(-2*bgrav*(by-destY))))/(-bgrav)
resultX = (vbx * time1) + bx
if(resultX < CONST_BALL_RADIUS) then -- korrigieren der Appraller an der Hinteren Ebene
resultX = math.abs(CONST_BALL_RADIUS - resultX) + CONST_BALL_RADIUS
end
if(resultX > CONST_RECHTER_RAND) then -- Korrigieren der Appraller an der Rechten Ebene
resultX = CONST_FELD_LAENGE - (resultX - CONST_FELD_LAENGE)
end
return resultX
end
function cleanMoveTo(position) -- eine nette Spielerei ;)
if (posx() ~= position) then
moveto(position)
end
end
|