FreeBASIC – il punto

Oggi parleremo del punto.

In geometria il punto è una entità adimensionale che esiste soltanto in quanto è identificabile attraverso delle coordinate che ne specificano la posizione su un piano.

Come entità adimensionale possiamo dire che il punto fisicamente non esiste, ma, nonostante questo, il pensiero può lo stesso concepirlo concettualmente.

Nella grafica computerizzata il punto diventa invece un oggetto reale: il singolo pixel.

In FreeBASIC per disegnare un punto si utilizza l’istruzione pset.

Disegnare un pixel con pset

Vediamo un semplice esempio per disegnare tre pixels colorati:

''definisce una risoluzione dello schermo 100x100px
''con risoluzione grafica 32bpp
screenres 400, 200, 32

''definisce il colore bianco per il primo piano e il
''colore nero per lo sfondo
color(rgb(255,255,255),rgb(0,0,0))

''pulisce lo schermo grafico per rendere attivi i colori
''definiti con l'istruzione color
cls

''messaggio
locate 1: print "3 pixels"

''disegna tre pixels
pset(180,100), rgb(255,0,0) ''disegna un pixel rosso
pset(200,100), rgb(0,255,0) ''disegna un pixel verde 
pset(220,100), rgb(0,0,255) ''disegna un pixel blu 

sleep 

Coordinate relative con pset step

Abbiamo visto come disegnare tre pixels specificando per ciascuno le proprie coordinate assolute.

In FreeBASIC abbiamo però anche la possibilità di disegnare un pixel specificando delle coordinate relative all’ultimo pixel disegnato:

screen 14, 32
color(rgb(0,0,0),rgb(255,255,255))
cls
pset(40,40), rgb(255,0,0)
for i as integer = 1 to 39
  pset step(1,1), rgb(255,0,0)
next i
for i as integer = 1 to 40
  pset step(1,-1), rgb(0,255,0)
next i
for i as integer = 1 to 80
  pset step(-1,0), rgb(0,0,255)
next i
sleep

Per oggi ci fermiamo qui. Nel prossimo articolo parleremo della linea. 🙂

FreeBASIC – Grafica [1]

E così siamo finalmente arrivati a parlare di grafica.

Disegnare delle semplici figure 2D sullo schermo e interagire con queste sarà l’obiettivo principale di questa nuova serie di articoli.

Come è ormai nostra abitudine, partiamo subito con qualcosa di concreto.

Come creare una finestra grafica

La prima cosa che ci serve è creare una finestra grafica su cui poi andremo a disegnare.

Per farlo si utilizza l’istruzione screen.

screen 16
print "Ecco la mia prima finestra grafica in"
print "modalita' 16: ovvero con risoluzione 512x384 pixels."
sleep 'istruzione per sospendere l'esecuzione del programma

Dare un titolo alla finestra grafica

Per abbellire la nostra finestra grafica diamole un titolo sfruttando la subroutine windowtitle:

windowtitle("La mia prima finestra")
screen 19
sleep

Modalità grafica

Il numero subito dopo l’istruzione screen definisce la modalità grafica (mode) sulla base delle seguenti due tabelle:

Le modalità dalla 1 alla 13 sono compatibili anche con i vecchi programmi scritti con il glorioso QuickBASIC, mentre le nuove modalità dalla 14 alla 21 sono specifiche del FreeBASIC. Sarà proprio su queste ultime che ci concentreremo.

Le due tabelle ci mostrano con chiarezza che più la modalità scelta sarà alta, più grandi saranno le dimensioni digitali della nostra finestra: ovvero la risoluzione dello schermo (resolution).

La dimensione digitale di uno schermo (nel nostro caso della finestra) è espressa come numero di pixels orizzontali e verticali (p.e. 512×384).

Scriviamo ora un semplice programma per visualizzare una finestra in tutte e sedici le diverse modalità. Per farlo sfrutteremo un array e un ciclo for.

'dimensiona un array con tutte le modalità grafiche
 dim mode_array (1 to 16) as integer

 'assegna i valori
 mode_array(1) = 1
 mode_array(2) = 2
 mode_array(3) = 7
 mode_array(4) = 8
 mode_array(5) = 9
 mode_array(6) = 11
 mode_array(7) = 12
 mode_array(8) = 13
 mode_array(9) = 14
 mode_array(10) = 15
 mode_array(11) = 16
 mode_array(12) = 17
 mode_array(13) = 18
 mode_array(14) = 19
 mode_array(15) = 20
 mode_array(16) = 21

 'visualizza con un ciclo le varie finestre
 for i as integer = lbound(mode_array) to ubound(mode_array)
   screen mode_array(i)
   print "Finestra grafica in modalita': "; mode_array(i)
   print "---"
   print "premi un taso per continuare…"
   sleep 'sospende l'esecuzione del programma
 next i

Funzione screenres

Le modalità grafiche che abbiamo visto hanno delle dimensioni digitali preimpostate, ma se volessimo creare una finestra grafica di dimensioni diverse?

Niente panico! FreeBASIC viene in nostro aiuto con la funzione screenres che ci permette proprio di definire le dimensioni digitali che vogliamo.

Questa funzione restituisce il valore 0 (zero) se le dimensioni digitali specificate sono realizzabili dal nostro computer, altrimenti viene restituito un numero che specifica il tipo di errore.

Per la gestione degli errori si rimanda ad un futuro articolo.

Dopo aver provato il codice più sotto, provate a specificare per esempio un numero negativo come larghezza o come altezza:

''crea una finestra grafica larga 800px e alta 50px 
select case screenres(800,50)
  case 0 ''tutto OK
    print "Ecco una strana finestra grafica!"
  case else ''errore
    beep
    print "Non posso creare la finestra grafica che desideri."
end select
sleep ''rimani in pausa

Bene. Per oggi ci fermiamo qui.

Nel prossimo articolo parleremo della risoluzione grafica: ovvero della qualità delle immagini. 🙂