Section courante

A propos

Section administrative du site

 Langage  Installation  Elément  Tutoriel  Programmation  Emulateur  Annexe  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
QuickBASIC 4.5
Les remarques
Les opérateurs
Les instructions conditionnelles
Les instructions de boucles
Type de données
Définition de fonction
Définition de variable
Référence de procédures et fonctions
Référence de méta-commandes
Variables, types de données et arithmétique
Les fichiers et le traitement séquentiel des fichiers
Chaînage, fonctions et sous-programmes
Graphiques
Bonjour
Astronomie
Biochimie
Fichiers
Finance
Fractale
Géographie
Géométrie
Gouvernement
Histoire
Mathématique
Médicale
Météorologie
Océanographie
Sport
Temps
Tri
Trigonométrie
Validation
Phase lunaire
Calcul du calcium corrigé
Calcul le taux d'alcoolémie
Texte séquentiel
IPaymt/Interet
NPer
PPaymt/Principal
Triangle de «Sierpinski»
Distance en Km entre deux longitudes et latitudes
Aire d'un cercle
Aire d'une surface de prisme rectangulaire
Aire d'un triangle
Distance entre deux points
Treillis
Taxe de vente canadienne
Chiffre romain
Ackermann
Exp
Factoriel
Fibonacci
Log
Nombre premier
Odd
Random
Sqrt
Triangle Pascal
Hauteur utérine
Unité de mesure
Fréquence des vagues
Hockey
Année bissextile
Date de la Pâque
Heure courante
FirstDayOfMonth
Tri à bulle (Bubble Sort)
Tri Shell Sort
ArcCos
ArcSin
Atn/ATan/ArcTan/ArcTangente
Cos
Sin
Courriel
DOSBox
PCE - PC Emulator
PCem
Débogage
Table ASCII
Table de codes ANSI et page de codes
Références des codes d'erreurs
Références des adresses de cellule mémoire du «PC IBM»
Préface
Notes légal
Dictionnaire
Recherche

Graphiques

Le QBASIC et le QuickBASIC offre de nombreuses instructions graphiques et des fonctions pour créer une grande variété de formes, de couleurs et de motifs sur votre écran. Avec les graphiques, vous pouvez ajouter une dimension visuelle à presque n'importe quel programme, qu'il s'agisse d'un jeu, d'un outil pédagogique, d'une application scientifique ou d'un montage financier. Ainsi, le QBASIC et le QuickBASIC offre les possibilités d'effectuer tâches graphiques suivantes :

Ce dont vous avez besoin pour les programmes graphiques

Pour exécuter les exemples graphiques, votre ordinateur doit avoir une capacité graphique, intégrée ou sous la forme d'une carte graphique telle que l'adaptateur graphique couleur CGA (Color Graphics Adapter), l'adaptateur graphique amélioré EGA (Enhanced Graphics Adapter) ou la carte graphique vidéo VGA (Video Graphics Array). Vous avez également besoin d'un écran vidéo (monochrome ou couleur) prenant en charge les graphiques à base de pixels. Gardez également à l'esprit que ces programmes nécessitent tous que votre écran soit dans l'un des modes d'écran prenant en charge la sortie graphique. Le mode d'écran contrôle la clarté des images graphiques, le nombre de couleurs disponibles et la partie de la mémoire vidéo à afficher. Pour sélectionner un mode de sortie graphique, utilisez l'instruction suivante dans votre programme avant d'utiliser l'une des instructions graphiques ou fonctions décrites par la suite.

SCREEN mode

Ici, le mode peut être 1, 2, 3, 4, 7, 8, 9, 10, 11, 12 ou 13, selon la combinaison moniteur / adaptateur installée sur votre ordinateur. Si vous n'êtes pas sûr que les utilisateurs de vos programmes disposent ou non de matériel prenant en charge les graphiques, vous pouvez utiliser le test simple suivant :

  1. CONST FALSE = 0, TRUE = NOT FALSE
  2. 'Test pour vous assurer que l'utilisateur dispose d'un matériel doté d'une capacité couleur/graphique:
  3. ON ERROR GOTO Message    ' Activez la détection des erreurs.
  4. SCREEN 1                 ' Essayez le mode graphique un.
  5. ON ERROR GOTO 0          ' Désactivez le recouvrement des erreurs.
  6. IF NoGraphics THEN END   ' Fin si aucun matériel graphique.
  7. ' :
  8. END
  9. ' Routine de gestion des erreurs:
  10. Message:
  11.    PRINT "Ce programme nécessite des capacités graphiques."
  12.    NoGraphics = TRUE
  13.    RESUME NEXT

Si l'utilisateur n'a qu'un affichage monochrome sans carte graphique, l'instruction SCREEN produit une erreur qui à son tour déclenche une branche vers la routine de gestion des erreurs Message.

Pixels et coordonnées d'écran

Les formes et les figures sur un écran vidéo sont composées de points de lumière individuels appelés éléments d'image ou «pixels» (ou parfois comme «pels») en abrégé. Le QuickBASIC dessine et peint sur l'écran en activant ou désactivant ces pixels et en changeant leurs couleurs. Un écran typique est composé d'une grille de pixels. Le nombre exact de pixels dans cette grille dépend du matériel que vous avez installé et du mode d'écran que vous avez sélectionné dans l'instruction SCREEN. Plus le nombre de pixels est élevé, plus la clarté de la sortie graphique est élevée. Par exemple, une instruction SCREEN 1 donne une résolution de 320 pixels horizontalement par 200 pixels verticalement (320 x 200 pixels), tandis qu'une instruction SCREEN 2 donne une résolution de 640 x 200 pixels. La densité horizontale plus élevée en mode écran 2 (640 pixels par ligne contre 320 pixels par ligne) donne aux images un aspect plus net et moins irrégulier qu'en mode écran 1. Selon la capacité graphique de votre système, vous pouvez utiliser d'autres modes d'écran prenant en charge des résolutions encore plus élevées (ainsi que régler d'autres caractéristiques d'écran). Lorsque votre écran est dans l'un des modes graphiques, vous pouvez localiser chaque pixel au moyen de paires de coordonnées. Le premier nombre de chaque paire de coordonnées indique le nombre de pixels du côté gauche de l'écran, tandis que le second nombre de chaque paire indique le nombre de pixels du haut de l'écran. Par exemple, en mode écran 2, le point dans le coin supérieur gauche extrême de l'écran a les coordonnées (0,0), le point au centre de l'écran a les coordonnées (320,100) et le point dans l'extrême inférieur droit du coin de l'écran a des coordonnées (639, 199). Le QuickBASIC utilise ces coordonnées d'écran pour déterminer où afficher les graphiques (par exemple, pour localiser les extrémités d'une ligne ou le centre d'un cercle). Les coordonnées graphiques diffèrent des coordonnées en mode texte spécifiées dans une instruction LOCATE. Premièrement, LOCATE n'est pas aussi précis : les coordonnées graphiques indiquent les pixels individuels sur l'écran, alors que les coordonnées utilisées par LOCATE sont des positions de caractères. Deuxièmement, les coordonnées en mode texte sont données sous la forme «ligne, colonne», comme l'exemple suivant :

  1. ' Passez à la 13e ligne, 15e colonne, puis affichez le message à afficher:
  2. LOCATE 13, 15
  3. PRINT "Ce message devrait apparaître au milieu de l'écran."

C'est l'inverse des coordonnées graphiques, étant données sous la forme «colonne, ligne». Une instruction LOCATE n'a aucun effet sur le positionnement de la sortie graphique à l'écran.

Dessin de formes de base: points, lignes, boîtes et cercles

Vous pouvez transmettre des valeurs de coordonnées aux instructions graphiques QuickBASIC pour produire une variété de figures simples.

Tracer des points avec PSET et PRESET

Le niveau de contrôle le plus fondamental sur la sortie graphique consiste simplement à activer et désactiver des pixels individuels. Vous faites cela en QuickBASIC avec les instructions PSET (pour l'ensemble de pixels) et PRESET (pour la réinitialisation des pixels). L'instruction PSET(x, y) donne au pixel à l'emplacement (x, y) la couleur de premier plan actuelle. L'instruction PRESET(x, y) donne au pixel situé à l'emplacement (x, y) la couleur d'arrière-plan actuelle. Sur les moniteurs monochromes, la couleur de premier plan est la couleur utilisée pour le texte affiché et est généralement blanche, ambre ou vert clair; la couleur d'arrière-plan des moniteurs monochromes est généralement noire ou vert foncé. Vous pouvez choisir une autre couleur pour PSET et PRESET à utiliser en ajoutant un argument de couleur facultatif. La syntaxe est alors :

PSET(x,y), color

ou

PRESET (x, y), color

Parce que PSET utilise la couleur de premier plan actuelle par défaut et PRESET utilise la couleur d'arrière-plan actuelle par défaut, le PRESET sans paramètre de couleur efface un point dessiné avec PSET, comme indiqué dans l'exemple suivant :

  1. SCREEN 2 ' Résolution 640 x 200
  2. PRINT "Presse n'importe quel touche pour terminer."
  3. DO
  4.   ' Tracez une ligne horizontale de la gauche vers la droite:
  5.   FOR X = 0 TO 640
  6.       PSET (X, 100)
  7.   NEXT
  8.   ' Effacez la ligne de droite à gauche:
  9.   FOR X = 640 TO 0 STEP -1
  10.       PRESET (X, 100)
  11.   NEXT
  12. LOOP UNTIL INKEY$ <> ""
  13. END

Bien qu'il soit possible de dessiner n'importe quelle figure en utilisant uniquement des instructions PSET pour manipuler des pixels individuels, la sortie a tendance à être plutôt lente, car la plupart des images sont constituées de nombreux pixels. Le QuickBASIC a plusieurs instructions augmentant considérablement la vitesse à laquelle des figures simples - telles que des lignes, des boîtes et des ellipses - sont dessinées.

Dessiner des lignes et des boîtes avec LINE

Lorsque vous utilisez PSET ou PRESET, vous ne spécifiez qu'une seule paire de coordonnées puisque vous ne traitez qu'un seul point à l'écran. Avec LINE, vous spécifiez deux paires, une pour chaque extrémité d'un segment de ligne. Le format la plus simple de l'instruction LINE est la suivante :

LINE (x1, y1)- (x2, y2)

où (x1, y1) sont les coordonnées d'une extrémité d'un segment de ligne et (x2, y2) sont les coordonnées de l'autre. Par exemple, l'instruction suivante trace une ligne droite entre le pixel avec les coordonnées (10,10) et le pixel avec les coordonnées (150,200) :

  1. SCREEN 1
  2. LINE (10, 10)- (150, 200)

Notez que QuickBASIC ne se soucie pas de l'ordre des paires de coordonnées : une ligne de (x1, y1) à (x2, y2) est identique à une ligne de (x2, y2) à (x1, y1). Cette situation signifie que vous pouvez également écrire l'instruction précédente comme suit :

  1. SCREEN 1
  2. LINE (150, 200)- (10, 10)

Cependant, l'inversion de l'ordre des coordonnées peut avoir un effet sur les instructions graphiques suivant.

Utilisation de l'option STEP

Jusqu'à ce point, les coordonnées de l'écran ont été présentées comme des valeurs absolues mesurant les distances horizontales et verticales à partir du coin supérieur gauche extrême de l'écran, ayant des coordonnées (0,0). Cependant, en utilisant l'option STEP dans l'une des instructions graphiques suivantes, vous pouvez définir les coordonnées suivant STEP par rapport au dernier point référencé à l'écran :

Si vous imaginez des images dessinées à l'écran par un petit pinceau exactement de la taille d'un pixel, le dernier point référencé est l'emplacement de ce pinceau, ou curseur graphique, lorsqu'il a terminé de dessiner une image. Par exemple, les instructions suivantes laissent le curseur graphique sur le pixel avec les coordonnées (100,150) :

  1. SCREEN 2
  2. LINE (10, 10)-(100, 150)

Si la prochaine instruction graphique du programme est :

  1. PSET STEP(20, 20)

alors le point tracé par PSET n'est pas dans le quadrant supérieur gauche de l'écran. Au lieu de cela, l'option STEP a défini les coordonnées (20,20) par rapport au dernier point référencé, qui a des coordonnées (100,150). Cela rend les coordonnées absolues du point (100 + 20,150 + 20) ou (120,170). Dans le dernier exemple, le dernier point référencé est déterminé par une instruction graphique précédente. Vous pouvez également établir un point de référence dans la même instruction, comme indiqué dans l'exemple suivant :

  1. ' Définit une résolution de 640 x 200 pixels et placez le dernier point référencé au centre de l'écran:
  2. SCREEN 2
  3. ' Trace une ligne entre le coin inférieur gauche de l'écran et le coin supérieur gauche:
  4. LINE STEP(-310, 100) -STEP(0, -200)
  5. ' Dessine les marches d'escalier du coin supérieur gauche vers le côté droit de l'écran:
  6. FOR I% = 1 TO 20
  7.    LINE -STEP(30, 0) ' Tracez la ligne horizontale.
  8.    LINE -STEP(0, 5)  ' Tracez la ligne verticale.
  9. NEXT
  10. ' Dessinez les segments de ligne verticaux non connectés du côté droit vers le coin inférieur gauche:
  11. FOR I% = 1 TO 20
  12.    LINE STEP(-30, 0) -STEP(0, 5)
  13. NEXT
  14. DO: LOOP WHILE INKEYS = "" ' Attendez une frappe de touche

Notez la boucle DO vide à la fin du dernier programme. Si vous exécutez un programme QuickBASIC compilé et autonome produisant une sortie graphique, votre programme a besoin d'un mécanisme comme celui-ci à la fin pour maintenir la sortie à l'écran. Sinon, il disparaît de l'écran avant que l'utilisateur n'ait le temps de le remarquer.

Boîtes à dessin

En utilisant les formes de l'instruction LINE déjà présentées, il est assez facile d'écrire un programme court reliant quatre lignes droites pour former une boîte, comme indiqué ici :

  1. SCREEN 1 ' Résolution de 320 x 200 pixels
  2. ' Dessinez une boîte de 120 pixels sur un côté:
  3. LINE (50, 50)-(170, 50)
  4. LINE -STEP(0, 120)
  5. LINE -STEP(-120, 0)
  6. LINE -STEP(0, -120)

Cependant, QBASIC et QuickBASIC fournissent un moyen encore plus simple de dessiner une boîte, en utilisant une seule instruction LINE avec l'option B (pour boîte). L'option B est illustrée dans l'exemple suivant, produisant la même sortie que les quatre instructions LINE du programme précédent :

  1. SCREEN 1 ' Résolution de 320 x 200 pixels
  2. ' Tracez une boîte avec les coordonnées (50, 50) pour le coin supérieur gauche et (170, 170) pour le coin inférieur droit:
  3. LINE (50, 50)-(170, 170), , B

Lorsque vous ajoutez l'option B, l'instruction LINE ne relie plus les deux points que vous spécifiez avec une ligne droite; à la place, il dessine un rectangle dont les coins opposés (en haut à gauche et en bas à droite) sont aux emplacements spécifiés. Deux virgules précèdent le B dans le dernier exemple. La première virgule fonctionne ici comme un espace réservé pour une option inutilisée (le paramètre de couleur), ce qui vous permet de choisir la couleur d'une ligne ou des côtés d'une boîte. Comme précédemment, peu importe l'ordre dans lequel les paires de coordonnées sont données, le rectangle du dernier exemple peut également être dessiné avec cette instruction :

  1. LINE (170, 170)-(50, 50), , B

L'ajout de l'option F (pour le remplissage) après que B remplit l'intérieur de la boîte avec la même couleur que celle utilisée pour dessiner les côtés. Avec un affichage monochrome, c'est la même que la couleur de premier plan utilisée pour le texte affiché. Si votre matériel a des capacités de couleur, vous pouvez changer cette couleur avec le paramètre de couleur facultatif. La syntaxe introduite ici pour dessiner une boîte est la syntaxe générale utilisée dans QBASIC ou QuickBASIC pour définir une région graphique rectangulaire, et elle apparaît également dans les instructions GET et VIEW :

{GET | LINE | VIEW ) (x1,y1)-(x2,y2),...

Ici, (x1, y1) et (x2, y2) sont les coordonnées des coins diagonalement opposés du rectangle (en haut à gauche et en bas à droite).

Dessiner des lignes pointillées

Précédemment, nous expliquions comment utiliser LINE pour dessiner des lignes pleines et les utiliser dans des rectangles; autrement dit, aucun pixel n'est ignoré. En utilisant encore une autre option avec LINE, vous pouvez à la place dessiner des lignes en pointillés ou en pointillés. Ce processus est appelé style de ligne. Voici la syntaxe pour dessiner une seule ligne en pointillés du point (x1, y1) au point (x2, y2) en utilisant la couleur de premier plan actuelle.

LINE(x1,y1)-(x2,y2),,[[B]], style

Ici, le style est un entier décimal ou hexadécimal de 16 bits. L'instruction LINE utilise la représentation binaire du paramètre de style de ligne pour créer des tirets et des espaces vides, avec un 1 bit signifiant «activer le pixel» et un 0 bit signifiant «laisser le pixel désactivé». Par exemple, l'entier hexadécimal &HCCCC est égal à l'entier binaire 1100110011001100, et lorsqu'il est utilisé comme paramètre de style, il trace une ligne alternant deux pixels activés, deux pixels désactivés.

L'exemple suivant montre différentes lignes en pointillés produites à l'aide de différentes valeurs de style :

  1. SCREEN 2 ' Résolution de 640 x 200 pixels
  2. ' Style de données:
  3. DATA &HCCCC, &HFF00, &HF0F0, &HF000, &H7777, &H8888
  4. Row% = 4
  5. Column% = 4
  6. XLeft% = 60 : XRight% = 600
  7. Y% = 28
  8. FOR 1% = 1 TO 6
  9.   READ Style%
  10.   LOCATE Row%, Column%
  11.   PRINT HEX$ (Style%)
  12.   LINE (XLeft%, Y%)-(XRight%,Y%), , , Style%
  13.   Row% = Row% + 3
  14.   Y% = Y% + 24
  15. NEXT


PARTAGER CETTE PAGE SUR
Dernière mise à jour : Vendredi, le 27 novembre 2020