1.2.11. Práca s farbami
Počítač je schopný zobraziť na farebnom televízore (alebo monitore) 8 farieb. Pokiaľ je Váš televízor čiernobiely, uvidíte len odtiene šedej farby. Jednotlivé farby sú označené číslom:
0 - čierna
1 - modrá
2 - červená
3 - purpurová (fialová)
4 - zelená
5 - svetlo modrá
6 - žltá
7 - biela
Aby ste používali farby správne, musíte pochopiť, ako je obraz zostavený. Obraz je rozdelený na 768 pozícií (24 riadkov a 32 stĺpcov), kde môžu byť znaky vytlačené.
Každý znak je tlačený ako 8x8 bodov obrazovky, ako ukazuje obrázok malého a.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* |
* |
* |
* |
* |
|
|
|
|
|
|
* |
* |
|
|
|
* |
* |
* |
* |
* |
|
|
* |
* |
|
|
* |
* |
|
|
|
* |
* |
* |
* |
* |
|
|
|
|
|
|
|
|
|
Každý bod z 8x8 bodov štvorca pre výpis jedného znaku môže mať jednu z dvoch farieb: farba znaku (farba tmavých bodov v našom štvorci) a farba pozadia (je použitá pre biele body).
Na začiatku práce s počítačom majú všetky zobrazené body čierne farbu a pozadie (podklad) farbu bielu a tak sa znaky javia ako čiernobiele. Každý znak má tiež jas (normálny alebo zvýšený) a môže blikať (blikanie je vlastne výmena farby pozadia a zobrazených bodov). Všetko je kódované v číslach a počítač potrebuje pri výpise jedného znaku o znakovej pozícii vedieť nasledujúce informácie:
1. 8x8 bodov, kde 0 znamená body podkladu a 1 znamená zobrazené body, definujúce tvar znaku
2. farby zobrazených bodov a podkladu a 1 znamená zobrazené body, definujúce tvar znaku
3. jas - 0 normálny, 1 zvýšený
4. blikanie - 0 bez blikanie, 1 bliká
Z toho vyplýva, že jedna znaková pozícia (8x8 bodov) môže mať najviac dve farby, všetky body majú normálny alebo zvýšený jas a všetky body blikajú alebo neblikajú.
Hodnoty dvoch farieb, jasu a blikania sa nazývajú atribúty. Atribúty sa dajú programovo meniť a príkazy na ich zmenu si teraz popíšeme.
Programovo môžeme ovládať nielen farbu vypisovaných znakov, ale tiež okraj obrazovky, t. j. časť, do ktorej sa nedá nič vypísať príkazom PRINT.
Farba okraja obrazovky sa mení príkazom BORDER v tvare:
BORDER farba
kde farba je celé číslo od 0 do 7. Ihneď po zadaní tohto príkazu sa okraj obrazovky zafarbí zadanou farbou.
Farbu podkladu pracovnej častí obrazovky meníme príkazom PAPER v tvare:
PAPER farba
kde farba je celé číslo od 0 do 9. V prípade, že je v rozmedzi od 0 do 7, určuje farbu podkladu. Ak má hodnotu 8, farba podkladu sa nemení, t. j. ostáva nastavená tak, ako to bolo pred týmto príkazom. Ak má hodnotu 9, farba podkladu bude kontrastná oproti farbe výpisu znakov, t. j. bude.
-biela ako kontrast pre tmavú (čiernu, modrú, červenú,
purpurovú)
-čierna ako kontrast pre svetlú (zelená, svetlo modrá, žltá,
biela)
Farba výpisu znakov zadáme príkazom INK v tvare:
INK farba
kde pre farbu platí to isté, ako v príkaze PAPER.
Pre určenie jasu použijeme príkaz BRIGHT v tvare:
BRIGHT číslo
kde číslo môže mať tieto hodnoty:
0 - jas je normálny
1 - jas je zvýšený
8 - jas sa nemení, ostáva nastavený podľa predchádzajúceho
príkazu BRIGHT
Blikanie zadáme príkazom FLASH v tvare:
FLASH číslo
kde číslo môže mať tieto hodnoty
0 - bez blikania
1 - blikanie
8 - bez zmeny podľa predošlého nastavenia
Použitie uvedených príkazov môžete odskúšať na nasledujúcom príklade:
10 FOR m=0 TO 1:BRIGHT m
20 FOR n=1 TO 10
30 FOR c=0 TO 7
40 PAPER c: PRINT "
";:REM 4 farebne medzery
50 NEXT c: NEXT n: NEXT m
60 FOR m=0 TO 1: BRIGHT m:PAPER 7
70 FOR c=0 TO 3
80 INK c:PRINT c;"
"
90 NEXT c: PAPER 0
100 FOR c=4 TO 7
110 INK c: PRINT
c;" ";
120 NEXT c: NEXT m
130 PAPER 8: INK 7: BRIGHT 0
Program zobrazuje 8 farieb (vrátane čiernej a bielej) a dve úrovne jasu, ako sa zobrazujú na farebnom televízore.
Tlačí sa vo farbách podľa zadaných príkazov (medzera je znak, kde farba INK a PAPER je zhodná).
Kontrastnú farbu vyskúšajte nasledovným príkazovým riadkom:
INK 9: FOR c=0 TO 7: PAPER c: PRINT c: NEXT c
Ďalšie dva príkazy INVERSE a OVER neriadia atribúty, ale spôsob akým sú znaky vypisované na obrazovke. Tieto príkazy majú tvar:
INVERSE číslo
OVER číslo
kde číslo môže mať len hodnotu 0 a 1.
Ak zadáte INVERSE 1, potom výpis znaku bude invertovaný vzhľadom k normálnemu výpisu (farby určené príkazmi BORDER a INK sa navzájom vymenia). Pokiaľ máte čierny INK a biely BORDER (ako po prvom zapnutí), tak po inverzii budú písmená biele na čiernom podklade.
Zadaním INVERSE 0 sa prejde do pôvodného stavu.
Príkaz OVER 1 zapína zvláštny druh výpisu - prepisovanie. Normálne, keď je niečo napísané do znakovej pozície, je celkom jedno, čo tam bolo skôr, ale po OVER 1 nový znak nezmaže starý znak, ale znaky sa prelínajú cez seba. Môže to byť zvlášť užitočné pre písanie kompozičných znakov, podobne ako znakov, na ktoré je kladený dôraz, rovnako ako sa v nemčine píše prehlasované o.
10 OVER 1
20 FOR n=1 TO 32
30 PRINT "o";CHR$ 8;"""";
40 NEXT n
Veľkou výhodou príkazov pre farbu je to, že tieto príkazy môžu byť položkami v príkaze PRINT a ich účinok platí v tom prípade iba v tom príkaze PRINT, v ktorom sú uvedené.
Napr. po odoslaní
PRINT
PAPER 6;"x";:PRINT
"y"
bude iba x na žltom pozadí.
Tieto príkazy nemajú účinok na farby v dolnej časti obrazovky, kde sú vkladané príkazy INPUT. Dolná časť obrazovky používa farbu pre podklad podľa príkazu BORDER a kód 9 (ako kontrast) pre farbu INK, bez blikania s normálnym jasom.
Keď vkladáte údaje pomocou INPUT, farbu môžete zmeniť použitím INK a PAPER ako v príkaze PRINT. Účinok trvá do konca príkazu alebo do ďalšieho príkazu INPUT. Skúste:
INPUT FLASH 1; INK 1; "Zadaj svoje meno";n$
Ďalší spôsob zmeny farieb je použitím riadiacich znakov, kde
CHR$ 16 zodpovedá INK
CHR$ 17 -"- PAPER
CHR$ 18 -"- FLASH
CHR$ 19 -"- BRIGHT
CHR$ 20 -"- INVERSE
CHR$ 21 -"- OVER
Za nimi nasleduje znak, ktorého kód udáva farbu, napr.:
PRINT CHR$ 16+CHR$ 9; ... má rovnaký účinok ako
PRINT INK 9; ...
Tieto riadiace znaky nemusíte používať, používajte radšej príkazy. Niekedy je však užitočné pracovať s nimi pri vkladani programu. Výpis programu bude mať v rôznych častiach rôznu farbu, aby sa časti odlíšili od seba, alebo pekne vyzerali. Aby ste ich dostali do programu, musíte ich zadať priamo z klávesnice použitím rozšíreného módu. Zmenu farby zadáme vždy za číslom riadku. Keď ste v E móde a stlačíte číslo 6 (pre žltú farbu), potom sa vložia znaky; najprv CHR$ 17 ako PAPER a CHR$ 6 ako kód pre žltú farbu. Keď stlačíte CAPS SHIFT+6, dostávate kód CHR$ 16 ako INK a CHR$ 6 pre farbu. Pretože sa vložili 2 znaky, vymazanie musíte vykonať tak, že dvakrát stlačíte DELETE. Po prvom stlačení sa objaví ?. Nebojte sa a stlačte DELETE znovu.
Taktiež ostatné klávesy horného radu klávesnice majú v rozšírenom móde E nejaký význam:
8 dáva CHR$ 19 a CHR$ 0 pre normálny jas
9 dáva CHR$ 19 a CHR$ 1 pre zvýšený jas
CAPS SHIFT a 8 dáva CHR$ 18 a CHR$ 0 pre neblikanie
CAPS SHIFT a 9 dáva CHR$ 18 a CHT$ 1 pre blikanie
V obyčajnom L móde platí:
CAPS SHIFT a 3 dáva CHR$ 20 a CHR$ 0 pre normálne znaky
CAPS SHIFT a 4 dáva CHR$ 20 a CHT$ 1 pre inverzné znaky
V nasledujúcej tabuľke je podrobný popis významu horného radu klávesnice v rôznych módoch:
Zadávať príkazy pre farebné zobrazenie znaku sme sa už naučili. Niekedy je vhodné vedieť, ako je zobrazený znak na určitej pozícii na obrazovke, presnejšie, aké atribúty má určitá pozícia na obrazovke. Na to použijeme funkciu ATTR, ktorá má tvar:
ATTR (riadok,stĺpec)
kde riadok a stĺpec majú ten istý význam, ako v príkaze AT. Výsledkom je číslo udávajúce atribúty zodpovedajúceho znaku na obrazovke. Toto môžete využiť samostatne alebo ako časť inej funkcie. Číslo, ktoré je výsledkom tejto funkcie, je súčet 4 ďalších čísiel:
1) 128 pokiaľ pozícia bliká, 0 keď nebliká
2) 64 ak je na pozícii zvýšený jas, 0 keď je normálny
3) 8*n, kde n je kód farby podkladu pre PAPER
4) kód farby pre INK
Napr. nech pozícia bliká s normálnym jasom, žltým podkladom a farba znaku je modrá. Potom čísla, ktoré sa sčítajú, sú 128, 0, 8*6=48 a 1, výsledkom je 177.
Skúste príkazový riadok
PRINT AT 0, 0; FLASH 1; PAPER 6; INK 1;" "; ATTR (0, 0)
Teraz skúste:
PRINT "B"; CHR$ 8; OVER 1;"/";
Dostanete znak B prepísaný znakom /.
Je zaujímavé, že pokiaľ vypíšete to isté 2x, dostanete späť to, čo tam bolo. Skúste teraz napísať:
PRINT CHR$ 8; OVER 1;"/" (dostanete B - prečo?)
Zadajte
PAPER 0: INK 0: PRINT "NIC"
Čo ste dostali? Nie je dobré, že to neplatí v dolnej časti obrazovky?
Nakoniec nechajte bežať tento program
10
POKE 22527+RND*704,RND*127
20 GO TO 10
Program pracujte tak, že mení farbu pozícií pre výpis znakov, funkcia RND zaisťuje náhodnosť. Diagonálne prvky, ktoré momentálne vidíte, sú dokladom toho, že RND dáva pseudonáhodné číslo.