En débutant dans les graphismes sous QBasic, on peut avoir à faire face à une multitude de problèmes. Par exemple, imaginons que différents graphismes recouvrent l'écran, et que l'on affiche une fenêtre par dessus, nous voulons que d'un simple clic de souris la fenêtre disparaisse instantanément en dévoilant les graphismes du dessous.
Pour ceux qui connaissent le basculement entre les modes d'écran je précise que l'on travail en mode 9 ou 12, donc pas de ça ici!
D'autres me diront probablement qu'il suffit d'effacer l'écran et de ré-afficher les graphismes, mais il faudrais pour cela que tout les graphismes de l'écran soit en mémoire, et QBasic ne permet qu'un accès très limité à la mémoire vive.
Mais alors?
Déterminons en premier lieu les étapes à suivre:
- On copie la zone de l'écran derrière la fenêtre
- On affiche la fenêtre
- L'utilisateur clique
- On trace un rectangle noir sur la zone occupée par la fenêtre
- On replace la zone capturée
Tout d'abord, on dimensionne un tableau à l'aide de l'instruction
DIM tableau(valeur) (pour la valeur du tableau, essayez une valeur de plus en plus grande jusqu'à ne plus obtenir de message d'erreur).
- Pour capturer une zone de l'écran, on utilise
GET (x1, y1)-(x1, y2), tableau
- On trace le rectangle à l'aide de
LINE (x1, y1)-(x1, y2), couleur
- Puis on replace la zone graphique avec
PUT (x1, y1), tableau
Exemple:
Pour une fenêtre dont les coordonnées seront:
x1 = 200; y1 = 100; x2 = 440; et y2 = 380
Affichage de la fenêtre:
DIM fondFenetre(10000)
GET (200, 100)-(440, 380), fondFenetre
** on affiche la fenetre **
Effacer la fenêtre:
LINE (200, 100)-(440, 380), 0, BF
PUT (200, 100), fondFenetre
Et voilà, avec cette routine vous pourrez effectuer des basculements rapides entre des fenêtres, des objets, ou des décors, tout ça avec une fluidité étonnante.
ATTENTION: le tableau nécessaire occupe beaucoup de place mémoire, et capturer l'écran entier est impossible avec le peu de mémoire que nous offre un module QBasic.
Change la caféine en lignes de code, et aurait parfois besoin de l'inverse.