Пример моего говнокода образца 2001 года из игры Space War 2.
procedure taran;
var i,j:integer;
t1,t2,t3,t4:extended;
tt:tfas;
begin
for i:=1 to ships do
begin
if (not s^[i].enable)and((s^[i].ai>0)or(game=arcade)) then
begin
tt.n:=i;
tt.tip:=fship;
s^[i].init(getshipx,getshipy,0,0,8,tt,setup.ship[i].tip,getpesh(i));
inc(s^[i].die);
end;
for j:=1 to maxman do
if (m^[j].enable)then
if sqrt(sqr(s^[i].x-m^[j].x)+sqr(s^[i].y-m^[j].y))
m^[j].damage(1,s^[i].id);
for j:=1 to ships do
if (s^[j].enable)and(i<>j)then
if ((ship[s^[i].tip].dest>ship[s^[j].tip].dest))and(cgame=tank) then
begin
if sqrt(sqr(s^[i].x-s^[j].x)+sqr(s^[i].y-s^[j].y))
then
s^[j].hack(ship[s^[i].tip].taran,s^[i].mx,s^[i].my,s^[i].id);
end
else
if((ship[s^[i].tip].dest and ship[s^[j].tip].dest)>0) then
if sqrt(sqr(s^[i].x-s^[j].x)+sqr(s^[i].y-s^[j].y))
then
begin
t1:=s^[i].dx; t2:=s^[i].dy; t3:=s^[j].dx;t4:=s^[j].dy;
s^[i].hack(abs(t1-t3)+abs(t2-t4),s^[j].mx,s^[j].my,s^[j].id);
s^[j].hack(abs(t1-t3)+abs(t2-t4),s^[i].mx,s^[i].my,s^[i].id);
if (s^[i].canmove)and(s^[j].canmove) then
begin
s^[i].dx:=t3; s^[i].dy:=t4; s^[j].dx:=t1; s^[j].dy:=t2;
end;
s^[i].move; s^[j].move;
if sqrt(sqr(s^[i].x-s^[j].x)+sqr(s^[i].y-s^[j].y))
begin
s^[i].dx:=-t1; s^[i].dy:=-t2; s^[j].dx:=-t3; s^[j].dy:=-t4;
s^[i].move; s^[j].move;
end;
end;
end;
end;
А вот код AI:
xx:=r(x-sx); yy:=r(y-sy);
dd:=sqrt(sqr(xx)+sqr(yy));
time:=dd/getweapspeed;
if time>30 then time:=30;
xx:=xx+time*dx-time*sdx;
yy:=yy+
sqr(time)*land^.g/2*byte( stand)+time* dy
-(sqr(time)*land^.g/2*byte(not sstand)+time*sdy);
if (xx>0)then m:=pi+arctan(yy/xx) else
if (xx<0)then m:=arctan(yy/xx) else m:=pi/2;
while lx-m>pi do m:=m+pi2;
while lx-m<-pi do m:=m-pi2;
if lx
begin
key(kleft);
if (cgame=tank)and(id.tip=fship)then key(kforward);
end else{error}
if lx>m then
begin
key(kright);
if (cgame=tank)and(id.tip=fship)then key(kforward);
end;
{ if abs(m-lx)<0.1 then }key(kfire1);
if dd>100 then key(kforward);
if dd<50 then key(kback);
if dd<100 then key(kfire2);
key(krepair);
Даже могу просто скопировать функцию прицеливания с упреждением для Space War 3 без составления формулы :)
Да, кстати, я делаю Space War 3.