Plynula animacia pod 50 Hz

     Vo vseobecnosti sa hovori, ze basic, a najme interpretovany basic je velmi pomaly jazyk a ze robit v nom nejake rychle a plynule pohyby alebo animacie je proste nemozne.
     Ale je to naozaj tak ??? Nasledujuci program vam ukaze, ze aj basic je schopny animacnych efektov beziacich v realnom case pod snimkovou frekvenciou zobrazovania televizneho obrazu - a toto vsetko bez pouzitia akehokolvek kompilera.

     Program sa spusta od riadku 20. Po spusteni si mozete vybrat jeden zo styroch efekov, ktore program dokaze vytvorit. Potom si program chvilku vytvara datove struktury potrebne k tomuto efektu a po ich vytvoreni uz nebude otalat a efekt spusti.
     V programe su koli efektivnosti pouzite rozne zname i menej zname programatorske finty. Vam, ktori ste menej skuseni sa moze na niektorych miestach v programe zdat, ze ide o tlaciarensky preklep, alebo dokonca o hrubu programatorsku chybu, ale zdanie moze klamat ! Napriklad na riadku 140 je "minus" namiesto ktoreho by na prvy pohlad malo byt "rovna sa". Ale nema, pretoze ten "minus" je tam uplne spravne.

10 PAUSE 1: PRINT z$;: FOR a=130 TO b: PAUSE 1: POKE 23676,a: PRINT z$;: NEXT a: PAUSE 1: POKE 23676,a: PRINT z$;: POKE 23676,a+1: GO TO 10
20 BORDER 6: POKE 23693,56: POKE 23675,0: CLEAR 33279
30 DIM z$(18): LET r=18: LET s=14: RESTORE 50
40 FOR a=1 TO 18: READ b: LET z$(a)=CHR$ b: NEXT a
50 DATA 22,r,s,144,145,146,22,r+1,s,147,148,149,22,r+2,s,150,151,152
60 CLS : INPUT "Vyber si efekt 1,2,3 alebo 4:";e
70 FOR z=33280 TO 33280 STEP 256: PRINT AT 5,5;"[Maly moment]"
80 PLOT 79,79: DRAW 25,0: DRAW 0,25: DRAW -25,0: DRAW 0,-25
90 POKE 16553,8: POKE 16809,16
100 IF e=1 THEN GO TO 150
110 IF e=2 THEN GO TO 180
120 IF e=3 THEN GO TO 210
130 IF e=4 THEN GO TO 230
140 IF e-1 THEN GO TO 60
150 FOR d=.1 TO 2*PI STEP .1: FOR e=0 TO 2*PI STEP PI/7
160 PLOT 91.5+10*SIN e,91.5+10*COS e: NEXT e: PLOT 91.5,91.5
170 DRAW 12*SIN d,12*COS d: GO SUB 320: NEXT d: GO TO 260
180 FOR d=0 TO 7: FOR e=50+d TO 100+d STEP 8: PLOT e,80
190 DRAW 24,24: PLOT e+2,80: DRAW 24,24: NEXT e: GO SUB 320
200 NEXT d: GO TO 260
210 FOR d=0 TO 3.5 STEP .5: FOR e=d TO d+16 STEP 4
220 CIRCLE 91.5,91.5,e: NEXT e: GO SUB 320: NEXT d: GO TO 260
230 FOR d=.1 TO PI STEP PI/30: LET x=40*SIN d: LET y=40*COS d
240 FOR e=-.5 TO .5 STEP .1: PLOT 91.5-y*e-x/2,91.5+x*e-y/2
250 DRAW x,y: NEXT e: GO SUB 320: NEXT d: GO TO 260
260 INK 2: CLS : PRINT AT 16,10;"Uz to bezi!": POKE 20499,8
270 POKE 20459,36: POKE 20491,24: POKE 20466,36: POKE 20498,24
280 PRINT #0; INK 2;" Restart: BREAK & RUN 20": INK 5
290 PLOT 108,4: DRAW 31,0: DRAW 0,31: DRAW -31,0: DRAW 0,-31
300 PLOT 109,5: DRAW 29,0: DRAW 0,29: DRAW -29,0: DRAW 0,-29
310 INK 0: LET b=z/256-3: GO TO 10
320 FOR m=z TO z: FOR a=18474 TO 18538 STEP 32
330 FOR b=a TO a+2: FOR c=b TO b+1792 STEP 256: POKE m,PEEK c
340 POKE c,0: NEXT m: NEXT c: NEXT b: NEXT a: NEXT z: RETURN
350 SAVE "03.15" LINE 20

     Tento program spravne funguje na vsetkych typoch pocitacov, ktore maju ten isty videoproesor ULA ako originalne ZX Spectrum 48k (ZX Spectrum 48k, ZX Spectrum+, Delta a Didaktik Gama).
     Funguje aj na vsetkych originalnych stodvadsatosmickach (128k, +2, +2A a +3), ale iba v 48 basicu pretoze 128 alebo +3 basic ma pomalsi interpreter a niektore casovo narocne casti programu by uz nestihli bezat synchronne so snimkovou frekvenciou televizora.
     Program bez problemov funguje aj na Didktiku M a Kompakt. Vo vecsine emulatorov ZX Spectra na pocitacoch PC tento program koli nevhodnemu casovaniu nebezi spravne.
     Diakritika v programe je navrhnuta na originalny znakovy subor zo ZX Spectra. Iny znakovy subor nesposobi ziadnu vaznu chybu, len vypisy budu trochu "neupravene".