Programátorská část

Zpět na index




Specifikace programu


Program má být simulací stavby mraveniště

  • 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


    Popis programu


    Program je napsán v prostředí Delphi. Grafika pomocí komponeny ActiveX

    Simulation Start


    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

    Options


  • Lze měnit původní nastavení hodnot (mravence, větvičky uvnitř i vně mraveniště, rychlost, rozměry mraveništé, počet vajíček)
  • Objeví se aktuální hodnota a potom rozmezí hodnot pro výběr

    Nahoru

    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;
    
    
    Nahoru

    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;
    
    Nahoru

    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 :)
    
    
    Nahoru

    Zajímavé procedury a funkce


    Zdrojové kódy jednotlivých procedur
    1) Hledání větviček a vajíček
         zdrojový kód
    2)Hledání mraveniště a studně
         zdrojový kód
    3)Krok
         zdrojový kód

    Nahoru