Pokial mate radi vseliake graficke efekty potom je tu pre vas nasledujuci program. Je to ukazka hlavneho algoritmu kreslenia ciar pouziteho v znamej serii programov Song in lines. Program je napisany pre pocitac ZX Spektrum, ale da sa bez problemov prepisat aj na ine pocitace.
10
REM 06.02 14.06.1994
20
OVER 0: INVERSE 0
30
INPUT "Pocet ciar:";c: LET x=23677: LET y=23678
40
INPUT "Mazanie ciar pomocou INVERSE ?(1=ano/0=nie)";m
50
RESTORE : DIM s(c,4): DIM d(3,4): IF NOT m THEN OVER 1
60
FOR a=1 TO 3: FOR b=1 TO 4: READ d(a,b): NEXT b: NEXT a
70
DATA 50,10,10,50,3,4,3,2,255,175,255,175
80
FOR a=1 TO c: FOR b=1 TO 4: LET s(a,b)=0: NEXT b: NEXT a
90
FOR a=1 TO c: INVERSE m: GO SUB 150: FOR b=1 TO 4
100
LET d(1,b)=d(1,b)+d(2,b)
110
IF d(1,b)>0 AND d(1,b)<d(3,b) THEN GO TO 130
120
LET d(2,b)=-d(2,b): LET d(1,b)=d(1,b)+2*d(2,b)
130
LET s(a,b)=d(1,b): NEXT b
140
INVERSE 0: GO SUB 150: NEXT a: GO TO 90
150
PLOT s(a,1),s(a,2): DRAW s(a,3)-PEEK x,s(a,4)-PEEK y
160
PLOT d(3,1)-s(a,1),s(a,2): DRAW d(3,3)-s(a,3)-PEEK x,s(a,4)-PEEK y
170
PLOT d(3,1)-s(a,1),d(3,2)-s(a,2): DRAW d(3,3)-s(a,3)-PEEK
x,d(3,4)-s(a,4)-PEEK y
180
PLOT s(a,1),d(3,2)-s(a,2): DRAW s(a,3)-PEEK x,d(3,4)-s(a,4)-PEEK y
190
RETURN
Program sam o sebe ide pomerne pomaly. Je to dane najme tym ze velmi velku
cast celeho casu zaberaju rozne vypocty a osetrenia sluciek FOR NEXT. Komu sa
chce, moze si tento program skompilovat. Pozor vsak na prikaz DIM s(c,4) na
riadku 50. Niektore kompilatory (nastastie nie vsetky) totiz vyzaduju vopred
poznat rozmery dimenzovanych premennych. V tom pripade dosadte namiesto
premennej "c" do tohto prikazu nejake dostatocne velke cislo (napr. 200).
Potom by ste ale nemali pri spustani skompilovaneho programu zadavat vecsi
pocet ciar ako toto cislo.
Program vyuziva vyhradne celociselnu aritmetiku, preto mozete pouzit aj
celociselny kompilator. Kto si trufa, moze samozrejme program prepisat priamo
do strojoveho kodu. Vdaka celociselnej aritmetike to nebude ani moc tazke.
Tento program nevyuziva ziadne nestandartne alebo nedokumentovane funkcie a
sluzby a ani sa nepotrebuje synchronizovat so snimkovou frekvenciou monitora,
preto by mal spravne fungovat na vsetkych pocitacoch a emulatoroch ktore su
kompatibilne s pocitacom ZX Spektrum na urovni basicu.
Par poznamok k prenositelnosti na ine pocitace: Program je pisany pomerne
jednoducho, takze prepisanie do ineho basicu by nemal byt problem. Cisla 255
a 175 na riadku 70 udavaju pocet bodov grafickeho rezimu zmenseny o 1 (255 po
osi X, 175 po osi Y). Prikaz PLOT X,Y presuva kresliaci kurzor na poziciu
X,Y a prikaz DRAW X,Y kresli ciaru z aktualnej pozicie kurzora na poziciu
ktora je od aktualnej posunuta o X,Y (jedna sa o relativne kreslenie ciary).
Cleny "- PEEK x" a "- PEEK y" sluzia na prepocet relativneho posunutia
pozicie na absolutne suradnice tejto pozicie. "x" je adresa v pameti, kde sa
uchovava X-suradnica aktualnej pozicie kurzora, podobne "y" je adresa kde je
ulozena Y-suradnica. Ak mate k dispozicii prikaz na kreslenie ciary
pracujuci s absolutnymi suradnicami, potom tieto cleny mozete vynechat.
Verim ze sa vam program bude pacit a ze ho pripadne pouzijete ako pekny
graficky doplnok do nejakeho vlastneho vecsieho programu.