Portage du jeu Blitz pour le PHC-25
Pour me familiariser avec le PHC-25 et son basic, je vais porter le jeu Blitz qui figurait dans le livre «MO5 jeux d’action» de 1984. Voici quelques extraits qui me paraissent intéressants pour découvrir le jeu et la machine.
Tout d’abord un screenshot de la version MO5 :
Puis le portage en mode texte pour le PHC-25 :
Construction de la ville
Contrairement au MO5, le PHC-25 n’offre pas la possibilité de définir ses
propres caractères. Dommage car c’est une fonctionnalité formidable pour créer
des jeux en mode texte. Par contre le PHC-25 possède une quinzaine de caractères
semi-graphiques, ce qui va m’éviter de construire la ville avec des #
.
Ligne 20 : c’est la façon d’initialiser le générateur de nombres pseudo-alétoires. Il faut passer un nombre négatif. Si on ne fait pas ça, il y aura toujours les mêmes nombres à chaque démarrage de l’ordi.
Ligne 50 : c’est le tirage au sort d’un caractère semi-graphique pour une
colonne de la ville. c
vaudra 19, 20 ou 21, ce qui correspond au code des
caractères qui m’intéressent (et qu’on trouve dans le manuel).
Ligne 60 : chaque colonne de la ville aura une longueur différente. L’affichage commence par la ligne écran n° 15 (celle du bas, l’écran texte faisant 32x16 caractères). Comme l’affichage est lent en basic, commencer par le bas permet de voir la ville «surgir» de terre :D
Ligne 70 : impossible d’écrire un caractère semi-graphique avec un PRINT
, il
faut passer par une écriture en mémoire vidéo avec POKE
. 24576 est l’adresse
en RAM du caractère en haut à gauche. Adresse à laquelle on ajoute x+y*32
caractères
pour se positionner à l’endroit voulu (un caractère == un octet).
20 i=rnd(-1)
30 cls
40 for x=8 to 23
50 c=int(rnd(1)*3)+19
60 for y=15 to int(rnd(1)*6)+9 step -1
70 poke 24576+x+y*32,c
80 next y
90 next x
La bombe
Cette routine efface la bombe de son ancienne position et l’affiche à sa nouvelle position. Elle fait aussi entendre un effet sonore quand la bombe arrive au sol.
Ligne 3020 : on positionne le curseur. bx
contient la coordonnée x de la bombe et
b1
contient son ancienne coordonnée y (la fameuse limitation des 2 caractères).
On efface en affichant un espace.
Ligne 3050 : on affiche le caractère semi-graphique 133 (un cercle plein) à l’aide de la même formule que dans l’affichage de la ville.
Ligne 3060 : Quand la bombe atteint le bas de l’écran, je fais entendre un bruit
blanc (qui rappelle vaguement une explosion). sound 6,30
indique la fréquence du bruit.
sound 7,28
pour dire que le bruit est sur la 3ème voix. Et sound 10,10
pour ouvrir le volume de la 3ème voix à 10 (sur un
maximum de 15). La commande sound
est tout sauf intuitive, mais elle fait le boulot.
Ligne 3070 : coupe le volume du bruit blanc.
3000 rem --- display bomb
3010 if by>15 then by=0
3020 locate bx,b1:print " ";
3040 b1=by
3050 if by<>0 then poke 24576+bx+by*32,133:by=by+1
3060 if by=15 then sound 6,30:sound 7,28:sound 10,10
3070 if by=0 then sound 10,0
3080 return
Le score
La formule utilisée pour calculer le score (s
) est exactement la même que celle pour
l’affichage de la bombe ou d’un caractère de la ville. Ce qui donne 1 point pour
chaque «caractère parcouru» par l’avion.
280 s=s+32*hy+hx
L’avion
Aucun caractère semi-graphique ne convient pour représenter l’avion. Je suis
obligé de me contenter de >=, alterné avec >- pour donner une vague
impression de mouvement. Ce qui est notable, c’est que l’utilisation d’un
espace au début de la chaîne (" >="
) permet d’effacer l’ancienne position et
d’afficher la nouvelle en un seul PRINT
.
1010 dim a$(1)
1020 a$(0) = " >="
1030 a$(1) = " >-"
Commentaires
Pas encore trouvé de solution simple et non-invasive pour avoir des commentaires sur le blog. En attendant vous pouvez laisser votre Commentaire sur mastodon@lkdjiin