QBasic – Dessiner
- QBasic – Introduction au QBasic
- QBasic – Ecrire sur l’écran
- QBasic – Mathématiques élémentaires
- QBasic – La ponctuation (syntaxe)
- QBasic – Les variables
- QBasic – Les commentaires
- QBasic – Les constantes
- QBasic – Entrée de données
- QBasic – Les boucles inconditionnelles
- QBasic – Les boucles conditionnelles
- QBasic – Structure conditionnelle
- QBasic – Les cas
- QBasic – Maths, logique et divers
- QBasic – Le texte
- QBasic – Le son
- QBasic – Dessiner
- QBasic – Sous-programmes, fonctions et procedures
- QBasic – Les types de variables
- QBasic – Les tableaux
- QBasic – Les types personalisés
- QBasic – L’organisation des données
- QBasic – QBasic et le système d’exploitation
- QBasic – L’accès aux fichiers
- QBasic – Le traitement des erreurs
- QBasic – La manette de jeu
- QBasic – Encore plus loin dans le graphisme
- QBasic – La mémoire
- QBasic – Le langage machine et la souris
- QBasic – L’heure, la date, le temps
- QBasic – Le clavier
- L’instruction SCREEN
- L’instruction WIDTH
- Les couleurs
- Les instructions PSET et PRESET
- Lignes et rectangles (instruction LINE)
- Tracer un cercle (CIRCLE)
- DRAW
- Le remplissage
Pour l’instant, nous avons utilisé exclusivement le mode texte. Ce mode est très limité est
ne permet pas d’exploiter à 100% les capacités graphiques offertes par QBasic. En QBasic, il
existe 12 mode d’écran (0 à 13, sauf 5 et 6).
L’instruction SCREEN
L’instruction SCREEN permet de passer d’un mode d’écran à un autre. Le mode d’écran
par défaut est le 0, c’est à dire le mode texte. Voici les differents mode possibles :
| Mode d’écran | Résolution (en pixels) | Couleurs | Texte | Adaptateurs graphiques |
|---|---|---|---|---|
| 0 | Mode texte uniquement | 16 | 40 x 25, 40 x 43, 40 x 50, 80 x 25, 80 x 43, ou 80 x 50 | MDPA, CGA, Hercules, Olivetti, EGA, VGA ou MCGA |
| 1 | 320 x 200 | 4 | 40 x 25 | CGA, EGA, VGA ou MCGA |
| 2 | 640 x 200 | 2 | 80 x 25 | CGA, EGA, VGA ou MCGA |
| 3 | 720 x 348 | 1 | 80 x 25 | Hercules, Olivetti ou AT&T |
| 4 | 640 x 400 | 1 | 80 x 25 | Hercules, Olivetti ou AT&T |
| 7 | 320 x 200 | 16 | 40 x 25 | EGA ou VGA |
| 8 | 640 x 200 | 16 | 80 x 25 | EGA ou VGA |
| 9 | 640 x 350 | 16 | 80 x 25, ou 80 x 43 | EGA ou VGA |
| 10 | 640 x 350 | 4 | 80 x 25, ou 80 x 43 | Ecran monochrome |
| 11 | 640 x 480 | 2 | 80 x 30, ou 80 x 60 | VGA ou MCGA |
| 12 | 640 x 480 | 16 | 80 x 30, ou 80 x 60 | VGA |
| 13 | 320 x 200 | 256 | 40 x 25 | VGA ou MGCA |
L’instruction WIDTH
Avant d’entrer de plein fouet dans le dessin, une dernière remarque concernant le texte. Vous
aurez remarquez que dans la colonne ‘Texte’ du tableau ci-dessus, il arrive qu’il y est plusieurs
possibilités de résolution pour le mode texte.
Par exemple, pour le mode 0 (le plus riche), si on avait voulu un écran de 80 colonnes et
de 50 lignes, on aurrait écrit:
SCREEN 0′ Passage au mode d’écran 0
WIDTH 80, 50′ 80 colonnes et 50 lignes
Les couleurs
Il existe 16 couleurs en QBasic (de 0 à 15).
| Couleur | Numéro | Modes d’écran |
|---|---|---|
| Noir | 0 | 0, 1, 2, 7, 8, 9, 11, 12, et 13 |
| Bleu | 1 | 0, 7, 8, 9, 12, et 13 |
| Vert | 2 | 0, 7, 8, 9, 12, et 13 |
| Cyan | 3 | 0, 7, 8, 9, 12, et 13 |
| Rouge | 4 | 0, 7, 8, 9, 12, et 13 |
| Violet | 5 | 0, 7, 8, 9, 12, et 13 |
| Marron | 6 | 0, 7, 8, 9, 12, et 13 |
| Blanc | 7 | 0, 7, 8, 9, 12, et 13 |
| Gris | 8 | 0, 7, 8, 9, 12, et 13 |
| Bleu clair | 9 | 0, 7, 8, 9, 12, et 13 |
| Vert clair | 10 | 0, 7, 8, 9, 12, et 13 |
| Cyan clair | 11 | 0, 1, 7, 8, 9, 12, et 13 |
| Rouge clair | 12 | 0, 7, 8, 9, 12, et 13 |
| Violet clair | 13 | 0, 1, 7, 8, 9, 12, et 13 |
| Jaune | 14 | 0, 7, 8, 9, 12, et 13 |
| Blanc brillant | 15 | 0, 1, 2, 7, 8, 9, 11, 12, et 13 |
Pour changer la couleur, on utilise l’instruction COLOR. Suivant le mode d’écran
sélectionné, cette instruction peut avoir plusieurs arguments. Pour simplifier, voici un
tableau regroupant les différents cas:
| Mode d’écran | Syntaxe |
|---|---|
| 0 | COLOR Texte, Fond, Cadre |
| 1 | COLOR Fond |
| 4, 12 et 13 | COLOR Texte |
| 7, 8, 9 et 10 | COLOR Texte, Fond |
Voici quelques exemples d’applications :
- Mode 0 :
SCREEN 0
COLOR 0, 5, 4′ Texte Noir, Fond Violet, Cadre Rouge
PRINT « Ceci est un texte » - Mode 1 :
SCREEN 1
COLOR 1′ Fond Bleu
PRINT « Ceci est un texte » - Mode 4, 12 et 13 :
SCREEN 12
COLOR 2′ Texte Vert
PRINT « Ceci est un texte » - Mode 7, 8, 9 et 10 :
SCREEN 7
COLOR 8, 1′ Texte Gris, Fond Bleu
PRINT « Ceci est un texte »
Il est très facile de faire clignoter un texte. Il suffit pour cela d’ajouter
16 à la couleur séléctionnée.
Exemple :
SCREEN 0
CLS
FOR i = 0 to 15
COLOR i
PRINT « Couleur N° »; i;
COLOR i + 16
PRINT « Clignotement correspondant »
NEXT i
Les instructions PSET et PRESET
Ces instructions permettent de tracer un point sur l’écran. Leur syntaxe est très simple :
PSET (X, Y), [Couleur]
PRESET (X, Y), [Couleur]
Utilisées ainsi, ces deux instructions sont équivalentes. Mais si l’on ne spécifie pas le
dernier argument (Les arguments entre crochets [ et ] sont TOUJOURS faculatatifs)
qui indique la couleur a utiliser, PSET utilise la couleur de premier plan et PRESET
la couleur d’arrière plan. Ca peut être utile pour réaliser une animation sommaire. Et oui,
pour animer un graphisme, il faut d’abord effacer ce graphisme, puis le redéssiner ailleur.
Nous verrons un exemple plus tard. Pour l’instant, observez ce magnifique ciel étoilé
scintillent, grâce à l’utilisation de
PSET, PRESET, RND, DO…LOOP :
SCREEN 1 ‘ 320 x 200 pixels
CLSDO
PSET (RND * 320, RND * 200) ‘ On dessine un point au hasard
FOR i = 0 TO 100 ‘ On efface plusieurs point pour un ciel harmonieux
PRESET (RND * 320, RND * 200) ‘ On efface un point au hasard
NEXT i
LOOP
Pour quitter ce programme, tapez CTRL + PAUSE.
Lignes et rectangles (instruction LINE)
Pour tracer une ligne, on utilise l’instruction LINE. Voici sa syntaxe :
LINE (X1, Y1)-(X2, Y2)
Les coordonnées X1 et Y1 représente la première extrémité de la ligne. Les coordonnées X2 et Y2
corespondent quand à elles à la deuxième extrémité de la ligne. L’exemple suivant trace une
ligne oblique, au centre de l’écran :
SCREEN 12
CLS
LINE (50, 50)-(590, 430)’ Ligne
Pour déterminer la couleur de la ligne, on spécifie le numéro de la couleur. Par exemple, pour
une ligne rouge :
SCREEN 12
CLS
LINE (50, 50)-(590, 430), 4′ Ligne Rouge
Mais l’instruction
LINE ne s’arrête pas là. Elle permet de tracer des rectangle en mentionnantla lettre B (pour Box) comme argument. Le rectangle tracé aura alors pour premier coin X1 et Y1,
et comme coin opposé X2 et Y2. Autrement dit, il aura pour diagonale la ligne qui aurrait été
tracée sans B :
SCREEN 12
CLS
LINE (50, 50)-(590, 430), 4, B’ Rectangle Rouge
Maintenant, pour tracer un rectangle plein, on rajoute après le B, la lettre F (pour
Full. Ceci aura pour effet de remplir le rectangle avec la couleur choisie :
SCREEN 12
CLS
LINE (50, 50)-(590, 430), 4, BF’ Rectangle Rouge Rempli
Un dernier argument permet de spécifier l’aspect de la ligne. Il est codé sur 16 bits. Le
fonctionnement est assez complexe. Lisez si vous voulez.
Qui dit bit dit BINAIRE. Un entier de 16 bits, c’est en fait 16 chiffres, soit
0, soit 1, l’un à coté de l’autre. Par exemple 1010101010101010 est un nombre binaire.
Pour définit l’aspect de la ligne, QBasic regarde la position de chaque 1 ou 0 de gauche
à droite. Si c’est un 1, un point est dessiné. Si c’est un 0, il n’y en a aucun.
SCREEN 12
CLS
LINE (50, 50)-(590, 430), , , 3′ Ligne en pointillés (3 = 011 en binaire)
Tracer un cercle (CIRCLE)
Pour tracer un cercle sur l’écran, on utilise l’instruction CIRCLE dont la syntaxe est
la suivante :
CIRCLE (X, Y), Rayon
X et Y représentent le centre du cercle. Rayon est quand à lui le rayon du cercle. L’exemple
suivant trace un cercle de 50 pixels au centre de l’écran en mode d’écran 12 :
SCREEN 12
CLS
CIRCLE (320, 240), 50′ Un cercle
Comme pour une ligne, on peut changer la ligne en donnat le numéro de la couleur correspondante :
SCREEN 12
CLS
CIRCLE (320, 240), 50, 14′ Un cercle jaune
Et à partir d’ici, comme pour une ligne, il y a des tas d’arguments permettant de triturer ce
cercle.
On peut, par exemple, au lieu d’un cercle, tracer un arc. On spécifie pour celà l’angle de
départ de l’arc, puis la fin.
Les mesures d’angles doivent être exprimées en radians. 360° = 2 x PI rads Donc, pour convertir des degrès en radians, il faut effectuer l’opération suivante : Radians = 2 * PI / 360 * Degres En simplifiant l’équation : Radians = PI / 180 * Degres De plus, on adopte le sens trigonométrique (anti-horaire). Et comme dans un repère ortho-normé, on part de la partie X positif et Y positif. |
Donc, si on suit scrupuleusement les rêgles énoncées, pour tracer le quart supérieur droit de
notre cercle, on écrit ceci :
CONST PI = 3.14159265458′ On définit la constante PI
SCREEN 12
CLS
CIRCLE (320, 240), 50, 14, 0, PI / 180 * 90′ Un quart de cercle jaune
Le dernier argument permet de dessiner une ellipse. Cet argument est en fait le rapport du
rayon Y sur le rayon X. Cette exemple transforme notre cercle de départ en élipse :
SCREEN 12
CLS
CIRCLE (320, 240), 50, 14, , , .5′ Une ellipse jaune
DRAW
Une dernière méthode graphique consiste à utilisé l’instruction DRAW. Cette instruction
remplace en quelque sortes ce qu’on appelait la tortue dans d’anciennes (mais alors anciennes!)
versions de langages dont certains ont malheuresement disparus aujourd’hui (malheuresement car
on pouvait tout de même bien s’amuser!).
Pour utiliser
DRAW, on lui associe tout simplement une chaine de caractères où se trouve lesinstructions à executer, à la manière de l’instruction
PLAY pour le son.- D[n] Déplace le curseur vers le bas de n unités.
- E[n] Déplace le curseur vers le haut et la droite de n unités.
- F[n] Déplace le curseur vers le bas et la droite de n unités.
- G[n] Déplace le curseur vers le bas et la gauche de n unités.
- H[n] Déplace le curseur vers le haut et la gauche de n unités.
- L[n] Déplace le curseur vers la gauche de n unités.
- M+x,y Place le curseur sur le point x,y.
- R[n] Déplace le curseur vers la droite de n unités.
- U[n] Déplace le curseur vers le haut de n unités.
- [B] Préfixe facultatif qui déplace le curseur sans tracé.
- [N] Préfixe facultatif qui trace et retourne le curseur à sa position initiale.
- An Effectue une rotation de n * 90 degrés (n peut être 0, 1, 2, ou 3).
- Cn Définit la couleur de tracé (n est un attribut).
- Pn1,n2 Définit les couleurs de remplissage et de bordure d’un objet (n1=couleur de remplissage, n2=couleur de bordure)
- Sn Modifie l’échelle en définissant la longueur d’une unité de mouvement de
curseur. La valeur par défaut de n est 4, ce qui équivaut à un pixel. - TAn Rotation de n degrés (de -360 à 360).
L’exemple suivant trace un triangle réctangle :
SCREEN 1
CLS
‘ Pour être clair, on utilise la capacité qu’a QBasic à concaténer les chaines
‘ de caractères
Triangle$ = Triangle$ + « R15″ ‘ 15 unités à droites
Triangle$ = Triangle$ + « H15″ ‘ 15 unités en haut à gauche
Triangle$ = Triangle$ + « D15″ ‘ 15 untités vers le bas
DRAW Triangle$
Le remplissage
Ormis l’instruction
LINE qui permet de remplir facilement un rectangle avec la couleurchoisie, on peut utiliser l’instruction PAINT pour remplir facilement une surface avec
une couleur, ce qui est très utile pour remplir un cercle créé avec l’instruction
CIRCLE.La syntaxe de cette instruction est :
PAINT (X, Y), Couleur
Il y a d’autres arguments, mais il ne sont guère utiles…
Pour créer une cible, on écrira :
SCREEN 12 ‘ 640 x 480 pixels
CLSCouleur = 14 ‘ Définition de la couleur de remplissage
FOR i = 200 TO 0 STEP -50
IF Couleur = 14 THEN Couleur = 4 ELSE Couleur = 14 ‘ Changement de la couleur
‘ (Jaune ou rouge)
CIRCLE (320, 240), i, Couleur ‘ On déssine le cercle…
PAINT (320, 240), Couleur ‘ …puis on le remplit
NEXT i
Dans le dernier programme (Remplissage), un effet de moirage apparaît si l’on remplace STEP-50 par STEP-3; il s’accentue avec STEP-2 et STEP-1.
Very nice and informative website.
salut! puis savoir quel astuce utilisé pour obtenir en mode graphique le drapeau d’un pays par exemple avec toutes les combinaisons de couleurs, les étoiles, les arrondis, les lunes, les diagonales,…