File: axji-0-2.lua

package info (click to toggle)
blobby 0.8-dfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 5,612 kB
  • ctags: 5,697
  • sloc: cpp: 33,077; ansic: 12,083; xml: 55; makefile: 3
file content (140 lines) | stat: -rw-r--r-- 3,140 bytes parent folder | download | duplicates (2)
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
140
function OnOpponentServe()
	moveto(120)
end

-- Flags und runners
wait = 0
aggro = true -- evtl Variablennamen wechseln
aggroservice = 50 -- versetzung zum Ball je gr�sser desto tiefer fliegt der Service 0-64(  64 ist ca CONST_BALLRADIUS + CONST_BLOBBY_BAUCH_RADIUS) 

-- Korrekturfaktor f�r die Flugberechnung
korrekturfaktor = 7

-- Knostanten
CONST_BALL_RADIUS = 31.5

CONST_MITTE = 400

CONST_BLOBBY_HOEHE = 89
CONST_BLOBBY_KOPF_RADIUS = 25
CONST_BLOBBY_BAUCH_RADIUS = 33

CONST_NETZ_RADIUS = 7
CONST_NETZ_HOEHE = 157

-- Linke Ber�hrungsebene des Balls falls er ans Netz kommt
CONST_NETZ_LINKS = CONST_MITTE - CONST_NETZ_RADIUS - CONST_BALL_RADIUS 


function OnServe(ballready)
	moveto(ballx())
	wait = wait + 1 
	aggro = true
	if ballready then
		if wait > 90 then
			jump()
			wait = 0
		end
	end
end	

function OnGame()
	aggroflagtesten() -- schaut ob der bot aggro werden soll oder nicht
	target = estimImpact()
	
	if aggro then
		sprungattacke(aggroservice)
		return
	end

	-- Zielbestimmung --> optimierung weniger CPU power n�tig ;)
	if (target < CONST_BALL_RADIUS) then -- ball wird hinten apprallen
		vonhinten(target)
		return
	end
	
	-- nun k�mmern wir uns um die B�lle die ans netz prallen
	if ((target > CONST_NETZ_LINKS) and (ballx() < CONST_NETZ_LINKS)) then
		netzappraller(target)
		return
	end
	
	if (bspeedx() < 10 ) then
		moveto(target - 20)
	else
		moveto(target)
	end

end


function netzappraller(p_target)
		--moveto(netzlinks - (netzlinks - estimate()))
		moveto(CONST_NETZ_LINKS - (p_target - CONST_NETZ_LINKS) + math.abs(bspeedx()*bspeedx()*1.4))
end

function vonhinten(p_target)
		p_target = CONST_BALL_RADIUS + math.abs(CONST_BALL_RADIUS-p_target)
		--das ist der fall wenn  der Ball hinten abprallt
		moveto(p_target-math.abs(bspeedx()*bspeedx()*1.1))
end

function sprungattacke(p_aggroservice)
		moveto(ballx()-p_aggroservice)
		if bally() < 580 then
			jump()
		end
end

function aggroflagtesten()
	if (ballx() > CONST_MITTE) then
		aggro = false 
		return
	end
	
	if (touches() == 2) then
		aggro = true
		return
	end

	if ((ballx() < (400-CONST_BALL_RADIUS)) and (bally() < 200) and (math.abs(bspeedx()) < 40)) then -- der ball k�nnte nohc dr�ber fliegen ** noch optimieren
		aggro = true
		return
	end
end

function estimTime()
	bgrav = 0.248	
	-- standart Realfloor ist 144 
	-- warscheinilcher Realflfoor f�r Ball + blobby ist 144 (der Ball muss schon berechnet worden sein)
	realFloor = 144

    by=bally()
    vby=bspeedy()-600

	time1 =(-vby+math.sqrt((vby^2)-(4*-0.5*bgrav*(by-realFloor))))/(-2*0.5*bgrav)
    time2 =(-vby-math.sqrt((vby^2)-(4*-0.5*bgrav*(by-realFloor))))/(-2*0.5*bgrav)
    
    if time1>time2 then
        time3 = time1
    else
        time3 = time2
    end
	
	return time3

	--ist die Funktion nicht auf folgende aussage minimierbar ?
	-- time1 =(-vby-math.sqrt((vby^2)-(-2*bgrav*(by-realFloor))))/-bgrav
	-- return time1
end

function estimImpact()
	--diese Funktion sollte die einschlagkoordinaten auf K�pfh�he Rechnen
    bx=ballx()
    vbx=bspeedx()
    
    time3 = estimTime()
    resultX = (vbx * time3) + bx    
    
    return resultX
end