27. Grafika: Graphics, SetColor, Plot, DrawTo, Fill, Position, Locate
Na čo to je
Atari vie okrem textu kresliť body a čiary vo farbe. Táto kapitola ukáže textovú obrazovku s farbami a kurzorom na ľubovoľnom mieste a potom obrázok z čiar.
Od tejto kapitoly potrebuješ emulátor. Simulátor (--sim) obrazovku nekreslí. Programy sa spúšťajú voľbou --run a na konci čakajú na kláves.
Ako sa to píše
| Rutina | Čo robí |
|---|---|
Graphics(režim) | prepne obrazovku do grafického režimu a vymaže ju |
SetColor(register, odtieň, jas) | nastaví farbu jedného z piatich farebných registrov |
color=číslo | premenná knižnice: ktorou farbou sa bude kresliť |
Plot(stĺpec, riadok) | nakreslí bod |
DrawTo(stĺpec, riadok) | nakreslí čiaru z posledného bodu do zadaného |
Fill(stĺpec, riadok) | vyplní plochu (vysvetlenie nižšie) |
Position(stĺpec, riadok) | nastaví kurzor – kde bude ďalší výpis textu |
Locate(stĺpec, riadok) | funkcia – vráti farbu bodu (v textovom režime kód znaku) |
Súradnice: bod (0, 0) je vľavo hore. Stĺpec rastie doprava, riadok nadol. Vždy sa píše najprv stĺpec, potom riadok.
Grafické režimy
Najpoužívanejšie (všetky sú v prílohe D):
| Režim | Druh | Rozmer | Farby |
|---|---|---|---|
| 0 | text | 40 × 24 znakov | 1 farba písma, 1 pozadia |
| 1 | veľký text | 20 × 20 znakov + 4 riadky textu | 5 |
| 2 | ešte väčší text | 20 × 10 znakov + 4 riadky textu | 5 |
| 3 | body | 40 × 20 + 4 riadky textu | 4 |
| 5 | body | 80 × 40 + 4 riadky textu | 4 |
| 7 | body | 160 × 80 + 4 riadky textu | 4 |
| 8 | body | 320 × 160 + 4 riadky textu | 1 farba, 2 jasy |
Režimy 1 až 8 nechávajú dole textové okno so štyrmi riadkami, do ktorého píše Print. Keď k číslu režimu pripočítaš 16 (Graphics(7+16)), okno zmizne a grafika zaberie celú obrazovku.
Farby
Farba je odtieň (0 až 15) a jas (párne číslo 0 až 14).
| Odtieň | Farba | Odtieň | Farba |
|---|---|---|---|
| 0 | sivá | 8 | nebeská modrá |
| 1 | zlatá | 9 | svetlomodrá |
| 2 | oranžová | 10 | tyrkysová |
| 3 | červenooranžová | 11 | zelenomodrá |
| 4 | ružová | 12 | zelená |
| 5 | fialová | 13 | žltozelená |
| 6 | fialovomodrá | 14 | oranžovozelená |
| 7 | modrá | 15 | svetlooranžová |
Presný odtieň závisí od televíznej normy (v Európe PAL, v USA NTSC).
V režime 7 platí:
color= | Kreslí farbou z registra | Nastaví sa cez |
|---|---|---|
| 0 | pozadie (maže) | SetColor(4, …) |
| 1 | register 0 | SetColor(0, …) |
| 2 | register 1 | SetColor(1, …) |
| 3 | register 2 | SetColor(2, …) |
Všimni si posun: color=1 kreslí farbou registra 0.
Program 1: textová obrazovka
Súbor examples/textscreen.act:
; The text screen: colours and the place of the cursor
PROC Main()
BYTE i
Graphics(0) ; clear the screen
SetColor(2, 9, 4) ; the background is blue
SetColor(1, 0, 14) ; the letters are bright
SetColor(4, 9, 4) ; the border is the same blue
Position(12, 2)
Print("THE TEXT SCREEN")
FOR i=0 TO 9
DO
Position(5+i*3, 5+i) ; column, row
PrintB(i)
OD
Position(2, 19)
Print("Press any key")
GetD(7)
RETURNaction26 textscreen.act --runUvidíš modrú obrazovku s nadpisom hore a číslicami 0 až 9 usporiadanými šikmo nadol. Position postaví kurzor a nasledujúci Print píše od toho miesta.
V režime 0 má register 2 farbu pozadia, register 1 jas písma (odtieň písma je vždy rovnaký ako pozadie) a register 4 okraj.
Program 2: kreslenie
Súbor examples/graphics.act:
; Graphics: a house in graphics mode 7 (160 x 80 points, 4 colours)
PROC Main()
BYTE i, found
Graphics(7) ; 160 x 80 points and 4 lines of text below
SetColor(0, 2, 8) ; colour 1 is orange
SetColor(1, 12, 10) ; colour 2 is green
SetColor(2, 9, 6) ; colour 3 is blue
SetColor(4, 0, 0) ; the background is black
color=1 ; a frame around the picture
Plot(0, 0)
DrawTo(159, 0)
DrawTo(159, 79)
DrawTo(0, 79)
DrawTo(0, 0)
color=2 ; the walls
Plot(50, 60)
DrawTo(50, 35)
DrawTo(110, 35)
DrawTo(110, 60)
DrawTo(50, 60)
color=3 ; the roof
Plot(45, 35)
DrawTo(80, 15)
DrawTo(115, 35)
color=1 ; a filled door
Plot(86, 59)
DrawTo(86, 45)
DrawTo(74, 45)
Fill(74, 59)
color=3 ; a dotted path
FOR i=0 TO 9
DO
Plot(80+i*4, 70)
OD
found=Locate(50, 40) ; which colour has the point 50,40?
PrintE("A house in graphics mode 7")
Print("The point 50,40 has colour ")
PrintBE(found)
Print("Press any key")
GetD(7)
Graphics(0)
RETURNPreklad a spustenie
action26 graphics.act --runČo uvidíš
Čiernu obrazovku s oranžovým rámom. V strede domček: zelené steny, modrá strecha, oranžové vyplnené dvere a pod ním bodkovaná modrá cestička. V textovom okne dole:
A house in graphics mode 7
The point 50,40 has colour 2
Press any keyAko to funguje
Graphics(7)prepne režim. Obrazovka má 160 stĺpcov (0–159) a 80 riadkov (0–79).- Štyri
SetColorurčia, čo znamenajú čísla farieb. color=1vyberie farbu pre nasledujúce kreslenie. Platí, kým ju nezmeníš.- Čiara sa kreslí dvojicou
PlotaDrawTo:Plotpoloží prvý bod,DrawToťahá čiaru do ďalšieho. ĎalšíDrawTopokračuje tam, kde predošlý skončil – tak vznikne lomená čiara. Locate(50, 40)prečíta farbu bodu. Na tom mieste je ľavá stena, kreslená farbou 2.PrintEv grafickom režime píše do textového okna.Graphics(0)na konci vráti textový režim.
Ako funguje Fill
Fill vypĺňa plochu zľava doprava, kým nenarazí na nakreslený bod. Treba mu preto pripraviť pravý okraj a povedať, kadiaľ ide ľavý:
Plot(86, 59)aDrawTo(86, 45)– pravá strana dverí, zdola nahor.DrawTo(74, 45)– horná strana, doľava. Kurzor ostal v ľavom hornom rohu.Fill(74, 59)– ťahá čiaru z ľavého horného rohu do ľavého dolného a z každého jej bodu vypĺňa doprava, až po pravú stranu.
Časté chyby
| Čo sa stalo | Čo sa stane |
|---|---|
bod mimo obrazovky (Plot(200, 10) v režime 7) | chyba 141 – program skončí hlásením Err: 141 |
zabudnuté color= | kreslí sa farbou, ktorá ostala naposledy; ak je to 0 – pozadie –, nie je nič vidieť |
| zámena riadka a stĺpca | obrázok je preklopený alebo mimo obrazovky |
SetColor(1, …) v nádeji, že zmení color=1 | color=1 je register 0 |
| nepárny jas | zaokrúhli sa nadol; jas 9 je to isté ako 8 |
program vlastní premennú color | zakryje premennú knižnice a kreslenie prestane meniť farbu |
Posledný riadok je všeobecná pasca: meno premennej nesmie byť rovnaké ako meno rutiny alebo premennej knižnice, a veľké a malé písmená sa nerozlišujú. Premenná stick zakryje funkciu Stick, premenná position procedúru Position.
Vyskúšaj si
- Pridaj domčeku okno – malý štvorec vedľa dverí.
- Nakresli v slučke
FORdesať zvislých čiar vedľa seba, každú o 10 bodov ďalej. - Zmeň režim na
Graphics(7+16). Čo sa stane s textovým oknom a s výpismi?
Zhrnutie
Graphics(n)zapne režim;Graphics(0)je text.SetColor(register, odtieň, jas)nastaví farbu;color=nvyberie, ktorou sa kreslí.Plotbod,DrawTočiara z posledného bodu,Fillvýplň doprava po okraj.Positionnastaví kurzor pre text,Locateprečíta bod.- Súradnice sú (stĺpec, riadok) a začínajú vľavo hore.
Späť: 26. Formátovaný výpis a prevody · Ďalej: 28. Zvuk