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.