next up previous
Next: Obrázky alebo "Monu Lisu Up: grafika Previous: Čiaročky alebo "Koho si

Omaľovánky alebo "Toto prosím na zeleno."

Skôr, než začneme s niečim novým, by som rád urobil istý dohovor. Totiž v programoch, ktoré sme doteraz používali, sa niektoré veci opakujú a zaberajú miesto na papieri. Preto chcem zverejniť štandardnú verziu funkcie main. Budeme ju používať až do odvolania a bude vyzerať takto:

    int main()
    {
        /* Deklaracie */
	
        allegro_init();
        install_keyboard(); 
        set_color_depth(16); 
        if (set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0) != 0)
        {
            set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
            allegro_message("Nemozem nastavit graficky mod\n%s\n", allegro_error);
            return 1;
        }

        /* Hlavny kod */
   
        readkey();
        return 0;
    }
    END_OF_MAIN();
V ďalšom texte bude uvedené už iba aké premenné budeme používať (vloží sa to pod poznámku Deklarácie) a ako má vyzerať hlavný kód (vloží sa to pod poznámku Hlavny kod).

Vypĺňať plochu s pomocou čiar je možné (ako ste sa mohli presvedčiť v predošlej lekcii). Ak to však nerobíte pozorne, môže sa vám stať, že niektoré bodíky na obrazovke ujdú vašej pozornosti a nevyplníte ich. Môže z toho síce vzísť pekná vzorka (ako sa stalo pri prvom príklade predošlej lekcie), ale to nie je vždy to, čo si človek želá. Preto má Allegro funkcie určené špeciálne na vypĺňanie určených plôch.

Najjednoduchšie je vyplniť obdĺžnik. Napríklad obdĺžnik, ktorého protiľahlé vrcholy majú súradnice [30,70] a [160,140] sa vyplní príkazom

    rectfill(screen, 30, 70, 160, 140, makecol(255, 198, 198));
Ako parametre uvedieme obrázok, do ktorého ideme čmárať (teda obrazovku), súradnice vrcholov a farbu. Podobne, ak chceme vyplniť trojuholník s vrcholmi [130,30], [420,70] a [270,342], môžeme zavolať funkciu
    triangle(screen, 130, 30, 420, 70, 270, 342, makecol(255, 198, 198));
Situácia je trochu zložitejšia, keď chceme vyplniť viacuholník. Vtedy treba najprv vrcholy uložiť do nejakého poľa premenných typu int. Ak chceme vyplniť päťuholník s vrcholmi [320,20], [420,460], [100,140], [540,140] a [220,460], tak deklarácia bude vyzerať tatkto:
    int bodiky[10] = { 320,  20, 420, 460, 100, 140,
                       540, 140, 220, 460};
V hlavnom kóde bude potom príkaz
    polygon(screen, 5, bodiky, makecol(255, 0, 0));
Funkcii treba povedať, do ktorého obrázku ideme kresliť, koľko bodov ten mnohouholník má, v ktorom poli sú uložene a akou farbou sa má kresliť. Pole musí byť aspoň dvakrát také dlhé, ako počet vrcholov, pretože na každý vrchol potrebujeme dve súradnice. Ak hranica mnohouholníka pretína sama seba, vypĺňanie sa správa podivne -- ako sa koniec koncov môžete presvedčiť na uvedenom príklade.

Posledný z vypĺňacích príkazov, ktoré budú v tejto lekcii zverejnené je príkaz floodfill. Slúži na vypĺňanie ohraničenej oblasti danou farbou. (Ak ste vo windowsovskom maľovaní použili niekedy tlačítko vyplň, určite viete o čom je reč.) Hlavný kód môže vyzerať napríklad takoto:

1   line(screen, 290, 210, 350, 210, makecol(0, 255, 0));
2   line(screen, 290, 210, 290, 270, makecol(0, 255, 0));
3   line(screen, 290, 270, 350, 270, makecol(0, 255, 0));
4   line(screen, 350, 210, 350, 270, makecol(0, 255, 0));
5   line(screen, 260, 180, 380, 180, makecol(0, 255, 0));
6   line(screen, 260, 180, 260, 300, makecol(0, 255, 0));
7   line(screen, 260, 300, 380, 300, makecol(0, 255, 0));
8   line(screen, 380, 180, 380, 300, makecol(0, 255, 0));
9   floodfill(screen, 320, 200, makecol(0, 128, 0));
Na riadkoch 1 až 8 nakresíme dva štvorce. Bod [320,200] leží medzi nimi, takže funkcia floodfill vyplní celý priestor medzi nimi trochu tmavšou zelenou.

Kto by mal záujem o ďalšie vypĺňacie funkcie, nájde ich v manuáli k Allegru v kapitole Drawing primitives.



Úloha č.1 Vyskúšajte uvedené príklady, posledný zmeňte tak, že vnútro menšieho štvorca vyplníte oranžovou a okolie vonkajšieho fialovou farbou.

Úloha č.2 Nakreslite červenú hviezdu bez diery v prostriedku.

Úloha č.3 Náhodné číslo typu int vyrobíte s pomocou funkcie random(), náhodné číslo od 0 do 479 sa dá spraviť random() % 480. Nakreslite 1000 náhodných trojuholníkov náhodnej farby. (Ak by kompilátor hlásil, že nepozná funkciu random(), pridajte na začiatok súboru #include<stdlib.h>)

Úloha č.4 Nakreslite šachovnicu aj s bielymi a čiernymi poľami.


next up previous
Next: Obrázky alebo "Monu Lisu Up: grafika Previous: Čiaročky alebo "Koho si
Anino Belan
anino(at)smnd.sk