procedure TMravenec.Pohyb
procedure TMravenec.Pohyb;
var x,y,distance,i,nearest,pom,Ant_See : integer;
random_angle : integer;
begin
if (move_ant=0) or (move_ant=5) or (move_ant=3) then
begin
inc(citac);
if ((citac mod 16)=0) then if live>0 then live:=live-1;
if naklad>0 then begin
if ((citac mod 4)=0) then energy:=energy-1;
end
else if ((citac mod 8)=0) then energy:=energy-1;
if (energy=0) then live:=0;
if live=0 then Ant_Hill.curr_num_ants_really:= Ant_Hill.curr_num_ants_really -1;
Application.ProcessMessages;
Ant_See := What_I_See;
if (Ant_See=1) then
begin // vidi mraveniste
if (naklad>0) then
begin
Ant_Hill.Put_Wood_Into_Hill(naklad,Ant_Hill.curr_size_ant_hill);
naklad:=0;
Smer:=Smer+Pi/2;
Step;
end
else Step;
end
else if (Ant_See=2) then
begin
Step;
end
else if (Ant_See=3) then // kamen
begin
repeat
random_angle:=random(360);
until random_angle<>0;
smer:=Pi/180*random_angle;
delka:=random(20)+20;
citac:=0;
Smer:=Smer+Pi;
Step;
end
else if (Ant_See=4) then // studnu
begin
if (energy<=100) then energy:=energy+5 // rovnost jen v dokumentaci
else begin
repeat
random_angle:=random(360);
until random_angle<>0;
smer:=Pi/180*random_angle;
delka:=50;
citac:=0;
// Smer:=Smer+Pi;
Step;
end;
end
else if (Ant_See=5) then // misto, kam ma jit
begin
move_ant:=2;
end
else if (Ant_See=0) then // nic
begin
randomize;
x:=round(xx);
y:=round(yy);
if (move_ant=3) then Go(kam_x,kam_y)
else
if ((citac mod inteligence)=0) or (citac>=delka) then
begin
distance:=800;
nearest:=-1;
if naklad>0 then
begin
Find_Ant_Hill;
end
else if (energy>50) then begin
if (uloha=0) then Find_Egg
else Find_Wood;
end
else Find_Well;
if citac>=delka then
begin
if naklad=0 then
begin
delka:=random(20)+20;
citac:=0;
if (energy>50) then begin
if (uloha=0) then Find_Egg
else Find_Wood;
end
else Find_Well;
end
else
begin
Find_Ant_Hill;
end;
end;
end;
Step;
end
else if (Ant_See>=10) and (Ant_See<=100) then // rovnbost jen v dokumentaci
begin// vidi vajicko
if (naklad=0) and (energy>50) and (live<=90) then
begin
naklad:=Ant_See;
Ant_Hill.Data_Egg[Ant_See-10].where:=4; // mravenec nese vajicko a to neni nevykresluje
Find_Ant_Hill;
end
else if (naklad=0) then // malo energie pro noseni vetvisek
begin
end;
Step;
end
else if (Ant_See>=100) then
begin// vidi vetvicku
if (naklad=0) and (energy>50) and (live<=90) then
begin
naklad:=Ant_See;
Ant_Hill.Data_Wood[naklad-100].where:=4; // mravenec nese vetsicku a ta neni nevykresluje
Ant_Hill.curr_num_carried_woods := Ant_Hill.curr_num_carried_woods+1;
Ant_Hill.curr_num_woods_really := Ant_Hill.curr_num_woods_really -1;
Find_Ant_Hill;
end;
Step;
end;
end;
Zobraz;
end;
|