Narrow Escape

Que celui ou celle qui n'a jamais connu le moindre ennui lors d'un cours me jette la première pierre. Dans ces moments, on s'adonne à une pléthore d'activités aussi productives que ludiques. Fort heureusement, l'Education Nationale a mis entre nos mains un outil pour résoudre ce problème : La calculatrice.


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 :

Narrow Escape.3GP 3,06 MB 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.

Laissez un commentaire

2 Commentaires

  • Chouette article, merci MrSquid. smile

    J'ai fait un petit peu de programmation sur calculatrice aussi, mais chez le concurrent, sur une calculatrice Casio. Ce que tu as expliqué sur le manque de puissance de la Texas Instrument m'a un peu étonné au début, car les jeux graphiques les plus fluides que j'ai vu sur calculatrice étaient sur Texas Instrument. J'avais même essayé de porter un Arkanoid Ti sur Casio, et le résultat avait été désastreux du point de vue des performances.

    Après, je ne me rappelle plus des modèles concernés, mais ce ne devait pas être la Ti-82 stats.fr.

    Ton article m'a donné envie de publier mon "Drug Wars", mon jeu phare qui m'a occupé des heures et qui a bouffé des jeux de piles entiers tellement il était populaire auprès de mes camarades wink

    • Effectivement mais ils sont écrits en langage assembleur (ASM Z80 pour cette calculatrice).

      Site du Zéro a écrit :

      Pour le comparer au TI-Basic, il est plus rapide, permet d'utiliser pas mal de fonctions système mais nécessite un PC pour son édition (ce qui ne vous rebute pas, j'espère ) ; il est en outre d'une complexité assez importante (face au TI-Basic bien sûr !).
      En fait, lorsque la calculatrice lance un programme Basic, elle doit à chaque instruction se référer à une table qui lui explique comment la réaliser dans son propre langage. En effet, le TI-Basic est un langage interprété, ce qui implique une relative lenteur.
      Avec l'ASM, rien de tout cela ! La calculatrice peut directement exécuter les instructions du programme puisqu'elle n'a pas à les traduire ! Il en résulte bien évidemment une rapidité importante et constante. Les programmeurs Basic ont en effet peut-être pu constater une « baisse de régime » au cours de l'exécution du programme.
      De plus, bon nombre de fonctions sont accessibles à l'ASM et pas au Basic, et vice-versa.

      Mais je n'ai pas eu la motivation d'étudier ce langage et de plus je programmais sur calculatrice seulement pendant certains cours, très rarement chez moi et l'assembleur nécessite un ordinateur.

    • Je vois ce que tu veux dire. Cependant, s'il y avait effectivement des jeux en assembleurs (type course de voiture ultra-fluide), il y avait également des jeux en Ti-Basic, comme l'Arkanoid que j'ai pu porter sur Casio, ce que je n'aurais pas pu faire s'il avait été écrit en assembleur.

      Je suppose que c'était juste une différence de modèle de calculatrice.

  • Bon, tu as lancé la première pierre, tu m'as donné envie de publier mes versions de portal, de hordes, de mario et autres que j'ai codé sur ma calculette casio. DoubleAccentCirconflexe

Laissez un commentaire

Vous devez être connecté pour commenter sur le Refuge. Identifiez-vous maintenant ou inscrivez-vous !


Marre des pubs ? Inscrivez-vous !

Fiche technique

Type :

Année de publication :

Genre :

Développement :

Nombre de joueurs :