Skúška z programovania pre 1i, 1MI a 1FI
10.1.2000 do
  1. Textový súbor vstup.txt obsahuje popis "živého obrazu":
  2. Napíšte program, ktorý načíta tento súbor, načíta príslušné bitmapy a zobrazí ich do formuláru (buď priamo do formuláru alebo do grafickej plochy - rozmery nech sú aspoň 500x400). Pomocou časovača sa všetky objekty v ploche pohybujú tak, že sa im stále menia súradnice podľa vektora posunutia. Ak by niektorý objekt mal "vypadnúť" z plochy, tak sa príslušnej zložke vektora (vx alebo vy) zmení znamienko. Vo formulári zadefinujte tlačidlo [Ulož], ktorým môžeme uložiť do súboru vstup.txt momentálny stav objektov. Bitmapy objektov majú priesvitné časti zadefinované bielou farbou.
    Ak niektorý objekt zatlačíme ľavým tlačidlom myši, všetky objekty zastanú a kliknutému objektu môžeme zmeniť jeho vektor posúvania (aj na nulový). Počas ťahania myšou sa kreslí vektor (červená úsečka) od kliknutého bodu po momentálny. Pri pustení myši sa tento vektor zmaže a daný objekt sa od tohoto momentu bude pohybovať podľa tohoto nového vektora (začnú sa pohybovať aj všetky ostatné objekty).
    Počas zatlačenia klávesu <Ctrl> všetky objekty zastanú a počas tohoto môžeme ľubovoľné objekty po ploche ťahať (týmto ťahaným objektom sa vynuluje ich vektor posúvania).
    Objekty zadefinujte ako inštancie tejto triedy (deklarácie môžete podľa potreby trochu zmeniť):
      type
        obrazok = class
          x,y,vx,vy:integer;
          meno:string;         // meno súboru s bitmapou
          bmp:TBitmap;
          constructor Create(var tx:TextFile);  // načíta informácie zo súboru
          destructor Destroy; override;
          procedure kresli(g:TCanvas);          // vykreslí do plochy
          function  klik(mx,my:integer):boolean; // či sa kliklo myšou
          procedure zapis(var tx:TextFile);
        end;
  1. Na začiatku programu je plocha prázdna. Kliknutie do plochy vytvorí novú korytnačku s tvarom malého krúžku. Každé ďalšie kliknutie vytvára nové korytnačky. Každá takto vytvorená korytnačka je spojená úsečkou s predchádajúcou (okrem prvej) - podľa poradia vytváraných korytnačiek. Táta úsečka je súčasťou tvaru korytnačky (tvar je krúžok a dlhá čiara). Kliknutie na existujúcu korytnačku nevytvorí novú, ale umožní ju ťahať po ploche - počas ťahania treba aktualizovať tvar samotnej ťahanej korytnačky aj jej nasledovníka.

  2. Zadefinujte triedu mojaKor (odvodenú z triedy Kor), ktorá má stavové premenné pred a nasl - informácie o predchádzajúcej a nasledovnej korytnačke (napr. ich indexy vo VelaKor), ďalej konštruktor Create s parametrami x,y a p (informácia o predchádzajúcej korytnačke) a metódu opravTvar, ktorá zmení tvar korytnačke na malý krúžok (12-uholník so stranou 3) a čiaru dĺžky vzdialenosti k predchodcovi (ak existuje). Túto metódu budete volať vždy, keď sa zmení pozícia samotnej korytnačky alebo niektorého jej suseda.
    Na formulári vytvorte tlačidlo [Ulož] - po jeho zatlačení sa do súboru zoznam.txt zapíše momentálny stav korytnačiek: do každého riadku sa zapíšu dve celé čísla - súradnice korytnačky.
    Pri štarte programu, ak tento súbor existuje, sa na príslušných miestach vygenerujú korytnačky a program ich umožní ťahať po ploche a vytvárať nové.
    Na pole korytančiek použite triedu VelaKor.
© AB
Skúška Z01/2000