Persephone, la chenille dechainee * Fabrice Lemainque
Publie dans Microstrad 6 - Juillet/Aout 1986
------------------------------------------------------------------------------------
Persephone
Le theme de la chenille boulimique a rallonges est un classique des jeux
d'arcade. C'est aussi une cible priviligiee du maniaque de l'optimisation.
Persephone est un jeu qui n'appelle pas de regles. Il se comprend tout seul.
Comme le flipper ! Quant au programme qui cree ce jeu, il est plein d'astuces.
Sur les CPC, une variable numerique est codee sur cinq octets. Sauf si elle est
entiere, auquel cas deux octets lui suffisent. Le gain de temps sur les calculs
est alors important. Il convient donc de declarer entieres toutes les variables
qui peuvent l'etre. C'est l'objet du DEFINT A-Z en ligne 50.
Un tableau de dimension egale au terrain de jeu (PO((39,25)) contient les
differentes valeurs possibles :
PO(X,Y)=0 : la place est libre en X,Y;
PO(X,Y)=1 : un obstacle en X,Y (bord, chenille, champignon) empeche de passer;
PO(X,Y)=2 : une pomme attend d'etre mangee.
Les rencontres sont gerees par la ligne 190 :
ON PO(X,Y) GOTO sous-programme concerne.
Le joystick, teste avec la fonction JOY(0), donne des valeurs qui s'echelonnent
de 0 a 8 pour les quatres directions admises. La seule instruction ON JOY(0)+1,
suivi de neuf numeros de lignes, traite les deplacements de la fougueuse
bestiole, evitant ainsi une lourde serie de IF... GOTO...
Pour allonger la chenille, on utilise deux chaines de caracteres de la meme
longueur qu'elle :
CX$="X1,X2,X3,...Xn"
CY$="Y1,Y2,Y3,...Yn"
avec:
X1/Y1=CHR$(position horizontale/verticale de l'anneau1)
Aussi, pour les mouvements, il suffira d'ecrire:
CX$=CHR$(nouvelle position horizontale de la tete)+left$(cx$,n-1))
En cas d'allongement, il suffira d'incrementer la longueur.
La position d'un anneau sera obtenue a tout momemt par traitement des deux
chaines en question (ligne 150).
Au prix de ces petites astuces, la vitesse atteinte par le Basic du CPC est tout
a fait honnete. A tel point qu'une boucle de temporisation (ligne 70) est
necessaire pour ralentir la vitesse de la chenille affamee.
------------------------------------------------------------------------------------
NOTICE TEXTE n° 2 (2.09 Ko)
Persephone, the caterpillar unleashed * Fabrice Lemainque
Published in Microstrad 6 - July / August 1986
----------------------------------------------------------------------------------
Persephone
The theme of the caterpillar bulimic extension is a classic game
arcade. It is also a privileged target of manic optimization.
Persephone is a game that requires no rules. It includes all alone.
As pinball! About the program that created this game, it is full of tricks.
The CPC, a variable is encoded digital five bytes. Unless it is
entire, in which case two bytes enough for him. Saving time on calculations
is so important. It is therefore necessary to declare all variables WHOLE
that can be. It is the purpose of DEFINT A-Z line 50.
An array of dimension equal to the playground (PO(39.25)) contains the
different possible values:
PO(X,Y)=0: the space is free in the X,Y;
PO(X,Y)=1: a barrier in X,Y (edge, caterpillar, fungus) prevents cross;
PO(X,Y)=2: an apple waiting to be eaten.
The meetings are run by the line 190:
ON PO (X,Y) GOTO sub-program deals.
The joystick function tests with JOY(0), gives values ??which range
from 0 to 8 for the four directions allowed. The only instruction ON JOY(0)+1,
followed by nine numbers of lines, handles displacements of the fiery
creature, thus avoiding a heavy series of IF... GOTO...
To extend the track, using two character strings of the same length it:
CX$="X1,X2,X3,...Xn"
CY$="Y1,Y2,Y3,...Yn"
with:
X1/Y1=CHR$(horizontal / vertical anneau1)
Also, for the movements, it is sufficient to write:
CX$=CHR$(new horizontal position of the head)+left$($cx,n-1))
In case of extension, it suffices to increment length.
The position of a ring is obtained by treating all momemt two
channels in question (line 150).
Price of these tricks, the speed reached by the CPC Basic is
was honest. A point that a timing loop (line 70) is
necessary to slow the speed of the caterpillar hungry.
---------------------------------------------------------------------------------