C'est donc dans ce cadre qu'est né le jeu que je vous présente : Narrow Espace. Développé en Ti-Basic et conçu plus particulièrement pour ma Ti-82 Stats.fr, ce jeu nous place aux commandes d'un vaisseau spatial devant éviter les tirs de deux ennemis se mouvant aléatoirement en bas de l'écran, en se déplaçant horizontalement. Ce dernier progresse vers le bas automatiquement en fonction du nombre de tirs esquivés, rendant la tâche d'autant plus complexe du fait de la distance toujours plus petite entre les ennemis et nous. Le but est alors de descendre le plus bas possible sans se faire toucher, sous peine de ré-apparaitre en haut de l'écran.
Équipée d'un processeur cadencé à 6 MHz et de 32 Ko de RAM, la Ti-82 Stats.fr ne permet généralement pas de faire des jeux intéressants (sinon en langage assembleur, ce qui devient autrement plus difficile...). Ainsi, l'exploit réside dans le fait de parvenir à concilier une étonnante attraction et une fluidité correcte. Pour cela j'ai du faire plusieurs des choix et user de quelques astuces...
1) L'ASCII plutôt que l'affichage graphique
L'affichage graphique nous assure 94x62 pixels utilisables, ce qui permet, sur notre écran d'environ 2,6 pouces de faire des choses plutôt sympatiques. Seulement, le moindre jeu exploitant ce type d'affichage écrit en Ti-Basic est bien trop lent pour présenter un quelconque intérêt. Il a donc fallu se rabattre sur un jeu dessiné en ASCII art, réduisant l'affichage à 8 lignes de 16 caractères.
NB : Il peut être important de savoir, pour ceux qui examineront le code, que l'origine du repère pour les coordonnées se trouve en haut à gauche de l'écran et que l'on indique d'abord le numéro de la ligne – soit l'ordonnée – avant l'abscisse, pour placer des caractères à l'écran.
2) Des glitchs et autres bugs contrôlés
N'étant qu'un humain, mon code contient des erreurs et n'est probablement pas parfaitement écrit. J'en ai corrigé certaines mais j'ai dû en laisser d'autres pour ne pas trop ralentir le jeu (au point où j'en suis, la moindre instruction en plus ou en moins influence la vitesse du jeu – qui est globalement définie par la vitesse de montée des tirs ennemis dans la mesure où notre vaisseau a la possibilité de se déplacer à chaque fois que le tir ennemi progresse d'une ligne). Dans certains cas, faute de pouvoir les supprimer, j'ai dû les contenir pour qu'ils ne gâchent pas le jeu.
Je peux citer par exemple un glitch qu'un testeur de ma classe m'a mis en évidence et qui permettait d'éviter systématiquement tous les tirs. Explication ci-dessous pour ceux que ça intéresse :
Spoiler (Sélectionnez le texte dans le cadre pointillé pour le faire apparaître)
Il ne faut pas oublier qu'avec des jeux graphiques réalisés en ASCII, chaque affichage est considéré comme du texte par la calculatrice. Cela étant, si je lui demande d'afficher mon vaisseau modélisé par ]-[ aux coordonnées (1;6) alors l'objet sera affiché à partir du sixième caractère de la première ligne et s'étendra sur les caractères 7 et 8. Or, comme tout texte, si le vaisseau est généré à partir du 15ème caractère (l'afficher au 16ème étant impossible, malgré le fait que deux caractères soient affichés en le plaçant au 15ème, ne me demandez pas pourquoi) soit à une case de la fin de la ligne, il s'étendra sur le premier caractère de la ligne suivante et sera donc coupé en deux et décalé d'une ligne.
Le fait est que j'avais initialement codé le jeu pour que les ennemis se déplacent entre les abscisses 2 et 14 pour resserrer un peu les possibilités, considérant que le vaisseau sera forcément compris dans l'intervalle puisqu'il faut trois cases pour l'afficher. Mais en se plaçant comme expliqué plus haut, tous les tirs étaient évités.Ne voulant pas coder des limites de déplacements par peur d'un ralentissement trop important j'ai donc élargi le déplacement des ennemis. D'où le terme de glitch contrôlé.
3) Un jeu qui n'a pas de fin
Je ne parle pas ici d'un jeu qui est conçu pour tourner en boucle jusqu'à ce que le joueur quitte le jeu, mais je veux plutôt dire qu'il n'a littéralement pas de fin. Rien n'est prévu dans le code du jeu dans le cas où le joueur arriverait en bas de l'écran, sinon le crash puisque la calculatrice aurait pour mission d'afficher le vaisseau sur la 9ème ligne de l'écran qui n'en contient que 8.
Pour ne pas que ça se voit, j'ai simplement rendu quasiment impossible la victoire. En effet, le vaisseau descend d'une ligne si le nombre de tirs esquivés est supérieur ou égal à l'exponentielle en base 3 de la composante verticale du vaisseau moins 20 % de cette exponentielle. Le tout est donné par la relation suivante : Q>=0,8*3^X (la relation est ainsi pour des raisons pratiques. Trouvée par tâtonnements, elle me donnait à peu près les paliers que je souhaitais). De cette façon, le vaisseau descend d'une ligne à partir de :
- 3 tirs esquivés
- 8 tirs esquivés
- 22 tirs esquivés
- 65 tirs esquivés
- 195 tirs esquivés
Je n'ai jamais atteint les 65. C'est d'ailleurs en partie la frustration de ne jamais descendre assez bas qui motive à jouer.
Et pour l'essayer ?
Pour ceux qui voudraient l'essayer il existe plusieurs possibilités.
Si vous disposez d'une calculatrice comme la Ti-82 ou bien les modèles supérieurs, tant que l'affichage des menus est toujours textuel en somme, et non graphique comme sur les plus hauts modèles telle la Ti-89 Titanium (sur laquelle le langage de programmation n'est pas tout à fait le même) ; le plus simple est encore d'y rentrer le code à la main (qui n'est pas très long. Jouable en 10 – 15 minutes si on sait où chercher les instructions). Cela dit , Narrow Escape a été conçu pour la Ti-82 stats.fr, un processeur différent entrainerait une vitesse de jeu très différente. Je l'ai testé sur une 84+ me semble-t-il et ça devenait plutôt impossible si on ne ralentissait pas artificiellement la vitesse.
Voici alors mon code :
Spoiler (Sélectionnez le texte dans le cadre pointillé pour le faire apparaître)
EffEcr
1→X
7→Y
0→Q
While 1
If Q≥0,8*3^X
Then
X+1→X
End
Output(X,Y,"]-["
C→D
While C=D
entAléat(3,15→C
entAléat(3,15→D
End
0→G
7→H
While G≠1 et H≥1
Output(8,C,"^"
Output(8,D,"^"
Output(H,C,"'"
Output(H,D,"'"
codeTouche→K
If K≠0
Then
Output(X,Y," "
End
If K=84
Then
Y+2→Y
Output(X,Y,"]-["
End
If K=82
Then
Y-2→Y
Output(X,Y,"]-["
End
If K=83
Then
Pause
End
If Y≤C et C≤Y+2 et H=X ou Y≤D et D≤Y+2 et H=X
Then
1→X
1→G
-1→Q
End
H-1→H
End
Q+1→Q
EffEcr
End
Sinon il existe toujours des émulateurs comme proposés sur
http://tionline.free.fr/emulation.htm
mais l'insertion du code sera toujours nécessaire.
Quoiqu'il en soit, vous avez tout de même un bon aperçu du jeu sur cette vidéo :
L'air de rien, ce mini-jeu est capable de vous occuper pendant 15 à 20 minutes ce qui n'est absolument pas négligeable sur un cours d'une ou deux heures auquel vous n'arrivez pas à vous intéresser. Il remplit donc parfaitement son objectif.
Sbirematqui il y a plus de 11 ans , modifié il y a plus de 11 ans