POSITION

Programme avec Graphique et Texte

PC-BASIC

Version 1

POSITION1.BAS

Jetez le papier millimétré

Un programme de création d'images GW-BASIC vraiment utile - dans lequel vous pourriez jeter le papier millimétré -

il devrait faire ce qui suit :

vous permettre de

(1) dessiner sur des écrans à basse et haute résolution ;

(2) tracer à la fois des points et des lignes ;

(3) peindre aux endroits spécifiés ;

(4) noter le mouvement absolu par rapport au mouvement relatif ;

et (5) être en mesure de sauvegarder votre travail, soit au format texte, soit dans une sorte de format de fichier image.

POSITION. BAS satisfait aux cinq critères.

Exécutez POSITION. BAS, et on vous posera deux questions :

Dans quel ÉCRAN souhaitez-vous dessiner ?

et Comment voudriez-vous appeler votre fichier ?

Notez que l'extension de fichier doit être .bas, et voici pourquoi :

POSITION. BAS produit un programme GW-BASIC presque prêt à l'emploi contenant votre chef-d'œuvre qui est juste un croquis.

Il existe plusieurs techniques de codage présentées dans ce programme que nous n'avons pas rencontrées jusqu'à présent. Plus particulièrement, examinez la ligne 10, contenant l'instruction GET.

GET capture une image à l'écran et la stocke sous forme de tableau, dans ce cas appelé DEG. L'image capturée ici est celle d'un point de couleur blanc, qui est utilisé comme curseur de dessin.

La ligne 35 prend l'image acquise par GET et utilise l'instruction PUT pour l'apposer sur l'écran. Le paramètre XOR permet au point blanc de se déplacer sur l'écran tout en laissant l'arrière-plan intact ; ainsi, si le point passe sur certaines lignes tracées précédemment, ces lignes restent là, inchangées.

Plusieurs instructions PRINT #1 organisent le fichier de sortie .bas - en prenant en compte des éléments tels que les numéros de ligne (affectés à la variable L) - et les mouvements absolus et relatifs sont des options à la volée, facilement commutables en appuyant sur une touche.

Le mouvement relatif, cependant, est un peu plus difficile à produire dans le fichier car tout décalage dans le sens positif de x ou y nécessite un signe plus devant l'amplitude du mouvement; d'où la nécessité de les variables de chaîne SIGNX $ et SIGNY$.

Bien que POSITION.BAS représente l'instruction PAINT, il ne sera pas réellement PAINT à l'écran, elle affiche simplement un point lumineux comme espace réservé pour l'emplacement de remplissage.

Il y a deux raisons à cela. Tout d'abord, si une forme à remplir n'est pas complètement fermée, la peinture "se répandra" et laissera un désordre sur tout l'écran.

Deuxièmement, même si la forme est fermée, son périmètre doit être entièrement d'une seule couleur. Pour cette raison, lorsqu'une instruction PAINT est insérée dans les générations POSITION.BAS du fichier .bas, l'utilisateur doit manuellement coder le paramètre de couleur de bordure correct.

J'ai utilisé POSITION.BAS pour dessiner un palmier et a appelé le fichier enregistré PALM. BAS. Lorsque j'ai terminé l'esquisse rapide, voici à quoi ressemblait le code de sortie de PALM.BAS :

PALM.BAS

Version 2

Revisiter POSITION.BAS

POSITION2.BAS

Sans doute le programme le plus important à émerger la version 1, POSITION1.BAS. Plus qu'un programme de dessin pixel par pixel, POSITION1.BAS a pris vos créations artistiques et les a traduites dans les commandes graphiques du code GW-BASIC, écrites dans un fichier séquentiel (en utilisant à plusieurs reprises l'instruction PRINT#) qui pourrait ensuite être exécuté en tant que programme autonome ou copié en masse dans un autre programme.

Malgré son utilité, le programme n'était pas sans problèmes. Par exemple, le formatage du fichier séquentiel était truffé d'espaces, ce qui n'avait pas beaucoup d'importance avec le mouvement absolu (transférer le pinceau vers une paire ordonnée spécifique à l'écran), mais créait un désordre avec un mouvement relatif (déplacer le pinceau aux coordonnées relatives à sa position actuelle).

Des problèmes importants incluaient également des signes +- apparaissant (rarement) où seuls les signes moins devraient apparaitre ainsi que des espaces superflus devant les signes plus qui entrainaient des appels de fonction illégaux, mais uniquement lorsqu'ils étaient exécutés par PC-BASIC (notez que GW-BASIC est beaucoup plus tolérant de telles choses, et exécutera tous les fichiers séquentiels créés par POSITION1.BAS, non modifiés, sans plainte).

La solution à ces problèmes consiste à ouvrir le fichier séquentiel généré avec un éditeur de texte, tel que le Bloc-notes, et à utiliser la fonction d'édition-recherche-remplacement pour supprimer les caractères incriminés.

Par exemple (les traits de soulignement ci-dessous représentent des espaces supplémentaires) :

Remplacer +- par -

Remplacer +_ par +

Remplacer (_par (

Remplacer _) par )

Remplacer j_par y

Remplacer _, par ,

Remplacer C_ par C

 Remplacer M_ par M

Un autre problème avec le programme : l'utilisation de l'instruction PAINT. Si vous avez peint une région de votre dessin—qui est représentée dans POSITION.BAS avec un pixel à l'emplacement du remplissage PAINT—vous devrez reformater la ligne dans le fichier séquentiel contenant l'instruction PAINT pour inclure la couleur de la bordure, qui doit être uniforme (sinon la peinture "déversera" en dehors des limites du polygone).

Semblable au formatage erratique du fichier séquentiel, cette bizarrerie particulière de PAINT était également inévitable, une conséquence des compromis que nous faisons tous lors de la programmation.

Mais pourquoi ressasser toutes ces questions ici ?

N'était-ce pas déjà traité dans la version 1 ?

Deux raisons.

D'abord, depuis POSITION1.BAS a été utilisé pour créer les graphiques d'un certain nombre de programmes restants dans ce livre, j'ai trouvé intellectuellement malhonnête de ne pas inclure également la liste complète des programmes dans ce livre.

Deuxièmement, quelques ajouts mineurs à POSITION1.BAS ont été créés pour permettre à l'utilisateur un peu plus de flexibilité, en particulier une fonction d'annulation de la commande précédente et un contrôle de l'utilisateur sur le nombre de commandes de dessin apparaissant par ligne sur le fichier séquentiel. (Avant, il n'y avait pas le choix : dix commandes était le montant fixé.)

La commande d'annulation est utile si vous faites une erreur lors du dessin ; cependant, seule la commande précédente peut être annulée.

De plus, étant donné que ce qui est imprimé dans le fichier séquentiel ne peut pas être "désimprimé", une remarque, donnant des instructions précises sur ce qu'il faut supprimer du fichier séquentiel, est émise.

Ainsi, une fois que vous avez terminé votre dessin, un travail supplémentaire de nettoyage du fichier texte sera nécessaire. Le contrôle du nombre de commandes de dessin par ligne peut être utilisé avec un effet intéressant.

Par exemple, considérons ce fichier séquentiel pour un dessin réalisé avec deux commandes par ligne :

10 REM DRAWING1.BAS
15 SCREEN 9 :CLS
20 PSET( 190 , 90 ), 11
25 DRAW"C 11 M 163 , 96 C 11 M 153 , 108 "
30 DRAW"C 11 M 155 , 131 C 11 M 161 , 137 "
35 DRAW"C 11 M 186 , 144 C 11 M 213 , 144 "
40 DRAW"C 11 M 221 , 138 C 11 M 225 , 125 "
45 DRAW"C 11 M 232 , 117 C 11 M 182 , 118 "
50 DRAW"C 11 M 245 , 126 C 11 M 246 , 132 "
55 DRAW"C 11 M 250 , 152 C 11 M 265 , 135 "
60 DRAW"C 11 M 273 , 159 C 11 M 283 , 127 "
65 DRAW"C 11 M 298 , 128 C 11 M 321 , 82 "
70 DRAW"C 11 M 320 , 154 C 11 M 325 , 195 "
75 DRAW"C 11 M 372 , 164 C 11 M 373 , 147 "
80 DRAW"C 11 M 323 , 140 C 11 M 379 , 121 "
85 DRAW"C 11 M 380 , 104 C 11 M 323 , 92 "
90 PSET( 374 , 180 ), 11
95 DRAW"C 11 M 380 , 196 C 11 M 406 , 198 "
100 DRAW"C 11 M 414 , 174 C 11 M 387 , 169 "
105 DRAW"C 11 M 375 , 179 C 11 M 415 , 196 "
110 DRAW"C 11 M 445 , 195 C 11 M 461 , 181 "
115 DRAW"C 11 M 462 , 187 C 11 M 459 , 209 "
120 DRAW"C 11 M 444 , 215 C 11 M 430 , 207 "
125 DRAW"C 11 M 469 , 214 C 11 M 482 , 203 "
130 DRAW"C 11 M 476 , 223 C 11 M 480 , 229 "
135 DRAW"C 11 M 501 , 207 C 11 M 519 , 205 "
140 PSET( 484 , 228 ), 11
145 DRAW"C 11 M 485 , 229 C 11 M 492 , 239 "
150 DRAW"C 11 M 498 , 240 C 11 M 528 , 243 "
155 DRAW"C 11 M 538 , 239 C 11 M 549 , 233 "
160 DRAW"C 11 M 574 , 231 "
165 PSET( 486 , 192 ), 11
170 DRAW"C 11 M 485 , 188 C 11 M 491 , 194 "
175 DRAW"C 11 M 482 , 192 C 11 M 492 , 190 "
180 DRAW"C 11 M 486 , 196 "

DRAWING1.BAS affiche "GW-BASIC" écrit en lettres cursives bleues. Pourtant, comme toutes les commandes de dessin ne sont pas regroupées sur une poignée de lignes mais plutôt réparties sur plusieurs lignes, nous pouvons insérer des pauses au bon moment après la construction de chaque petit segment du dessin, créant ainsi une animation de " GW-BASIC" étant écrit à l'écran :

10 REM DRAWING2.BAS
15 SCREEN 9 :CLS
20 PSET( 190 , 90 ), 11
25 DRAW"C 11 M 163 , 96 C 11 M 153 , 108 ":GOSUB 190
30 DRAW"C 11 M 155 , 131 C 11 M 161 , 137 ":GOSUB 190
35 DRAW"C 11 M 186 , 144 C 11 M 213 , 144 ":GOSUB 190
40 DRAW"C 11 M 221 , 138 C 11 M 225 , 125 ":GOSUB 190
45 DRAW"C 11 M 232 , 117 C 11 M 182 , 118 ":GOSUB 190
50 DRAW"C 11 M 245 , 126 C 11 M 246 , 132 ":GOSUB 190
55 DRAW"C 11 M 250 , 152 C 11 M 265 , 135 ":GOSUB 190
60 DRAW"C 11 M 273 , 159 C 11 M 283 , 127 ":GOSUB 190
65 DRAW"C 11 M 298 , 128 C 11 M 321 , 82 ":GOSUB 190
70 DRAW"C 11 M 320 , 154 C 11 M 325 , 195 ":GOSUB 190
75 DRAW"C 11 M 372 , 164 C 11 M 373 , 147 ":GOSUB 190
80 DRAW"C 11 M 323 , 140 C 11 M 379 , 121 ":GOSUB 190
85 DRAW"C 11 M 380 , 104 C 11 M 323 , 92 ":GOSUB 190
90 PSET( 374 , 180 ), 11
95 DRAW"C 11 M 380 , 196 C 11 M 406 , 198 ":GOSUB 190
100 DRAW"C 11 M 414 , 174 C 11 M 387 , 169 ":GOSUB 190
105 DRAW"C 11 M 375 , 179 C 11 M 415 , 196 ":GOSUB 190
110 DRAW"C 11 M 445 , 195 C 11 M 461 , 181 ":GOSUB 190
115 DRAW"C 11 M 462 , 187 C 11 M 459 , 209 ":GOSUB 190
120 DRAW"C 11 M 444 , 215 C 11 M 430 , 207 ":GOSUB 190
125 DRAW"C 11 M 469 , 214 C 11 M 482 , 203 ":GOSUB 190
130 DRAW"C 11 M 476 , 223 C 11 M 480 , 229 ":GOSUB 190
135 DRAW"C 11 M 501 , 207 C 11 M 519 , 205 ":GOSUB 190
140 PSET( 484 , 228 ), 11
145 DRAW"C 11 M 485 , 229 C 11 M 492 , 239 ":GOSUB 190
150 DRAW"C 11 M 498 , 240 C 11 M 528 , 243 ":GOSUB 190
155 DRAW"C 11 M 538 , 239 C 11 M 549 , 233 ":GOSUB 190
160 DRAW"C 11 M 574 , 231 ":GOSUB 190
165 PSET( 486 , 192 ), 11
170 DRAW"C 11 M 485 , 188 C 11 M 491 , 194 ":GOSUB 190
175 DRAW"C 11 M 482 , 192 C 11 M 492 , 190 ":GOSUB 190
180 DRAW"C 11 M 486 , 196 ":GOSUB 190
185 END
190 FOR X=l TO 600:NEXT X
200 RETURN

Voici donc la version 2 POSITION2.BAS

Maintenant avec la puissance considérable de POSITION.BAS à votre disposition, vous pouvez créer des œuvres d'art respectables et même des scènes de style cinéma.

POSITION.BAS 2.0 laisse encore beaucoup de place à d'autres améliorations. Prenez la fonction d'annulation, par exemple : pourquoi devrions-nous être limités à l'annulation de la commande précédente ?

 Et supposons que vous regrettiez immédiatement l'annulation, pourquoi ne pas ajouter une fonctionnalité de rétablissement ?

Même s'il n'y a pas d'annulation d'une ligne écrite dans un fichier séquentiel, il peut être plus logique de stocker toutes les commandes du dessin d'un utilisateur dans un grand tableau, en ne sortant le code dans le fichier séquentiel que lorsque le dessin est terminé.

De cette façon, les annulations/rétablissements auront été pris en charge dans les coulisses. Ces défis et bien d'autres (comme un meilleur formatage de la sortie) attendent toute âme assez courageuse pour coder POSITION. BAS version 3.0.

 

 

 

 

 

 

 

 

Recherche personnalisée