Amstrad CPC, muoviamo un oggetto.

Secondo Capitolo (wow incredibile!)

Come promesso, ecco il secondo capitolo dedicato alla magnifica macchina Amstrad ma ancor di più a come si sviluppava un videogioco negli anni 80.
Forse non ve l’ho detto ma quanto apprenderete qui, ovvero certe logiche o dinamiche, le potrete riutilizzare anche in linguaggi più evoluti o per sistemi più avanzati (Unity, Unreal Engine, Swift o Java).

Nel capitolo precedente, abbiamo visto come stampare a video qualcosa e la possibilità di ridefinirlo a piacere.
Abbiamo visto come disegnare un carattere in pixel con il comando SYMBOL.
Oggi, vediamo come muovere l’oggetto precedentemente creato.

Qualsiasi cosa venga disegnata a video, occupa un’area di memoria, detta VRAM che può essere spostata ed elaborata a piacimento.
Nei computer di una volta, questo quantitativo di VRAM era veramente limitato (si parla di pochi kb) od addirittura, come nel caso nel nostro Amstrad CPC, condiviso con la memoria del sistema.
Senza entrare troppo nei dettagli (lo approfondiremo molto più avanti con sezioni dedicate all’assembly), vi basti pensare ad un foglio a quadretti dove ogni singolo quadretto, corrisponde ad un pixel.

Come spostiamo un oggetto sul video?

Come detto prima, immaginate un foglio a quadretti dove disegneremo il nostro personaggio inventato.

15878486_10209945736354362_2136668278_o

Come fareste per dare l’idea di movimento?
Semplice, dovreste ridisegnare tutto il personaggio di un pixel (quadratino) avanti o indietro.

Sul nostro Basic creeremo due variabili chiamate X e Y che andranno a definire rispettivamente le ascisse e le ordinate di un grafico.
A questo punto, ci basterà sommare 1 (uno) alla posizione precedente per creare un effetto movimento.

Vediamo in dettaglio 

10 MODE 0:CLS:INK 0,0:BORDER 0
20 SYMBOL AFTER 245
30 SYMBOL 245,&X001111,&X0111111,&X11010111,&X11111111,&X11111111,&X11000011,&X0110011,&X001111
35 x%=1:y%=1
40 PEN 3:LOCATE x%,y%:PRINT ” “+CHR$(245)+” “:PEN 1
100 IF NOT(INKEY(8)) THEN GOSUB 1000
110 IF NOT(INKEY(1)) THEN GOSUB 1100
200 GOTO 40
1000 LOCATE 1,5:PRINT “sinistra”:x%=x%-1:RETURN
1100 LOCATE 1,5:PRINT “destra “:x%=x%+1:RETURN

amstrad-cpc-locomotive-basic-movimento-listato
La linee da 10 a 30 le abbiamo anche viste in precedenza e servono per creare il nostro personaggio in memoria.
La nuova linea 35 imposta le variabili di tipo intero, riconoscibili dal % dopo la variabile, ad 1 per entrambe.
La linea 40 è stata modificata aggiungendo il nuovo comando LOCATE x,y che ci darà modo di spostare il carattere ridefinito (Attenzione: stiamo sempre parlando di caratteri).
Da notare  PRINT ” “+CHR$(245)+” “ che stampa un carattere vuoto (” “) avanti e dietro il nostro personaggio chr&(245) ovvero il carattere ascii ridefinito alla linea 30.

Senza i caratteri vuoti, il nostro personaggio verrebbe stampato sempre a video come accade in figura:
amstrad-cpc-locomotive-basic-movimento-listato-cancellamento

La linea 100 controlla se la freccia sinistra viene premuta. In caso di pressione, verrà eseguita la SUBROUTINE alla linea 1000 attraverso il comando GOSUB (Vai alla subroutine).
La linea 110 fa la stessa cosa della linea 100 ma per la freccia destra e puntando alla SUBROUTINE in linea 1100
La linea 200 crea un “Main Loop” puntando alla linea 40.
Attenzione: Questo loop, serve al CPC per controllare ad ogni ciclo la pressione dei tasti e per disegnare a video il carattere dando il senso di movimento.
Le linee 1000 e 1100 stampano ad una posizione definita la scritta Sinistra o Destra e muovono il carattere.

Ed è qui che inizia il bello.

Potete notare come viene incrementata la variabile X di 1 (X=X+1). Ovvero, incrementa di 1 la posizione precedente.
Il comando RETURN, serve per tornare al GOSUB che ha eseguito questa riga (nel nostro caso il GOSUB 1000 alla linea 100)

Ed ecco il risultato a video.

amstrad-cpc-locomotive-basic-movimento

Per poter uscire dal DEMO premete il tasto ESC due volte.

Provate a muovere il personaggio in Y.
Piccolo aiuto, questi sono i comandi per la freccia su e giù:
IF NOT(INKEY(0)) THEN …
IF NOT(INKEY(2)) THEN …

Leggi anche il primo capitolo

Ci leggiamo al prossimo capitolo per la programmazione su Amstrad CPC 😉

 

Fabrizio Radica

Fabrizio Radica nasce nel '75. Appassionato di Computers, Videogames, Musica ed Arte. Ormai ha fatto pace con se stesso ammettendo di essere un Nerd :D

Potrebbero interessarti anche...