Nous parlions récemment de Leekwars et Untrusted, deux jeux de type coding (au gameplay centré sur le code informatique) aux orientations différentes : le premier amène le joueur à créer une intelligence artificielle, le second est un pur puzzle game. Le jeu qui nous intéresse aujourd’hui, Ruby Warrior, se place quelque part à mi-chemin entre les deux.
Le jeu vidéo, c’est quoi ?
La mouvance des coding games amène forcément à se poser cette question : finalement, qu’est-ce que le jeu vidéo ? Il y a bien sûr plusieurs réponses possibles, et il est bien compliqué de dégager une vérité absolue et suffisante. Néanmoins certains points sont significativement représentatifs : la mise en place d’éléments interactifs, régis par du code informatique, qui réagissent aux actions du joueur. Ce dernier doit alors s’adapter à ces réactions et utiliser les outils qui sont mis à sa disposition pour atteindre un objectif tout en évitant les obstacles placés sur sa route par le level design (voire en les exploitant). Bien sûr, cela diffère selon les genres, mais c’est en tout cas le schéma utilisé par Ruby Warrior. Ainsi, le jeu se découpe en différents tableaux, à la manière d’un puzzle game. Chaque niveau propose une disposition fixe : une position initiale du personnage incarné par le joueur, une sortie, des ennemis et éventuellement des prisonniers à libérer. Chaque élément est toujours placé au même endroit. Il ne reste donc qu’à effectuer les actions appropriées pour délivrer les captifs, tuer les monstres et atteindre l’escalier afin de passer au tableau suivant.
Se mettre au Ruby
Seulement voilà : Ruby Warrior étant un coding game, les outils mis à disposition du joueur n’ont rien de commun avec la dextérité et les réflexes. Au contraire, tout est basé sur la réflexion et, évidemment, le code. Il s’agit de coder le comportement du personnage principal afin qu’il s’adapte à l’ensemble d’un tableau. En effet, une fois le script lancé, on ne peut plus interagir avant que le personnage ait soit réussi, soit échoué. Il faut tout prévoir, et trouver le moyen de synthétiser ces prévisions dans un programme unique.
Le langage de programmation utilisé ici est le Ruby. Il est nécessaire de connaître les bases de sa syntaxe pour profiter du jeu, car ce dernier ne propose pas de tutorial à ce niveau (quelques minutes passées sur internet pallient cela sans problème), mais il n’y a pas besoin d’être un expert. Savoir coder un elsif, comprendre l’utilisation du « ! » et du « ? » sont les points essentiels. En fait, Ruby Warrior est un très bon moyen de s’initier au Ruby de façon ludique.
Un puzzle game tourné vers l’IA
Concrètement, à quoi cela ressemble-t-il ? D’un niveau à l’autre, au fur et à mesure de l’évolution du game design, le joueur gagne la possibilité d’utiliser de nouvelles fonctions. Une fonction pour marcher, une autre pour attaquer, une autre pour observer la case devant soi et déterminer si elle est occupée, et par quoi. Les choses sont simples au départ, mais se compliquent évidemment peu à peu. Des ennemis attaquant à distance font leur apparition, obligeant le joueur à se replier pour se reposer. Les niveaux, d’abord conçus sur une ligne (on peut soit avancer, soit reculer), se construisent plus tard sur un plan (on pourra alors aller à droite ou à gauche en plus des directions précédentes). S’ajoute aussi la possibilité d’observer les trois cases se trouvant devant soi, ou quelques astuces intéressantes de game design comme le fait qu’attaquer un ennemi devant soi est plus efficace qu’attaquer un ennemi se trouvant derrière soi (avec cela vient la fonction « pivoter », qui permet de se retourner). La complexité augmente donc petit à petit, pour devenir bien casse-tête dans les niveaux Intermediate. Charge au joueur d’agencer tout cela pour créer un programme capable de surmonter les différents niveaux du jeu.
Les multiples voies du code
Ruby Warrior a ceci de particulier que contrairement à un leekwars, où chaque combat est différent, ici les niveaux sont fixes. Les ennemis seront toujours placés au même endroit, les décors sont toujours les mêmes. Conséquence : il y a deux façons d’aborder le jeu, qui induisent chacune une difficulté et une expérience différente tout en s’inscrivant naturellement dans le game design. Puisque tout est fixé, il est possible et aisé (les niveaux étant petits) d’anticiper ce qui va se passer, et de coder un comportement sur des évènements connus a priori. Le code qui en résulte est alors relativement simple à mettre en place et permet de franchir le niveau, mais d’un point de vue strictement informatique il est « sale ». Les puristes tenteront alors probablement de mettre en place un code plus générique permettant de s’adapter réellement, y compris à des situations qui n’apparaissent pas sur le tableau en cours. En plus d’être une solution satisfaisante pour tout bon codeur, il y a également un intérêt induit par le game design : bien souvent, un code propre donnera un avantage pour le niveau suivant, puisqu’il permettra de continuer à s’en servir, alors qu’un code trop spécifique devra être repris et modifié plus en profondeur.
Ces deux approches mettent en valeur un aspect particulièrement plaisant des coding games : le fait qu’il n’y a généralement pas une unique solution possible pour la résolution d’un niveau. Les solutions sont plus ou moins propres, plus ou moins sobres, mais l’étendue des possibilités offre un intérêt supplémentaire et permet d’échanger avec d’autres joueurs-codeurs. Comment ont-ils géré tel niveau, telle situation ? Comment ont-ils effectué en quelques lignes ce qui nous en a pris une vingtaine ?
Conclusion
Ruby Warrior est une pépite de puzzle game, qui présente en plus l’intérêt d’être une sympathique porte d’entrée vers le langage informatique Ruby. Sa gestion de la difficulté, naturellement riche, offre une souplesse au joueur, qui y trouvera son compte quel que soit son but : atteindre la sortie à tout prix, ou l’atteindre avec la satisfaction d’avoir en plus fourni un code propre et performant. Enfin l’aspect méta inhérent au coding game, cet aspect qui met presque le joueur à la place du concepteur/programmeur du jeu (ou du moins le met en face des problèmes qui se posent à ces derniers) rend l’expérience encore plus passionnante pour qui s’intéresse au Jeu Vidéo. A essayer absolument.