|
Na ploše 800x600 se pohybují mravenci a sbírají větvičky a staví mravešniště, které se zvětšuje. |
|
Dále sbírají vajíčka, co klade královna a nosí se do mraveniště. Tam se z nich v zápětí vylíhnou malí mravenci. |
|
Mravenci jsou rozdělěni na sběrače vajíček a větviček |
|
Mravenci si hlídají svoji energii a pokud se menší než 50% musí se dojít napít ke studni. |
|
Právě narozený mravenec nemůže sbírat větvičky. Musí čekat, až trochu vyroste. |
|
V poli se pohybuje jeste královna, která rodí nová vajíčka. |
|
Každému mravenci se ubírá jedo život. Pokud mu dojde energie, také umře. |
|
Při pohybu jim brání kameny, kterým se musi vyhnout. |
|
Mravenci sami vzhledávají větvičky - možno zobrazit přesné vyhledávání |
|
Ihned po sebrání větvičky najdou cestu do mraveniště |
|
Jsou možné tři způsoby ovládání (Stop, Control, Monitor) |
|
Dá se měnit rychlost celé simulace |
Zdrojové kódy jednotlivých procedur |
1) | Načtení posledního nastevení a přířazení
Informace jsou uloženy v INI souboru
zdrojový kód
|
2) | Generování pozic obrázků obrázků a hodnot
Použito pomocné pole, aby se obrázky nepřekrývaly
zdrojový kód
|
3) | Vykreslení pozadí
Komponenta DXDraw, obrázky v DXImageList
zdrojový kód
|
4) | Inicializace mravenců
zdrojový kód
|
5) | Vyšetření kolizí s objekty
Funkce vrací hodnotu, objektu, na který mravenec narazil
zdrojový kód
|
6) | Pohyb mravenců
Rozhodování podle výsledku funkce What_I_See
zdrojový kód
|
7) | Pohyb královny
Rozhodování podle výsledku funkce What_I_See
zdrojový kód
|
8) | Zobrazení mravence
Vykreslování animací o 3 snímcich
zdrojový kód
|
9) | Položení větvičky a vajička do mraveniště
pozn. malí mravenci nemohou nic nosit
zdrojový kód
|
10) | Zvětšování mraveniště
Čím větší mraveniště, tím pomaleji se zvětšuje, max 400 px
zdrojový kód
|
11) | Přidání větviček a vajíček
Obojí náhodně
zdrojový kód
|
12) | Jednotlivé módy ovládání
Stop, Control a Monitor
zdrojový kód
|
Popis datových struktur
Objekt Mravenec
TAnt = class
xx,yy :real;
delka,citac :byte;
index: integer;
smer : real;
snimek : byte;
pocetSnimku : byte;
naklad :integer;
uloha: byte;
move_ant : byte;
kam_x, kam_y : integer;
constructor Init(kdo : integer);
function What_I_See : integer;
procedure Step;
destructor done;
end;
TMravenec = class(TAnt)
live : byte; // jeho stadium zivota..
inteligence : byte;
energy : byte;
constructor Init(kdo : integer);
procedure Writelog;
procedure Find_Ant_Hill;
procedure Find_Wood;
procedure Find_Egg;
procedure Find_Well;
procedure Zobraz;
procedure Pohyb;
procedure Go(x,y :integer);
procedure New_Ant;
end;
TQueen_Ant = class(TAnt)
counter_eggs : integer;
constructor Init(kdo : integer);
procedure Pohyb;
procedure Zobraz;
end;
Type_Array_Ants = array of TMravenec;
Objekt Mraveniste
TAnt_Hill = class
NUM_MRAVENEC : integer; // pocet mravencu na zacatku
NUM_VETVICEK : integer; // pocet vetvicek na zacatku na plose
NUM_VET_V_MRAV : integer; // pocet vetvicek v mravenisti na zacatku
NUM_EGGS : integer; // pocet vajicek mimo mraveniste
ROZ_MRAVENISTE : integer; // rozmer mraveniste na zacatku
POSITION_ANT_HILL_X : integer; // x-ova souradnice stredu mrqaveniste na zacatku
POSITION_ANT_HILL_Y : integer; // y-ova souradnice stredu mrqaveniste na zacatku
position_well_x : integer; // x-ova souradnice studny
position_well_y : integer; // y-ova souradnice studny
curr_num_ants : integer;
curr_num_ants_really : integer;
curr_num_woods : integer;
curr_num_woods_really : integer;
curr_num_carried_woods : integer;
curr_num_eggs:integer;
curr_num_woods_hill : integer;
curr_size_ant_hill : integer;
curr_pos_ant_hill_x : integer;
curr_pos_ant_hill_y : integer;
control : integer;
counter_hill : integer;
changed_ant_hill : boolean;
add_wood_counter : integer;
add_wood_number : integer;
add_wood_howmany : integer;
Data_Images : TImages; // sktruktura, pro vygenerovani obrazku
Data_Grass : TGrass ; // pozice travy
Data_Wood : TWood ; // pozice vetsvicky
Data_Wood_Hill : TWood; // pozice v mravenisti
Data_Stone : TStone ; // pozice kamenu
Data_Egg : TEgg; // pozice vajicek
procedure Do_Ant_Hill(rozmer,pocet : integer);
procedure Generation_Images ;
procedure LoadBackGround;
procedure Put_Wood_Into_Hill(whereis, rozmer : integer);
procedure ReadINI;
procedure Set_Value;
procedure WriteINI;
procedure Add_Wood(count_woods : byte);
procedure Counter;
procedure Resize_Ant_Hill;
procedure Find_Ant(x,y : integer);
procedure Control_Ant(x,y : integer);
procedure Monitor_Ant(x,y : integer);
procedure Add_Eggs(x,y : integer);
end;
Pole obrázků a ostatní data
TImages = array [0..24,0..19] of byte;
Grass_Type = record
x,y : integer;
end;
TGrass = array [1..NUMBER_GRASS] of Grass_Type;
Wood_Type = record
x,y : integer;
where : byte; // kde je vetsivka umistena
end;
TWood = array of Wood_Type;
Stone_Type = record
x,y : integer;
end;
TStone = array [1..NUMBER_STONE] of Stone_Type;
Egg_Type = record
x,y : integer;
where : byte ; // jestli venku nebo v mravenisti
end;
TEgg = array of Egg_Type; // dynamicke pole.. bude se menit :)