LEZIONE 18 – L A G R A F I C A (3° Parte)

da | Dic 29, 2023 | MSX BASIC | 0 commenti

Prima di continuare a parlare delle altre funzioni della grafica, vorrei scusarmi con i lettori per un errore anzi una dimenticanza nella scorsa puntata.

Sull’ultima parte del comando CIRCLE, per esattezza sulla sua sintassi:

Sintassi: CIRCLE [STEP] (X,Y), Raggio [,Colore][InizioFine][,Rapporto]

Questa è quella corretta. Avevo dimenticato di inserire le coordinate X e Y.

PAINT

La funzione PAINT colora un disegno. Ma ci sono delle regole da rispettare. Deve essere una figura chiusa. Anche solo un pixel di distacco tra un punto e l’altro,

colorerà tutto lo schermo o tutto quello che non è dello stesso colore. Tutti i punti dell’area devono avere lo stesso colore. Il punto dove iniziare a colorare deve essere all’interno dell’area chiusa. Per fare capire meglio, usiamo il programmino del rombo fatto la lezione scorsa:

10 SCREEN 2: COLOR 1,15,15: CLS

20 LINE (50,50)-(75,75),6: LINE -(50,100),6

30 LINE -(25,75),6: LINE -(50,50),6

40 PAINT(75,75),6

50 GOTO 50

Dopo aver disegnato le quattro linee che formano il rombo, con la funzione PAINT ho dato le coordinate del punto da colorare all’interno dell’area, usando lo stesso colore delle suddette. Se proviamo a cambiare il colore di una delle linee

o il colore della PAINT, colorerà tutto lo schermo.

La Sintassi corretta è: PAINT(CoordinataOrizzontale,CoordinataVerticale),[Codice colore]. Se omettiamo il codice colore prenderà quello di primo piano.

DRAW

DRAW è un potente comando per disegnare immagini, anzi più che comando è un vero linguaggio dentro il Basic che usa le proprie istruzioni. Viene chiamato GML (Graphic Macro Language), è un po’ più veloce delle altre istruzioni Basic ed ha

un uso differente rispetto agli altri. Le istruzioni vengono inserite dentro le virgolette o possiamo anche metterle in una variabile alfanumerica. Per fare un esempio; disegniamo il rondo fatto sopra con la funzione LINE:

DRAW “BM50,50F25G25H25E25″ o A$=”BM50,50F25G25H25E25”: DRAW A$. Di seguito inserisco la tabella con tutte le istruzioni usate dalla DRAW con relativa spiegazione, dove n sarà il numero di pixel da disegnare.

Istruzione  Significato

Un      Disegna n pixel verso l’alto

Dn      Disegna n pixel verso il basso

Ln      Disegna n pixel verso sinistra

Rn      Disegna n pixel verso destra

En      Disegna n pixel verso l’alto in diagonale a destra

Fn      Disegna n pixel verso il basso in diagonale a destra

Gn      Disegna n pixel verso il basso in diagonale a sinistra

Hn     Disegna n pixel verso l’alto in diagonale a sinistra

Mx,y     Si posiziona nel punto specificato posto in x,y

B      Esegue l’istruzione senza disegnare

N      Ritorna al punto precedente dopo l’esecuzione

Cc       Assegna il colore al disegno, dove c deve essere da 0 a 15

Ar      Ruota l’immagine di 90°. r deve essere da 0 a 3

Ss      Riproduce l’immagine usando una scala di s/4

Xstringa    Esegue le istruzioni dentro una stringa o variabile a stringa

Le prime otto sono facili da intuire. Purtroppo, il punto dolente lo riscontriamo disegnando le diagonali, la linea avrà sempre un angolo di 45°, se vogliamo avere un angolo diverso dobbiamo usare la funzione LINE. L’istruzione M ci consente dii ndicare il punto di partenza del disegno, altrimenti inizierebbe a disegnare dall’ultimo posizionamento del cursore grafico. Possiamo usarla anche con variabili, basta aggiungere un uguale prima e un punto e virgola alla fine.

X=50: Y=50: DRAW “M=X;,=Y;R50F25”. Questa istruzione è come il PSET, infatti vedrete sempre un punto dove è stata posizionata. Per ovviare a questo, possiamo usare l’istruzione B: DRAW “BM50,50”, la possiamo usare anche se vogliamo tracciare una linea senza farla vedere: DRAW “BM50,50R50BF25”. Se invece vogliamo fare ritornare al punto di partenza dopo aver disegnato un segmento, basta mettere N d’avanti all’istruzione: DRAW “BM50,50NR50”. Così facendo abbiamo riportato il cursore grafico, dopo aver disegnato la retta a destra, nella posizione iniziale; 50,50. Se non usiamo l’istruzione C (Colore), userà quella di default cioè quella del primo piano, altrimenti ogni volta che vogliamo cambiare colore basta metterla prima: DRAW “BM50,50C15R50C1F25”. La linea che va’ a destra, sarà di colore bianco (15), quella in diagonale sarà nera (1). L’istruzione A, come abbiamo detto, fa ruotare l’immagine di 90°verso destra. A=0 è la posizione iniziale, perciò è superfluo usarla, ma dirò dopo perché è importante. A1=90°, A2=180°e A3=270°, se useremo un numero maggiore di 3 l’MSX segnalerà un messaggio d’errore. Se nel nostro disegno con DRAW abbiamo usato l’istruzione A, tutto quello che faremo dopo sempre con DRAW, sarà disegnato con l’ultima rotazione usata, perciò è preferibile portarlo nella posizione reale dopo ogni rotazione, usando A0, almeno che non si voglia disegnare tutto con angolazioni differenti. L’istruzione S ingrandisce o diminuisce l’immagine disegnata: per default è 4, visto che riproduce in scala 4.

S1 sarà un quarto dell’immagine, S2 la metà, S3 tre quarti, S4 quattro quarti cioè l’immagine reale. Dopodiché l’immagine diventa più grande; S5 più grande di 1/4, S8 sarà raddoppiata e così via. Una cosa importante; se un’immagine ingrandita

supera i bordi dello schermo, l’MSX non taglierà l’immagine ma verrà disegnata sull’ultima riga o colonna. Non possiamo usare valori negativi o con virgola.

Quello che ho detto per l’istruzione A vale anche per S, cioè una volta usato disegnerà sempre con l’ultima scala riportata. L’istruzione X serve ad inserire una stringa dentro le istruzioni DRAW. In una stringa di istruzioni basta mettere X e il nome della variabile seguito dal punto e virgola: A$=”U30R30D30″: DRAW”BM50,50R50D30L50U30XA$;”. Per concludere, ho usato solo lettere maiuscole dentro la DRAW, ma possiamo usarle anche minuscole o addirittura mischiarle, il risultato non cambia.

Come inserire stringhe di caratteri sul modo grafico Come ho detto in una delle lezioni precedenti, in modo grafico non è possibile usare le funzioni per la scrittura sullo schermo, come PRINT, LOCATE eccetera.

Questo perché quando l’MSX lavora in modalità grafica, usa un chip a parte, il TM9918A della Texas Instruments. Però possiamo aggirare questa carenza del nostro MSX, aprendo la periferica dello schermo grafico. Non sto a spiegare al dettaglio come funziona, ma vi basta sapere che per aprire tale periferica chiamata GRP, si usa il comando OPEN. Visto che dovremo scrivere sullo schermo grafico, la periferica sarà aperta in uscita cioè in output. Riassumendo: OPEN “GRP:” FOR

OUTPUT AS #1. Il #1 è il numero di porta che useremo, visto che per default possiamo usarne solo 1, oltretutto lo zero è un numero riservato del MSX, perciò siamo obbligati a scrivere il suddetto. Dopo aver aperto la periferica possiamo stampare sullo schermo usando la funzione PRINT con il numero di porta: PRINT #1,

“Adesso posso scrivere in modo grafico”. Obbligatori sono il cancelletto dopo la PRINT e la virgola prima di inserire la stringa o la variabile. Per chiudere la periferica si usa il comando CLOSE #1, anche solo CLOSE. Usato senza argomenti chiude tutte le periferiche aperte, ma visto che è solo una, non avremo problemi.

Facciamo un esempio con un programma:

10 SCREEN 2: COLOR 1,15,13: CLS

20 OPEN “GRP:” FOR OUTPUT AS #1

30 DRAW “BM10,50C6E15R50F15D30L80U30”: PAINT(30,70),6

40 DRAW”BM10,100″:PRINT #1,”Disegno di un trapezio”

50 GOTO 50

Riga 10 Ho attivato la modalità grafica e colore

Riga 20 Aperto periferica per scrivere sullo schermo grafico

Riga 30 Disegnato e colorato un trapezio

Riga 40 DRAW usato per posizionare la stampa della stringa. Potevo usare anche PSET(10,100), ed infine stampa la frase usando PRINT con il numero di periferica.

Riga 50 Come sapete già, blocca il programma alla riga 50

Se usiamo PRINT # senza aver aperto la periferica con OPEN, l’MSX segnalerà un messaggio d’errore.

Ci risentiamo dopo l’Epifania.

Grazie e Auguri di Buone Feste a tutti.

0 commenti

Invia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

LEZIONE 26 – INTERVAL ON, RND ED ALTRI

LEZIONE 26 – INTERVAL ON, RND ED ALTRI

Buongiorno a tutti, In questa puntata parlerò di un interrupt importante, specialmente per i giochi, quando vogliamo far apparire un nemico all'improvviso o un oggetto utile, ma anche per creare un cronometro o un orologio e tante altre cose. Il COMANDO sfrutta il...

it_ITIT_IT