Semplici animazioni con il Commodore16
La cosa che ho sempre apprezzato dei computer Commodore era la loro immediatezza. Grazie ai caratteri grafici impressi sui tasti, era possibile scrivere piccoli e gradevoli programmi con poco sforzo.
In questo articolo vi mostro come fare delle piccole animazioni , usando il Commodore 16.
Il codice è volutamente semplice, ma è strutturato per poter creare animazione un minimo interessanti.
In uno dei prossimi articoli il listato verrà poi adattato per funzionare anche su C/64 e Vic20 che dispongono del più retrogrado BasicV2.
Introduzione
Il C/16 è un buon ambiente di sviluppo perché ha funzioni per rinumerare i numeri di riga, nuovi costrutti di programmazione strutturata (DO...LOOP) e un quantitativo di memoria accettabile per piccoli sviluppi. Per la nostra demo useremo l'emulatore VICE con un C/16 espanso a 64Kb di RAM.Bando alle ciance ed ecco il listato:
;c162021 ==1001==
10 rem tune delay? it is tuned on 1/10 of sec.
20 dx%=6
30 rem anim frames?
40 rem first number is a float with
50 rem ,frames...,end
60 data 100, wellcome,to,the,simple,animation,demo
70 data with parametric,data animation,
80 data for every frame you can set duration,"in 1/10th of seconds"
82 data for instance this frame will stay,for ten seconds,end
90 data 3 ,"JQK",end
100 data 2 ,"UQI", end
110 data 1 ,"JQK",end
120 data 1 ,"UQI", end
130 data 1 ,"JQK",end
140 data 1 ,"UQI", end
150 data 1 ,"JQK",end
160 data 1 ,"UQI",end
170 data 1 ,"JQK",end
180 data 1 ,"UQI",end
190 data 1 ,"JQK",end
200 data 1 ,"UQI",end
210 data 1 ,"JQK",end
220 data 30,"UQK happy xmas ","JWK", from commodore 16
229 data end
230 data 0,aniend
240 remscnclr
260 ti$="000000"
270 do
280 read dur%
290 if dur% = 0 then exit
300 scnclr
310 print
320 do
330 read anim$
340 if anim$="end" then exit
350 print anim$
360 loop
370 print"{home}{rght}{rght}time",ti$;" d:";dur%
380 rem how much wait?
390 tstart=ti
400 do while ti < (tstart+ dur%*dx% )
410 rem debug:
420 print"{home}",ti$,(tstart+dur%*dx%)-ti
430 loop
440 loop: rem new frame loop
450 rem scnclr
460 restore
470 print "{home}{down}{down}{down}{down}{down}{down}{down}{down}";
480 print "total time passed:";ti$
490 print "backup..."
500 dsave "c162021"
Il programma sfrutta un ciclo di animazione (ciclo do-loop tra le linee 270 e 440) molto semplice: la struttura dati prevede un numero che indica in decimi di secondo per quanto temo dovrà rimanere il frame, e poi i dati vengono letti finché non si incontra la parola chiave “END”.
Per prima cosa viene cancellato lo schermo (linea 300).
Poi si legge ogni riga e la si stampa, fino ad arrivare alla fine del fotogramma (340); a quel punto si attende per un numero di sessantesimi di secondo specifici, attraverso un ciclo chiamato “busy wait” (ciclo do-loop in 400-430)
Dopodiché si procede con il frame successivo (440).
La struttura dati è leggibile e leggera, e potete mettere le strutture DATA dove volete: noi abbiamo preferito metterle in testa.
Inoltre, il parser del basic è di “bocca buona”, e se non usate caratteri di punteggiatura potete evitare gli apici in molti dei testi inseriti nelle strutture DATA.
Poiché lo schermo del C/16 è 40x25 con meno di 1Kb di può descrivere l’intero schermo, e con 64Kb possiamo creare animazioni molto lunghe.