Accueil > QBasic > QBasic – Dessiner

QBasic – Dessiner

This entry is part 16 of 30 in the series QBasic - Tutoriel
  1. L’instruction SCREEN
  2. L’instruction WIDTH
  3. Les couleurs
  4. Les instructions PSET et PRESET
  5. Lignes et rectangles (instruction LINE)
  6. Tracer un cercle (CIRCLE)
  7. DRAW
  8. 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 :
































































































MODES D’ECRAN
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).
























































































COULEURS
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:






















L’INSTRUCTION COLOR
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
CLS

DO
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 mentionnant
la 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.








PETIT RAPEL DE MATHEMATIQUES

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 les
instructions à 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 couleur
choisie, 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
CLS

Couleur = 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

Series Navigation«QBasic – Le sonQBasic – Sous-programmes, fonctions et procedures»
Categories: QBasic Tags:
  1. Yves
    03/04/2002 à 16:51 | #1

    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.

  2. 10
    20/03/2006 à 01:19 | #2

    Very nice and informative website.

  1. Pas encore de trackbacks