In C++ le funzioni possono anche chiamarsi l'una con l'altra: una funzione può al proprio interno chiamare un'altra funzione (e così via). Questa proprietà consente di costruire intere gerarchie di funzioni, a partire da funzioni semplici fino ad arrivare a funzioni sempre più complesse (che usano le funzioni più semplici per il loro funzionamento). Per fare un esempio di come si possano costruire funzioni complesse a partire da funzioni semplici, consideriamo le funzioni grafiche.
Per poter utilizzare le funzioni grafiche in Dev-C++ occorre installare, se non presente, la WinBGIm Graphics Library. Si tratta di una library di funzioni grafiche realizzata dal dipartimento di Computer Science dell'Università del Colorado.
Per verificare se WinBGIm è presente nella vostra installazione create un nuovo progetto e verificate se fra le opzioni di progetto è presente anche WinBGIm (vedi figura):
Nel caso in cui la library non sia installata, è possibile scaricarla da internet e installarla.
Per utilizzare la library grafica è sufficiente scegliere la scheda WinBGIm in Nuovo Progetto e quindi l'opzione WinBGIm (vedi figura precedente).
Il file main.cpp che viene generato automaticamente è un semplice esempio che può essere sostituito col proprio programma (vedi gli esempi nel seguito).
Il programma mostrato nell'esempio qui sotto si limita a disegnare un puntino bianco sulla finestra nera alle coordinate x=100 e y=300:
#include <iostream>
#include "graphics.h"
using namespace std;
int main(int argc, char *argv[])
{
int gd=DETECT, gm; //variabili necessarie per inizializzare la grafica
initgraph(&gd, &gm, ""); //inizializza il modo grafico
//disegna un puntino bianco (15) alle coordinate x=100, y=300 sullo schermo
putpixel(100, 300, 15);
getch(); //attende che venga premuto un tasto
closegraph(); //chiude la finestra grafica
return EXIT_SUCCESS;
}
Le prime righe del programma (inizializzazione della scheda grafica) vanno copiate così come sono. La funzione putpixel ha come prototipo (contenuto in graphics.h, il file include delle funzioni grafiche):
void putpixel(int x, int y, int color)
In pratica per usarla bisogna passarle le due coordinate del punto e il colore (un numero intero compreso fra 0 e 15, dove 0 è il colore nero e 15 è il colore bianco).
Il risultato non è particolarmente entusiasmante, lo riconosco. Comunque è il primo passo per usare la grafica! La figura seguente mostra come vengono calcolate le coordinate, ovvero dall'angolo superiore sinistro della finestra (al contrario di quanto si fa normalmente in geometria):
Il programma qui sotto è leggermente più interessante, in quanto disegna sullo schermo un segmento orizzontale bianco, di lunghezza 50 pixel a partire dalle coordinate x=100, y=300:
#include <iostream>
#include "graphics.h"
using namespace std;
int main(int argc, char *argv[])
{
int gd=DETECT, gm;
int i;
initgraph(&gd, &gm, ""); //inizializza il modo grafico
for (i=100;i<150;i++)
putpixel(i, 300, 15); //disegna un segmento di lunghezza 50
getch(); //attende che venga premuto un tasto
closegraph();
return EXIT_SUCCESS;
}
Il risultato è mostrato in figura:
E' però interessante, ai nostri scopi, osservare che, a partire dalla putpixel, possiamo facilmente creare funzioni più complesse.
Per esempio la funzione seguente disegna sullo schermo un segmento, date le coordinate degli estremi (iniziale e finale) e il colore:
void segmento (int x1, int y1, int x2, int y2, int col)
{
double x,y;
int i;
for (x=x1,y=y1,i=0;i<1000;i++)
{
putpixel((int) x, (int) y, col);
x = x + (x2-x1)/1000.0;
y = y + (y2-y1)/1000.0;
}
}
Analogamente possiamo usare la precedente funzione segmento per creare una funzione che disegna un rettangolo a partire dalle coordinate dei due vertici superiore-sinistro e inferiore-destro:
void rettangolo(int xsup, int ysup, int xinf, int yinf, int col)
{
segmento(xsup,ysup,xinf,ysup,col);
segmento(xsup,ysup,xsup,yinf,col);
segmento(xsup,yinf,xinf,yinf,col);
segmento(xinf,ysup,xinf,yinf,col);
}
Come ultimo esempio consideriamo infine una funzione per disegnare un cerchio sullo schermo. Questa funzione usa, oltre alla putpixel, anche le funzioni sin e cos della libreria matematica standard del C (bisogna includere in testa il file math.h):
void cerchio(int x, int y, int r, int color)
{
static const double PI = 3.1415926535;
double i, angle, x1, y1;
for(i = 0; i < 360; i += 0.1)
{
angle = i;
x1 = r * cos(angle * PI / 180);
y1 = r * sin(angle * PI / 180);
putpixel(x + x1, y + y1, color);
}
}
L'elenco completo delle funzioni grafiche della library WinBGIm si trova qui.
Sito realizzato in base al template offerto da
http://www.graphixmania.it