|
|
Chapitre 18 — Caractères définis par l'Utilisateur
BBC BASIC
vous permet de fabriquer vos propres caractères graphiques, et cette partie vous montrera comment.
On présuppose que vous vous y connaissez un peu en nombres binaires. Si ce n'est pas le cas,
vous pouvez vous rendre à l'Appendice C pour de la lecture à ce sujet. Revenez ici quand
vous vous sentirez à l'aise en base 2.
Chaque caractère est représenté par une grille de
8 bits sur 8.
Voici comment nous représenterions la lettre « A ».
Ceci dépend bien évidemment de la police de caractères que vous avez choisie, mais je suis certain
que cela vous donne l'idée de base. En traitant chaque colonne comme un bit (un « binary
digit ») dans un octet de 8 bits (un « byte »),
nous obtenons la représentation suivante en ajoutant les valeurs qui sont à 1 (en gris) dans
chaque colonne. La rangée du haut (rangée 0, ou ligne 0), vaut 32+16+8+4 = 60.
En redéfinissant ces nombres, nous pouvons modifier les bits qui sont à
1 (en gris) et sur quelles
lignes, et par conséquent, nous pouvons dessiner nos propres caractères. Nous pourrions construire notre
extraterrestre à nous comme ceci :
BBC BASIC
nous permet de redéfinir les caractères dans l'intervalle 32 à 255. Ordinairement, il est
préférable de s'en tenir à ceux qui n'interfèrent pas avec les caractères ordinaires, de code inférieur
à 128, et la plupart des programmes commencent aux environs de 200. Pour redéfinir un caractère,
nous utilisons une commande
VDU.
Il y a des dizaines de ces commandes : jetez un coup d'œil dans
l'Aide en ligne
pour vous rendre compte de ce qu'elles peuvent faire pour vous. Celle qui nous intéresse ici porte
le numéro 23. Elle nous permet de redéfinir un caractère (entre autres choses).
Voici comment on s'y prend :
VDU 23,NumCaract,TtalLigne0, ... ,TtalLigne7
En appliquant ceci à notre extraterrestre, voici ce que nous obtenons :
VDU 23,240,153,189,219,126,36,60,36,36
Essayons-le dans un programme :
REM Création d'un extraterrestre
MODE 6
PRINT "Avant définition ";CHR$(240)
VDU 23,240,153,189,219,126,36,60,36,36
PRINT "Après définition ";CHR$(240)
END
Dans le mode par défaut, le nouveau caractère est affiché en tout petit, aussi j'ai utilisé le
MODE
MODE 6, ce qui rend les caractères plus grands, et ainsi nous les voyons mieux.
Il est évident qu'on peut appliquer diverses couleurs à notre extraterrestre, puisqu'il n'est considéré
par le
BASIC
que comme rien de plus qu'un autre caractère. Maintenant que nous avons obtenu notre personnage,
nous pouvons créer une séquence d'animation simple. En affichant le caractère, en l'effaçant (en le
remplaçant par l'espace), puis en le réaffichant dans une position différente, nous pouvons faire marcher
notre extraterrestre en travers de l'écran.
REM Déplacement d'un extraterrestre
MODE 6
VDU 23,240,153,189,219,126,36,60,36,36
PRINT TAB(0,10);CHR$(240)
FOR I%=1 TO 19
PRINT TAB(I%-1,10);" "
PRINT TAB(I%,10);CHR$(240)
WAIT 25
NEXT I%
END
L'instruction
WAIT
est un petit temps d'attente, que vous ajustez à votre goût pour empêcher l'animation tout entière
d'être rendue en super accéléré.
Les caractères définis par l'utilisateur ont une utilisation sans limites, et pas seulement dans
les jeux, mais aussi pour de très nombreux programmes généraux dans lesquels vous voulez obtenir un
caractère non disponible dans la série de caractères livrés en standard.
Il peut arriver que le curseur distraie l'utilisateur,
aussi est-ce une bonne chose de pouvoir
l'éteindre et l'allumer à volonté. En inspectant dans
l'Aide en ligne
les fonctionnalités de VDU 23, on voit que cela peut être fait si nous l'appelons ainsi :
VDU 23,1,0;0;0;0; : REM Désactiver le curseur
VDU 23,1,1;0;0;0; : REM Activer le curseur
Cependant, parce que c'est un besoin si courant,
BBC BASIC
nous permet d'utiliser
OFF
pour éteindre le curseur et
ON
pour le rallumer.
Nous pouvons appliquer ceci à notre programme de marche de l'extraterrestre.
REM Déplacement d'un extraterrestre
MODE 6
OFF
VDU 23,240,153,189,219,126,36,60,36,36
PRINT TAB(0,10);CHR$(240)
FOR I%=1 TO 19
PRINT TAB(I%-1,10);" "
PRINT TAB(I%,10);CHR$(240)
WAIT 25
NEXT I%
ON
END
Est-ce que cela n'était pas meilleur ? Comme pour les couleurs de texte, il est habituellement
considéré de bon ton de restaurer le curseur avant de quitter le programme.
Un truc : À Caractères définis les plus grands possibles
|
La dimension 8 * 8 n'est pas suffisante pour vous ? Rien ne peut vous empêcher de
définir plusieurs caractères, chacun contenant un segment de l'image globale, et puis de construire
une chaîne contenant la grande image, comme ceci :
REM Personnages composites
MODE 6
OFF
VDU 23,240,58,69,130,137,149,73,34,28
VDU 23,241,92,162,65,145,169,146,68,56
Papillon$=CHR$(240)+CHR$(241)
REM Afficher 20 papillons positions diverses
FOR I%= 1 TO 20
PRINT TAB(RND(30+5),RND(15+5));Papillon$
WAIT 25
NEXT I%
ON
END
|
Exercices
18.1
Faites retourner l'extraterrestre à l'autre bout de l'écran, jusqu'au bord gauche, dès qu'il a
atteint le bord droit.
18.2
Créez un autre extraterrestre avec les bras dirigés vers le bas, en vous servant du caractère 241.
Modifiez l'animation contenue dans 18.1 pour faire alterner les extraterrestres au cours du
déplacement en travers de l'écran.
• I% MOD 2 vous indiquera si I% est un nombre pair ou impair.
Fin du Chapitre 18
|