FreeBASIC – tastiera

Dopo aver visto come lavorare con il mouse, oggi impareremo a lavorare con la tastiera (keyboard).

Funzione multikey

Il nome della funzione che utilizzeremo è multikey.

In quest’altro articolo viene invece descritto l’uso della funzione getkey.

Funzionamento

Questa funzione necessita come argomento del valore del codice del tasto che si vuole verificare se è stato premuto. Se il tasto viene effettivamente premuto la funzione restituisce il valore -1 (true), altrimenti 0 (false).

Sul sito ufficiale di FreeBASIC è presente la lista dei codici dei tasti.

A ciascun codice corrisponde una costante.

La collezione dei nomi di queste costanti rientra nello spazio dei nomi (namespace) identificato dalla sigla FB che va quindi anteposta al nome della costante attraverso la notazione puntata. Per esempio: FB.SC_ESCAPE (per indicare il tasto ‘Esc’).

Questi valori costanti sono definiti all’interno del file di intestazione fbgfx.bi che fa parte della libreria grafica di FreeBASIC.

Ciò comporta che all’inizio del modulo dovremo includere la libreria grafica attraverso l’istruzione #include.

Esempio

#include "fbgfx.bi"

dim as integer x, y
screen 19
x = 300: y = 200

''continua il ciclo sino alla pressione del tasto 'Esc' (esci)
do
  ''verifica se vengono premuti i tasti freccia
  if multikey(FB.SC_LEFT) then x = x - 1
  if multikey(FB.SC_RIGHT) then x = x + 1
  if multikey(FB.SC_UP) then y = y - 1
  if multikey(FB.SC_DOWN) then y = y + 1
  ''pulisce lo schermo e disegna il cerchio alle nuove coordinate
  cls
  circle(x, y), 30
  sleep 15, 1
loop until multikey(FB.SC_ESCAPE)

Il secondo parametro (1) della funzione sleep comunica al compilatore FreeBASIC che la pausa di 15 ms non può essere interrotta dalla pressione di un qualsiasi tasto.

Bene. Anche oggi abbiamo fatto un piccolo passo in avanti. 🙂

FreeBASIC – Grafica [4]

Concludiamo l’esplorazione dell’istruzione screen analizzando il suo quarto attributo che nella documentazione ufficiale in inglese viene definito flags.

Questo attributo serve per impostare diverse proprietà dello schermo, ma per lo scopo didattico della nostra guida ci interesseremo soltanto di quelle relative ad alcune delle proprietà della finestra grafica, ovvero:

  1. la modalità a schermo intero (fullscreen mode);
  2. la presenza o meno dei bordi;
  3. se deve apparire sempre in primo piano o no.

I valori ammissibili per questo attributo sono predefiniti come valori costanti all’interno del file di intestazione fbgfx.bi che deve quindi necessariamente essere incluso nel file sorgente del nostro programma.

Se l’attributo flag viene omesso, verrà aperta una normale finestra (che corrisponde, come vedremo poco più sotto, alla costante GFX_WINDOWED).

Vediamo ora i nomi e il significato di queste costanti:

  • GFX_WINDOWED: apre una normale finestra grafica secondo le caratteristiche specificate dai primi tre attributi dell’istruzione screen (ovvero la modalità grafica, la profondità di colore e il numero di pagine video);
  • GFX_FULLSCREEN: se la modalità è supportata dal sistema operativo del proprio computer forza l’apertura di una finestra grafica a schermo intero, altrimenti verrà impostato di default il valore della costante GFX_WINDOWED;
  • GFX_NO_FRAME: crea una finestra grafica senza bordi;
  • GFX_ALWAYS_ON_TOP: crea una finestra grafica che rimane sempre in primo piano.

Ora non ci resta che provare con un semplice programma dove per testare le diverse proprietà della finestra grafica non dovremo far altro che trasformare in commento l’istruzione attiva, anteponendo il simbolo apice (‘), e poi trasformare in istruzione quella commentata che volete provare cancellando il simbolo apice:

'include il file contenente le costanti per gestire
'le proprietà dello schermo
#include "fbgfx.bi"

'specifica che le costanti rientrano nello spazio
'dei nomi di FreeBASIC (argomento che affronteremo
'più avanti)
#if __fb_lang__ = "fb"
  using fb
#endif

'Imposta una pagina video con la modalità grafica 19 per
'una risoluzione dello schermo di 800x600 pixels e
'la profondità di colore a 32bpp e poi imposta la
'relativa proprietà dello schermo
screen 19, 32, 1, GFX_WINDOWED
'screen 19, 32, 1, GFX_FULLSCREEN
'screen 19, 32, 1, GFX_NO_FRAME
'screen 19, 32, 1, GFX_ALWAYS_ON_TOP

print "Ciao mondo!"

sleep 'rimane in pausa

Bene. Con l’istruzione screen possiamo fermarci qui.

Al prossimo articolo. 🙂