Get et Put : l'affichage est allé dans ce tableau
GW-BASIC
(PC-BASIC)
Initiation au langage Basic
Dans les sections précédentes, vous avez appris quelques façons de déplacer des personnages d'un écran à un autre, mais aucune n'est très efficace. N'ayez pas peur; il y a un meilleur tableau. Cela a à voir avec GET et PUT.
En utilisant ces instructions, vous pouvez "obtenir" une zone rectangulaire de l'écran, stocker son contenu dans un "tableau" (une zone de mémoire), puis le "remettre" où vous voulez sur l'écran. C'est la meilleure méthode pour simuler le mouvement.
Un qui ? Un quoi? Les tableaux sont couverts dans la section Passer aux affaires, plus loin.
Nous utilisons le terme "rectangle" pour désigner la zone qui contient l'affichage graphique_ ou le parcours, vous ne pouvez pas réellement voir le rectangle. Il va falloir le visualiser.
Les formats pour GET et PUT sont :
GET (x1,y1)-(x2,y2),tableau
x1,y1 est le coin supérieur gauche du rectangle.
x2,y2 est le coin inférieur droit du rectangle.
tableau est une zone en mémoire qui stocke le rectangle.
PUT(x,y),tableau,[,action]
x,y est le coin supérieur gauche du rectangle.
action peut être PSET, PRESET, AND, OR, XOR.
Le verbe d'action est utilisé
pour interagir avec l'image transférée avec l'image déjà à l'écran. PSET
transfère les données sur l'écran textuellement.
PRESET est identique à
PSET sauf qu'une image inversée (noir sur blanc) est produite.
AND
transfère l'image uniquement si une image existe déjà sous l'image transférée.
OR superpose que l'image existe.
XOR est un mode spécial souvent
utilisé pour l'animation. XOR provoque l'inversion des points sur l'écran là où
un point existe dans l'image du tableau. Ce comportement est exactement comme le
curseur à l'écran. XOR est particulièrement utile pour l'animation. Lorsqu'une
image est placée deux fois sur un arrière-plan complexe, l'arrière-plan est
restauré tel quel. Un objet peut être déplacé sur l'écran sans effacer
l'arrière-plan. Le mode d'action par défaut est XOR.
Pour plus
d'informations sur les effets dans les différents modes, consultez les
instructions
SCREEN, COLOR, PALETTE.
L'animation d'un objet est
généralement effectuée comme suit :
Placez le ou les objets sur l'écran.
Recalculez la nouvelle position du ou des objets.
Placez le(s) objet(s) sur
l'écran une deuxième fois à l'ancien(s) emplacement(s) pour supprimer l'ancienne
image(s).
Retournez à l'étape 1, cette fois en plaçant le ou les objets au
nouvel emplacement.
Le mouvement effectué de cette
manière laisse l'arrière-plan inchangé. Le scintillement peut être réduit en
minimisant le temps entre les étapes 4 et 1, et en s'assurant qu'il y a
suffisamment de temps entre les étapes 1 et 3. Si plus d'un objet est animé,
traitez chaque objet à la fois, une étape à la fois.
S'il n'est pas
important de préserver l'arrière-plan, l'animation peut être réalisée à l'aide
du verbe d'action PSET.
Laissez une bordure autour de l'image
(lorsqu'elle est obtenue pour la première fois) aussi grande ou plus grande que
la distance maximale sur laquelle l'objet se déplacera.
Ainsi, lorsqu'un objet est déplacé, cette bordure efface effectivement tous les points. Cette méthode peut être un peu plus rapide que la méthode utilisant XOR décrite ci-dessus puisqu'un seul PUT est nécessaire pour déplacer un objet. Cependant, l'image à PUT doit être plus grande que l'image existante.
Tapez et exécutez ce programme pour voir comment fonctionnent GET et PUT :
10 SCREEN 7
15 CLS
25 DIM
V(20,20)
30 CLS:CIRCLE (20,20),10
32 FOR DLAY = 1 TO 600: NEXT DLAY
35
GET (10,10)-(30,30),V
40 CLS
42 FOR DLAY = 1 TO 600: NEXT DLAY
45 PUT
(110,110),V
50 FOR DLAY = 1 TO 600: NEXT DLAY
60 GOTO 30
Le programme dessine un cercle sur une partie de l'écran puis le déplace vers une autre. Pour ce faire, l'ordinateur :
1. Crée un tableau nommé V en
mémoire (Ligne 25). Le tableau V est assez grand pour stocker un rectangle de 20
X 20.
2. Dessine un cercle sur l'écran (ligne 30).
3. Obtient un rectangle
20 X 20 contenant le cercle et le stocke dans le tableau V (ligne 35).
4.
Efface l'écran (Ligne 40),
5. Affiche le rectangle 20 X 20 (stocké dans le
tableau V) à l'écran.
Stockage du rectangle
Comme vous pouvez le voir dans
le programme ci-dessus, GET et PUT utilisent un tableau pour stocker le
rectangle. Donc, avant d'utiliser GET ou PUT, vous devez créer ce tableau.
L'instruction DIM vous permet de faire.
Pour spécifier les valeurs maximales des indices de variable de tableau et allouer le stockage en conséquence.
Syntaxe:
DIM variable(subscripts)[,variable(subscripts)]...
EX. DIM A(12) une dimension, B(5,6) deux diamantions, C(3,8,5) trois démentions ...etc.
Commentaires:
Si un nom de variable de tableau est utilisé sans instruction DIM, la valeur
maximale de son ou ses indices est supposée être 10. Si un indice supérieur au
maximum spécifié est utilisé, une erreur "Subscript out of range " se produit.
Le nombre maximal de dimensions pour un tableau est de 255.
La valeur
minimale d'un indice est toujours 0, sauf indication contraire avec
l'instruction OPTION BASE.
Un tableau, une fois dimensionné, ne peut pas
être redimensionné dans le programme sans d'abord exécuter une instruction CLEAR
ou ERASE.
L'instruction DIM définit tous les éléments des tableaux
spécifiés sur une valeur initiale de zéro et doit être mis avant l'utilisation
du tableau.
OPTION BASE
Pour déclarer la valeur minimale des indices de tableau.
Syntaxe:
OPTION BASE n
Commentaires:
n est 1 ou 0. La base par défaut est 0.
Si l'instruction OPTION BASE 1
est exécutée, la valeur la plus basse qu'un indice de tableau peut avoir est 1.
Un indice de tableau ne peut jamais avoir une valeur négative.
OPTION
BASE génère une erreur uniquement si vous modifiez la valeur de base. Cela
permet aux programmes chainés d'avoir des instructions OPTION BASE tant que la
valeur n'est pas modifiée par rapport au paramètre initial.
Note
Vous devez coder l'instruction OPTION BASE avant de pouvoir définir ou
utiliser des tableaux. Si une tentative est faite pour modifier la valeur de
base de l'option après l'utilisation d'un tableau, une erreur se produit.
Les erreurs
n n'est pas un chiffre 0 ou 1 : Syntax error.
L'OPTION BASE 1 est appelée mais un tableau a déjà été alloué auparavant : Duplicate definition.
OPTION BASE est appelée plus d'une fois avec un index de départ différent : Duplicate definition.
Quelle doit être la taille du tableau ?
Cela dépend de la taille d'un rectangle que vous voulez "obtenir" ou "mettre":
Largeur = y1 - x1
longueur = y2 - x2
Par exemple, l'instruction GET du programme ci-dessus utilise (10,10) et (30,30) pour spécifier un rectangle. Ainsi, le rectangle est de 20 X 20 : Il a une largeur et une longueur de 20. L'instruction PUT utilise le même rectangle de taille : 20 X 20.
La taille d'un rectangle que vous pouvez stocker dans un tableau dépend de la quantité de mémoire dont vous disposez.
Chaque point, lorsqu'il est stocké dans un tableau, consomme 5 octets
de mémoire. Dans un système de 16K RAM, vous ne pouvez pas stocker plus de 1400
points dans un tableau. Si votre programme est long, vous devrez peut-être le
réduire.
Ne mettez pas ce que vous voyez
Vous avez maintenant mis un rectangle sur l'écran dans un sens avec l'action PSET. (Lorsque vous ne spécifiez pas d'autre action, l'ordinateur utilise PSET).
Il y a plus d'une façon, cependant, de mettre des rectangles sur l'écran.
Pour voir comment fonctionnent les autres actions. commencez par exécuter ce programme. Il met 15 rectangles sur l'écran avec l'action P5ET.
10 DIM V (30,30)
20 SCREEN 7
25 CLS
30
CIRCLE (128 ,86),30,4
35 PAINT (128,85),2,4
40 PAINT (128,97),3,4
45
GET(98,81)-(128,100),V
50 CLS
55 FOR I = 150 TO 1 STEP -10
60 PUT
(I,81-I/5),V,PSET
65 NEXT I
70 GOTO 70
PSET définit et réinitialise
chaque point tel qu'il se trouve dans le rectangle du tableau. Chaque rectangle
qu'il place à l'écran est le même que celui stocké dans le tableau.
Modifiez maintenant la ligne 60 de différentes manières pour essayer d'autres
actions. Essayez d'abord PRESET.
60 PUT (I,81-I/5),V,PRESET
PRESET définit et réinitialise
l'inverse de chaque point dans le rectangle du tableau. Chaque rectangle qu'il
place à l'écran est l'inverse de celui stocké dans le tableau.
Essayez
l'action OR :
60 PUT (I,81-I/5),V,OR
OR définit chaque point qui est soit
(1) défini dans le rectangle arrière ou
(2) déjà défini dans la position où il tire le rectangle d'écran.
Chaque rectangle qu'il place
sur l'écran a tous les points définis qui sont stockés dans le tableau plus ce
qui est actuellement à l'écran.
Pour un effet étrange, essayez l'action
XOR.
60 PUT (I,81-I/5),V,XOR
XOR est un mode spécial souvent
utilisé pour l'animation. XOR provoque l'inversion des points sur l'écran là où
un point existe dans l'image du tableau. Ce comportement est exactement comme le
curseur à l'écran. XOR est particulièrement utile pour l'animation. Lorsqu'une
image est placée deux fois sur un arrière-plan complexe, l'arrière-plan est
restauré tel quel. Un objet peut être déplacé sur l'écran sans effacer
l'arrière-plan. Le mode d'action par défaut est XOR.
Essayez l'option AND
avec ce programme, et vous ne verrez rien :
60 PUT (I,81-I/5),V,AND
AND définit chaque point qui
(1) est défini dans le tableau et
(2) est déjà défini sur l'écran à la position où il place le rectangle.
Tous les points qui ne remplissent pas ces deux conditions sont réinitialisés. Dans ce cas, chaque rectangle AND mis à l'écran a tous les points réinitialisés - vous ne voyez rien.
Programme faites-le vous même
Utilisez GET et PUT pour envoyer un vaisseau spatial sur l'écran et à travers ses "limites extérieures". Vous voudrez peut-être ajouter un quelques astéroïdes et extraterrestres pour rendre le voyage plus excitant !
15 SCREEN 7
20 CLS
25 DIM
V(35,35)
30 X=10: Y=10
35 DRAW
"BM10,10;S2;H10;R15;F10;R20;F10;G10;L20;G10;L15;E10;U20;D4;NL8;D4;NL12;D4NL16;D4;NL12D4;NL8;"
40 GET (X-X,Y-Y)-(X*3.5,Y*3.5),V
45 A$=INKEY$: IF A$="" THEN 45 'APPUYEZ SUR
N'IMPORTE QUELLE TOUCHE POUR COMMENCER
50 CLS
55 FOR A = 10 TO 200 STEP 5
60 PUT (X+A,Y),V,PSET
65 NEXT A
70 CLS
75 GOTO 55