Le jeu du Serpent, expliqué : histoire, stratégie, mathématiques du score et comment nous l'avons reconstruit pour le web moderne
Presque tous ceux qui lisent ces lignes ont joué au Serpent. Sur un téléphone Nokia en attendant le bus. Sur une calculatrice graphique pendant un cours qui avait cessé d'avoir un sens. Dans un onglet de navigateur censé être un tableur. C'est l'un des rares jeux vidéo à traverser véritablement les générations, et il le fait sans presque rien vous demander : quatre directions, une ligne qui grandit, un morceau de nourriture.
Cette apparente simplicité est un piège, et c'est la raison pour laquelle nous avons passé tant de temps à le reconstruire. Le Serpent ressemble à un projet de débutant. Il ne l'est pas. Un jeu du Serpent qui fait du bien — qui n'avale jamais une commande, qui ne vous tue jamais pour un virage exécuté correctement, qui ne saccade jamais, qui ne devient jamais plus facile ou plus difficile selon la fréquence de rafraîchissement de votre écran — est une pièce d'ingénierie réellement exigeante. La plupart des versions que l'on trouve en ligne ratent au moins deux de ces points.
Cet article est la version longue de tout ce que nous avons appris. Il couvre d'où vient le Serpent, ce que signifient réellement les règles, les mathématiques exactes derrière le score dans notre version, les tableaux de temps nécessaires pour bien jouer, les stratégies qui séparent un score de 200 d'un score de 2 000, l'informatique surprenante cachée à l'intérieur d'une grille de 21×21, et les décisions d'ingénierie qui font la différence entre un jouet et un outil. Si vous voulez seulement progresser au jeu, sautez à la section stratégie. Si vous voulez le comprendre, commencez par le début.
Code d'intégration du jeu du Serpent pour votre site :
Vous venez de parcourir toute l'architecture de ce jeu : la grille fixe de 21×21 qui garde les scores comparables sur toutes les tailles d'écran, les trois modes distincts (Murs, Portail et Labyrinthe avec cinq dispositions tournantes), les cinq vitesses, chacune avec sa propre courbe d'accélération et son plancher, le système de score avec son multiplicateur de combo qui récompense l'agressivité, les baies dorées qui expirent au bout de sept secondes, les moments de montée de niveau qui changent le jeu toutes les cinq baies, et les décisions d'ingénierie subtiles qui font que cette version paraît réactive plutôt que simplement fonctionnelle. Vous avez vu les tableaux de stratégie, les mathématiques du timing et l'explication honnête de la raison pour laquelle la règle de la queue qui se libère compte. Vient maintenant la partie pratique : mettre ce même moteur sur votre propre site, pour que vos visiteurs puissent jouer sans jamais quitter vos pages.
Vous pouvez copier le code ci-dessous et l'intégrer à votre site — dans des articles, des barres latérales, des pieds de page, ou partout où vous voulez que vos visiteurs vivent un moment de jeu concentré et stratégique. Le jeu s'exécute entièrement dans le navigateur, à l'intérieur d'un conteneur isolé qui ne peut ni lire ni toucher la page qui l'entoure. Aucune donnée de partie n'est transmise, stockée ni journalisée. Les calculs de la grille se font localement, les scores vivent dans le stockage du propre navigateur de votre visiteur, et les commandes clavier et tactiles fonctionnent sans le moindre aller-retour vers un serveur. Fermez l'onglet et toute la session s'évapore. Ce que jouent vos visiteurs reste avec eux, ce qui est exactement la façon dont une partie de Serpent a toujours fonctionné : ce n'est pas la grille qui compte, mais les décisions prises à l'intérieur de la personne qui la regarde.
Le code d'intégration est disponible en six langues d'interface pour correspondre à votre public : anglais - espagnol - français - arabe - chinois - hindi. Le réglage de langue contrôle les libellés, les boutons et les instructions de l'outil, et détermine aussi dans quelle langue apparaît l'interface du jeu. Le jeu lui-même est le même pour chaque visiteur dans le monde, mais la langue dans laquelle il s'affiche relève entièrement du choix de votre visiteur, détectée automatiquement depuis son navigateur à la première visite et mémorisée ensuite. Pour l'arabe, toute la mise en page bascule de droite à gauche, en miroir de l'interface, pour que l'expérience paraisse native.
Changez la langue de l'interface en modifiant le paramètre dans l'URL : ?lang=fr
Langues disponibles : en - es - fr - ar - zh - hi
1- Code iFrame isolé (idéal pour les articles et les pages) :
Si vous publiez un guide, une analyse de stratégie ou un article de fond sur la conception de jeux, la prise de décision sous pression ou les mathématiques du jeu optimal — exactement comme celui que vous lisez en ce moment — cette méthode dépose le jeu pleinement fonctionnel directement dans le fil de votre contenu. L'iframe isolé garde l'outil confiné, si bien que votre mise en page reste propre et que vos lecteurs peuvent jouer une manche sans recharger la page. Toutes les fonctions opèrent exactement comme décrit : les trois modes (Murs, Portail, Labyrinthe), les cinq vitesses (Calme, Classique, Vif, Frénétique et un palier supplémentaire), le système de score avec son multiplicateur de combo, les baies dorées, les moments de montée de niveau, et les commandes clavier et tactiles, le tout dans une petite pièce autonome sur votre site.
<iframe data-tooliqo src="https://tools.tooliqo.co/snake-game/?lang=fr"
title="Tooliqo — snake-game"
style="width:100%;border:0;height:720px" height="720" loading="lazy" scrolling="no"
allowfullscreen allow="fullscreen; clipboard-write"></iframe>
<script src="https://tools.tooliqo.co/embed.js" async></script>
2- Script flexible (adapté aux barres latérales et aux modèles) :
Pour les barres latérales, les pieds de page ou les zones de widgets, cette intégration plus légère charge le jeu à la demande et s'ajuste à son conteneur. C'est le même moteur, les mêmes trois modes, les mêmes cinq vitesses, la même prise en charge de six langues, le même système de score, les mêmes baies dorées, la même mécanique de montée de niveau ; simplement empaqueté pour les endroits où un iframe pourrait paraître lourd. Placez-le dans votre modèle, et le jeu apparaît où vous voulez, quand vous voulez. Vos visiteurs peuvent poursuivre des scores élevés, maîtriser le mode Labyrinthe ou simplement jouer une manche rapide sans jamais quitter votre site.
<div class="tooliqo-tool" data-tool="snake-game" data-lang="fr"
data-height="720"></div> <script src="https://tools.tooliqo.co/embed.js" async></script>
Remarque : Les deux méthodes chargent le même jeu, celui dont vous venez de lire les trois modes, les cinq vitesses, le score par combos, les baies dorées, les moments de montée de niveau et les six langues. L'outil respecte le mode sombre et les réglages de mouvement réduit sur les appareils de vos visiteurs. Aucun filigrane, aucune limite quotidienne, aucune collecte de données. Juste le jeu, faisant ce qu'il fait, sur votre site. Et si un visiteur joue une manche, perd contre sa propre queue, réessaie et finit par battre son record, l'outil aura fait ce pour quoi il a été bâti. Le reste dépend de lui, ce qui a toujours été le but.
Ce que couvre ce guide
- Les règles du Serpent, et pourquoi elles sont si bien conçues
- Une histoire complète : de Blockade en 1976 à slither.io et au-delà
- Dans les coulisses de notre jeu du Serpent : ce que nous avons construit et pourquoi
- La référence complète du score, avec toutes les formules et tous les tableaux
- Tableaux de vitesse, de timing et de conversion de la fenêtre de réaction
- Les trois modes : Murs, Portail et Labyrinthe
- Stratégie : comment progresser vraiment au Serpent
- Les mathématiques du Serpent, dont la raison pour laquelle notre plateau n'a pas de cycle parfait
- Sous le capot : comment construire un jeu du Serpent qui ne ment pas au joueur
- Langues, accessibilité et jeu sur n'importe quel écran
- Référence complète des commandes
- Foire aux questions
- Glossaire des termes du Serpent
Les règles du Serpent, et pourquoi elles sont si bien conçues
L'ensemble complet des règles du Serpent tient en quatre phrases. Vous contrôlez une ligne faite de cellules reliées. La tête avance d'une cellule à la fois et ne s'arrête jamais. Vous pouvez la diriger vers le haut, le bas, la gauche ou la droite, mais jamais directement en arrière, dans votre propre cou. Quand la tête atteint un morceau de nourriture, le serpent grandit d'une cellule et un nouveau morceau apparaît ailleurs ; quand la tête heurte un mur ou une partie quelconque de son propre corps, la partie est terminée.
Ce qui fait de cela une grande conception, et pas seulement une conception simple, c'est la boucle de rétroaction. Dans presque tout autre jeu d'arcade, progresser au jeu rend le jeu plus facile. Au Serpent, chaque réussite rend l'instant suivant plus difficile, parce que la récompense est l'obstacle. La pomme que vous avez mangée il y a trois minutes est désormais un mur à contourner. Rien d'autre, dans la conception des premiers jeux, n'a comprimé le risque et la récompense en un seul objet aussi proprement.
Il y a une deuxième pièce de conception, plus subtile, à l'œuvre. Comme le serpent ne s'arrête jamais, vous ne pouvez pas faire une pause pour réfléchir à l'intérieur du monde du jeu. Chaque seconde d'hésitation est une cellule de mouvement en avant que vous n'aviez pas planifiée. Le Serpent n'est donc pas un jeu de réflexes qui se fait passer pour un casse-tête ; c'est un jeu de casse-tête joué à un tempo fixe, ce qui est une chose bien plus rare et intéressante.
Enfin, le Serpent possède une courbe de compétence presque parfaite. Un débutant complet peut survivre trente secondes et manger trois pommes. Un joueur expérimenté peut remplir un tiers du plateau. Un joueur qui comprend la géométrie peut, en principe, remplir le plateau entier. La distance entre ces résultats est entièrement affaire de connaissance et de planification, pas de matériel, pas de chance, et pas d'argent.
Une histoire complète du Serpent : de Blockade au navigateur moderne
1976 : Blockade, l'ancêtre que personne n'appelait Serpent
Le genre commence en novembre 1976 avec une borne d'arcade appelée Blockade, développée chez Gremlin Industries à San Diego et conçue par Lane Hauck, avec le travail de programmation d'Ago Kiss. C'était en noir et blanc, c'était à deux joueurs, et le mot « serpent » n'y figurait nulle part. Chaque joueur dirigeait un marqueur à l'écran avec quatre boutons directionnels ; le marqueur laissait derrière lui une traînée pleine, et le perdant était celui qui percutait le premier un mur ou une traînée.
L'idée serait née de Hauck expérimentant en langage assembleur un concept simple : un objet en mouvement qui ne pourrait jamais revisiter un lieu où il était déjà passé. Gremlin l'a présenté au salon de la Music Operators of America à Chicago en 1976, où il a été extrêmement bien reçu — si bien que plusieurs autres fabricants avaient déjà leurs propres versions sur le marché avant que Gremlin ne puisse livrer en volume. Le premier grand jeu du Serpent a été cloné avant même sa sortie.
De 1977 à 1982 : la vague de clones et la naissance du Serpent solo
Atari a sorti Surround pour l'Atari 2600 en 1977 comme l'un des titres de lancement de la console ; Sears a vendu le même jeu sous le nom de Chase. Sur les ordinateurs domestiques, une version appelée Worm est apparue sur le TRS-80 en 1978, écrite par P. Trefonas et distribuée via le magazine CLOAD, suivie de versions pour Commodore PET et Apple II.
Le changement décisif est arrivé en décembre 1982, lorsque Rock-Ola a sorti Nibbler. C'est le moment où le genre devient le jeu que nous reconnaissons. Nibbler était solo, il comptait trente-deux labyrinthes distincts et, surtout, il avait de la nourriture : le serpent grandissait parce que vous le nourrissiez, non parce que le temps passait. Presque tous les jeux du Serpent depuis lors descendent de Nibbler plutôt que de Blockade.
Nibbler a aussi produit l'une des plus grandes histoires de l'arcade. Ce fut le premier jeu d'arcade doté d'un compteur de score à neuf chiffres, ce qui signifiait qu'un score d'un milliard était théoriquement possible, et Rock-Ola offrait une borne gratuite au premier joueur à le faire tourner. Tom Asaki s'en est approché à la salle d'arcade Twin Galaxies d'Ottumwa, dans l'Iowa, atteignant une fois 793 millions avant que le joystick ne casse physiquement. En janvier 1984, Tim McVey a joué plus de quarante heures sur une seule pièce et a fini avec 1 000 042 270 points : le premier score d'un milliard de points de l'histoire du jeu vidéo. La ville d'Ottumwa a déclaré le 28 janvier 1984 « Jour de Tim McVey », faisant de lui le premier joueur de jeu vidéo doté d'un jour férié municipal à son nom. Toute la saga a ensuite été documentée dans le film Man vs Snake.
1991 : le Serpent s'échappe dans le système d'exploitation
Quand Microsoft a livré MS-DOS 5.0 en 1991, il incluait QBasic, et QBasic était livré avec un programme d'exemple appelé NIBBLES.BAS. Pour un très grand nombre de personnes devenues plus tard programmeuses, ce fut le premier jeu dont elles aient jamais lu le code source. Il est difficile de surestimer à quel point cela a compté : le Serpent est devenu non seulement un jeu, mais le « premier vrai programme » canonique, la chose que l'on construisait pour se prouver à soi-même qu'on était capable de construire des choses.
À la même époque, le Serpent s'est répandu sur les calculatrices graphiques. Les machines Texas Instruments qui dominaient les salles de classe avaient juste assez d'écran et juste assez de processeur pour l'exécuter, et aucune des distractions qui auraient rendu quoi que ce soit de plus ambitieux digne d'intérêt.
1997 : le Nokia 6110, et le plus grand public qu'un jeu ait jamais eu
En décembre 1997, Nokia a lancé le 6110, un combiné professionnel doté d'un écran monochrome de seulement 84 sur 48 pixels. L'équipe marketing de Nokia avait demandé à un ingénieur logiciel nommé Taneli Armanto de construire quelques petits jeux pour lui. Il en a produit trois : Memory, Logic et Snake.
Armanto a conçu sous des contraintes brutales — deux tons, des pixels sombres sur un écran LCD teinté de vert, un clavier numérique au lieu d'un joystick, et un processeur sans rien de superflu. Ces contraintes sont exactement la raison pour laquelle le jeu a perduré. Il n'y avait rien à retirer. On estime que le Serpent d'origine s'est retrouvé sur environ 350 millions d'appareils ; entre 1997 et 2007, Nokia a livré plus de 400 millions de combinés avec une version préinstallée. Pendant une période au début des années 2000, plus de gens sur Terre jouaient au Serpent un jour donné qu'à tout autre jeu vidéo.
Un détail de la conception d'Armanto mérite d'être bien mieux connu, car nous en avons emprunté la philosophie. Il a délibérément introduit un tout petit délai juste avant un crash — une poignée de millisecondes durant lesquelles une commande tardive pouvait encore vous sauver. C'est une petite pièce de conception humaine qui reconnaît discrètement que le joueur est un être humain doté d'un système nerveux, et non une machine à états.
Snake II est arrivé sur le Nokia 3310 en 2000, sur un combiné qui s'est écoulé à plus de 126 millions d'exemplaires. Il a ajouté les trois fonctions que la plupart des versions modernes copient encore : un terrain de jeu enveloppant où l'on sort par un bord pour revenir par le bord opposé, des obstacles de labyrinthe à l'intérieur de l'arène, et de la nourriture bonus à durée limitée valant des points supplémentaires. Notre mode Portail, notre mode Labyrinthe et nos baies dorées sont des descendants directs de Snake II, et nous le disons avec plaisir.
À partir de 2016 : slither.io et l'ère du navigateur
En mars 2016, un développeur autodidacte nommé Steve Howse a publié slither.io pour les navigateurs, iOS et Android. Il a pris le concept du Serpent, l'a rendu massivement multijoueur, a rendu les serpents lisses et courbes plutôt que verrouillés sur une grille, et a inversé la règle centrale : vous mourez quand votre tête heurte un autre joueur, mais vous pouvez vous croiser vous-même librement. Fortement promu par de grandes chaînes YouTube, il a dominé l'App Store, est devenu l'un des sites web les plus visités du web cet été-là, et a dépassé cent millions de téléchargements sur Android à lui seul.
slither.io a prouvé quelque chose d'important sur le genre. Le Serpent n'est pas un jeu précis ; c'est une mécanique — une ligne qui grandit et qui ne doit rien couper — et cette mécanique peut porter une immense variété de conceptions. La version classique sur grille n'a pas disparu ; elle est simplement devenue la version « canonique » vers laquelle se tournent tous les sites de jeux de navigateur, tous les œufs de Pâques des moteurs de recherche et tous les tutoriels d'apprentissage du code.
La chronologie en un coup d'œil
| Année | Titre ou événement | Plateforme | Pourquoi cela a compté |
|---|---|---|---|
| 1976 | Blockade (Gremlin Industries, conçu par Lane Hauck) | Arcade | A créé la mécanique de la traînée qui tue ; à deux joueurs seulement |
| 1977 | Surround (aussi vendu comme Chase) | Atari 2600 | A porté le concept au foyer en tant que titre de lancement |
| 1978 | Worm, de P. Trefonas | TRS-80 | Première version d'ordinateur personnel largement diffusée |
| 1982 | Nibbler (Rock-Ola) | Arcade | Solo, croissance par nourriture, 32 labyrinthes ; le vrai modèle |
| 1984 | Tim McVey réalise 1 000 042 270 sur Nibbler | Arcade | Premier score d'un milliard de l'histoire du jeu vidéo |
| 1991 | NIBBLES.BAS livré avec QBasic dans MS-DOS 5.0 | PC | Devenu le premier code source de jeu qu'une génération ait lu |
| 1997 | Snake, de Taneli Armanto | Nokia 6110 | Environ 350 millions d'appareils ; a lancé le jeu mobile |
| 2000 | Snake II | Nokia 3310 | A ajouté bords enveloppants, labyrinthes et nourriture bonus |
| 2016 | slither.io, de Steve Howse | Navigateur, iOS, Android | Réinvention massivement multijoueur ; phénomène mondial |
| Aujourd'hui | Versions natives navigateur comme celle-ci | Tout appareil | Aucune installation, aucun compte, jeu instantané, accessibilité complète |
Dans les coulisses de notre jeu du Serpent : ce que nous avons construit et pourquoi
Notre version a été construite de zéro comme un unique fichier autonome, sans bibliothèque externe, sans police web et sans requête réseau. Cette contrainte était délibérée. Un jeu intégré à l'intérieur d'un article doit se charger instantanément, ne doit jamais ralentir la page qui l'héberge, et ne doit jamais casser parce qu'un serveur tiers a eu une mauvaise journée.
Visuellement, nous sommes allés dans une direction que la plupart des jeux du Serpent n'empruntent pas. L'apparence par défaut du genre est le vert néon sur noir — un cliché d'arcade facile à reprendre et difficile à rendre réfléchi. Nous avons plutôt construit un « vivarium » : un terrain de jeu couleur sable chaud à l'intérieur d'une coque vert pétrole profond, avec un serpent de jade au corps qui s'affine, à la vraie tête, aux yeux qui suivent la direction du déplacement, et à la langue qui frétille de temps en temps. La nourriture est une baie avec une tige et un reflet plutôt qu'un carré.
La plus grande décision visuelle, toutefois, n'est pas une couleur. C'est le mouvement. Dans la plupart des implémentations du Serpent, le serpent se téléporte de cellule en cellule, parce que le moteur de rendu dessine exactement l'état du jeu et que l'état du jeu est une liste de coordonnées de grille. Le nôtre interpole : entre un mouvement logique et le suivant, chaque segment glisse en douceur de là où il était vers là où il va. La logique du jeu reste une grille stricte — cela compte pour l'équité — mais la présentation est continue. C'est la différence entre un prototype et un produit, et cela coûte peut-être trente lignes de code.
Résumé des fonctionnalités
| Domaine | Détail |
|---|---|
| Plateau | Grille fixe de 21 × 21 (441 cellules) sur toute taille d'écran, pour que les scores restent comparables |
| Modes | Murs, Portail, Labyrinthe (cinq dispositions de labyrinthe tournantes) |
| Vitesses | Calme, Classique, Vif, Frénétique ; chacune avec sa propre courbe d'accélération et son plancher |
| Score | Bonus de niveau, multiplicateur de combo jusqu'à cinq fois, baies dorées valant le triple |
| Records | Meilleur score enregistré séparément pour chaque combinaison de mode et de vitesse |
| Statistiques | Parties jouées, baies mangées, serpent le plus long, temps total joué |
| Commandes | Touches fléchées, WASD, touches AZERTY, pavé à l'écran et gestes de balayage |
| Affichage | Thèmes clair et sombre, plein écran réel avec une mise en page à deux colonnes sur les écrans larges |
| Langues | Anglais, français, espagnol, chinois, hindi et arabe avec prise en charge de droite à gauche |
| Audio | Tons de synthèse générés dans le navigateur, coupés par défaut, avec retour haptique sur mobile |
| Accessibilité | Utilisable au clavier, annonces pour lecteurs d'écran, prise en charge du mouvement réduit |
Pourquoi la grille ne change jamais de taille
C'est la décision de conception sur laquelle nous avons le plus débattu, elle mérite donc une explication. Beaucoup de jeux du Serpent de navigateur mettent la grille à l'échelle de la fenêtre : un plus grand écran obtient plus de cellules. Cela paraît généreux. C'est en réalité injuste, car cela signifie qu'un score de 500 sur un téléphone et un score de 500 sur un ordinateur mesurent des jeux différents. Un plateau plus grand est plus facile — plus d'espace pour manœuvrer, plus de piste avant que votre propre queue ne devienne un problème.
Nous avons fixé la grille à 21 sur 21 et mis à l'échelle la taille de la cellule à la place. Sur un téléphone, chaque cellule peut faire seize pixels ; en plein écran sur un grand moniteur, chaque cellule peut atteindre près de cinquante. Le plateau occupe l'espace disponible, mais le jeu est identique partout. Votre record personnel signifie la même chose sur chaque appareil que vous possédez.
Le choix de 21 plutôt que 20 était également délibéré : un nombre impair de rangées et de colonnes donne une vraie cellule centrale, ce qui rend la position de départ symétrique. Comme nous le verrons plus loin, cela a aussi une conséquence mathématique réellement intéressante.
La référence complète du score
Tout dans le système de score utilise l'arithmétique entière, ce qui signifie que chaque score est exactement reproductible et qu'il n'y a aucune surprise en virgule flottante. Voici tout le système, écrit en toutes lettres.
Les équations centrales
| Grandeur | Équation | Notes |
|---|---|---|
| Niveau | niveau = 1 + partie entière(baies ÷ 5) | Baies comptées depuis le début de la partie |
| Valeur de base d'une baie | base = 10 + 2 × (niveau − 1) | Augmente de 2 points par niveau, indéfiniment |
| Multiplicateur de combo | multiplicateur = min(5, 1 + partie entière(chaîne ÷ 3)) | La chaîne se réinitialise si plus de 5 secondes s'écoulent entre deux baies |
| Points attribués | gain = base × multiplicateur × or | or = 3 pour une baie dorée, sinon 1 |
| Intervalle de mouvement | pas = max(plancher, départ − (niveau − 1) × décroissance) | Millisecondes entre deux mouvements logiques |
| Vitesse du serpent | cellules par seconde = 1000 ÷ pas | Conversion directe depuis l'intervalle de mouvement |
| Temps de traversée du plateau | secondes = 21 × pas ÷ 1000 | Temps pour parcourir toute la largeur du plateau |
| Distance de réaction | cellules = temps de réaction ÷ pas | De combien le serpent avance pendant que vous réagissez |
| Longueur du serpent | longueur = 3 + baies | Le serpent commence toujours avec trois cellules |
Les constantes en un coup d'œil
| Constante | Valeur | Effet |
|---|---|---|
| Taille de la grille | 21 × 21 = 441 cellules | Le terrain de jeu complet |
| Longueur de départ | 3 cellules | Tête plus deux segments de corps |
| Points de base | 10 | Valeur d'une baie au niveau 1 sans combo |
| Bonus de niveau | +2 points par niveau | Se compose avec le multiplicateur |
| Baies par niveau | 5 | Toutes les 5 baies, le niveau augmente de 1 |
| Fenêtre de combo | 5 000 ms | Intervalle maximal entre deux baies pour garder une chaîne |
| Pas de combo | 3 baies | Toutes les 3 baies enchaînées, le multiplicateur augmente de 1 |
| Plafond de combo | ×5 | Le multiplicateur ne dépasse jamais cinq |
| Gain de la baie dorée | ×3 | Appliqué par-dessus le multiplicateur de combo |
| Durée de vie de la baie dorée | 7 000 ms | Puis elle s'estompe et disparaît |
| Fréquence de la baie dorée | Toutes les 4ᵉ baies | Seulement quand il n'y en a pas déjà une sur le plateau |
Progression des niveaux
| Niveau | Baies mangées | Longueur du serpent | Valeur de base de la baie | Valeur au combo ×5 | Baie dorée au ×5 |
|---|---|---|---|---|---|
| 1 | 0–4 | 3–7 | 10 | 50 | 150 |
| 2 | 5–9 | 8–12 | 12 | 60 | 180 |
| 3 | 10–14 | 13–17 | 14 | 70 | 210 |
| 4 | 15–19 | 18–22 | 16 | 80 | 240 |
| 5 | 20–24 | 23–27 | 18 | 90 | 270 |
| 6 | 25–29 | 28–32 | 20 | 100 | 300 |
| 7 | 30–34 | 33–37 | 22 | 110 | 330 |
| 8 | 35–39 | 38–42 | 24 | 120 | 360 |
| 9 | 40–44 | 43–47 | 26 | 130 | 390 |
| 10 | 45–49 | 48–52 | 28 | 140 | 420 |
| 15 | 70–74 | 73–77 | 38 | 190 | 570 |
| 20 | 95–99 | 98–102 | 48 | 240 | 720 |
| 30 | 145–149 | 148–152 | 68 | 340 | 1 020 |
Le multiplicateur de combo
Le combo est la partie du score que la plupart des joueurs ignorent, et il vaut plus que tout le reste réuni. Chaque baie mangée dans les cinq secondes suivant la précédente prolonge votre chaîne. Chaque troisième baie de la chaîne augmente le multiplicateur d'un, jusqu'à cinq.
| Baies dans la chaîne actuelle | Multiplicateur | Valeur de la baie au niveau 1 | Valeur de la baie au niveau 10 |
|---|---|---|---|
| 1ʳᵉ à 3ᵉ | ×1 | 10 | 28 |
| 4ᵉ à 6ᵉ | ×2 | 20 | 56 |
| 7ᵉ à 9ᵉ | ×3 | 30 | 84 |
| 10ᵉ à 12ᵉ | ×4 | 40 | 112 |
| 13ᵉ et au-delà | ×5 | 50 | 140 |
Matrice complète des points par baie
| Niveau | ×1 | ×2 | ×3 | ×4 | ×5 |
|---|---|---|---|---|---|
| 1 | 10 | 20 | 30 | 40 | 50 |
| 2 | 12 | 24 | 36 | 48 | 60 |
| 3 | 14 | 28 | 42 | 56 | 70 |
| 4 | 16 | 32 | 48 | 64 | 80 |
| 5 | 18 | 36 | 54 | 72 | 90 |
| 6 | 20 | 40 | 60 | 80 | 100 |
| 7 | 22 | 44 | 66 | 88 | 110 |
| 8 | 24 | 48 | 72 | 96 | 120 |
| 9 | 26 | 52 | 78 | 104 | 130 |
| 10 | 28 | 56 | 84 | 112 | 140 |
Un exemple résolu tiré d'une vraie partie
Quand nous avons testé le jeu terminé, nous avons écrit un joueur automatique qui lit la position de la baie directement sur le canevas rendu et se dirige vers elle. Dans une partie enregistrée, il a mangé cinq baies et a fini avec un score d'exactement 70, une longueur de 8 et le niveau 2. Ce nombre mérite qu'on s'y attarde, car il montre tout le système en une seule ligne.
- Baie 1 : niveau 1, position 1 de la chaîne, multiplicateur ×1 → 10 points (total courant 10)
- Baie 2 : niveau 1, position 2 de la chaîne, multiplicateur ×1 → 10 points (total 20)
- Baie 3 : niveau 1, position 3 de la chaîne, multiplicateur ×1 → 10 points (total 30)
- Baie 4 : niveau 1, position 4 de la chaîne, multiplicateur ×2 → 20 points (total 50)
- Baie 5 : niveau 1, position 5 de la chaîne, multiplicateur ×2 → 20 points (total 70), et le niveau passe alors à 2
Remarquez que la quatrième baie vaut le double de la première, alors que rien du plateau n'a changé. C'est là tout l'argument stratégique en faveur d'un jeu agressif : l'hésitation ne fait pas que gaspiller du temps, elle réinitialise activement vos revenus.
Repères de score et le maximum théorique
Le tableau ci-dessous montre ce que vaut un nombre donné de baies si vous ne construisez aucun combo : traitez-les comme le plancher, pas comme la cible. Un joueur qui tient un multiplicateur de cinq fois pendant la majeure partie d'une partie atteindra environ cinq fois ces chiffres.
| Baies mangées | Longueur du serpent | Niveau atteint | Score sans combo | Score au ×5 soutenu |
|---|---|---|---|---|
| 10 | 13 | 3 | 110 | 550 |
| 25 | 28 | 6 | 350 | 1 750 |
| 50 | 53 | 11 | 950 | 4 750 |
| 100 | 103 | 21 | 2 900 | 14 500 |
| 200 | 203 | 41 | 9 800 | 49 000 |
| 438 (partie parfaite) | 441 (plateau plein) | 88 | 42 312 | 211 560 |
Cette dernière ligne est le plafond. Le plateau contient 441 cellules, le serpent commence avec 3, donc une partie parfaite mange 438 baies et se termine avec le serpent occupant chaque cellule. À ce point, le niveau est 88 et chaque baie vaut 184 points avant le multiplicateur. Personne ne l'a fait. Si vous y parvenez un jour, le chiffre « Le plus long » de votre panneau de records affichera 441 et il ne restera plus aucun endroit où se déplacer.
Vitesse, timing et fenêtres de réaction
Chaque réglage de difficulté est défini par trois nombres : l'intervalle entre les mouvements au niveau 1, de combien de millisecondes cet intervalle se réduit par niveau, et le plancher en dessous duquel il ne descend jamais.
| Réglage | Intervalle de départ | Réduction par niveau | Intervalle le plus rapide | Niveau où la vitesse maximale est atteinte |
|---|---|---|---|---|
| Calme | 170 ms | 6 ms | 110 ms | 11 |
| Classique | 130 ms | 6 ms | 80 ms | 10 |
| Vif | 100 ms | 5 ms | 60 ms | 9 |
| Frénétique | 78 ms | 4 ms | 45 ms | 10 |
Intervalle de mouvement par niveau
| Niveau | Calme | Classique | Vif | Frénétique |
|---|---|---|---|---|
| 1 | 170 | 130 | 100 | 78 |
| 2 | 164 | 124 | 95 | 74 |
| 3 | 158 | 118 | 90 | 70 |
| 4 | 152 | 112 | 85 | 66 |
| 5 | 146 | 106 | 80 | 62 |
| 6 | 140 | 100 | 75 | 58 |
| 7 | 134 | 94 | 70 | 54 |
| 8 | 128 | 88 | 65 | 50 |
| 9 | 122 | 82 | 60 | 46 |
| 10 et au-delà | 116 puis 110 | 80 | 60 | 45 |
Convertir les millisecondes en quelque chose que vous pouvez ressentir
Un nombre comme « 80 millisecondes par mouvement » ne signifie rien tant que vous ne le convertissez pas en cellules par seconde et en temps de traversée du plateau. Ce tableau le fait, puis fait quelque chose de plus utile : il montre de combien le serpent avance pendant une réaction humaine typique. Le temps de réaction visuel simple chez l'adulte se situe habituellement autour de 200 à 250 millisecondes. Nous avons retenu 250 millisecondes comme chiffre conservateur.
| Réglage et niveau | Intervalle | Cellules par seconde | Secondes pour traverser le plateau | Cellules parcourues pendant que vous réagissez |
|---|---|---|---|---|
| Calme, niveau 1 | 170 ms | 5,9 | 3,57 | 1,5 |
| Calme, vitesse maximale | 110 ms | 9,1 | 2,31 | 2,3 |
| Classique, niveau 1 | 130 ms | 7,7 | 2,73 | 1,9 |
| Classique, vitesse maximale | 80 ms | 12,5 | 1,68 | 3,1 |
| Vif, niveau 1 | 100 ms | 10,0 | 2,10 | 2,5 |
| Vif, vitesse maximale | 60 ms | 16,7 | 1,26 | 4,2 |
| Frénétique, niveau 1 | 78 ms | 12,8 | 1,64 | 3,2 |
| Frénétique, vitesse maximale | 45 ms | 22,2 | 0,95 | 5,6 |
Lisez attentivement la dernière colonne, car elle contient l'idée la plus importante de tout cet article. À la vitesse maximale de Frénétique, le temps que vous ayez vu un problème et bougé votre doigt, le serpent a déjà parcouru plus de cinq cellules — un quart de la largeur du plateau. Vous ne pouvez pas réagir pour vous sortir d'un Serpent rapide. Vous ne pouvez que planifier pour vous en sortir. Chaque bon joueur joue en réalité deux ou trois secondes dans le futur, et le présent visible n'est là que pour confirmer que le plan est toujours valide.
La fenêtre de la baie dorée
Une baie dorée vit exactement sept secondes. Que vous puissiez l'atteindre dépend entièrement de votre intervalle de mouvement actuel. Le pire cas sur un plateau de 21 × 21 est un trajet de coin à coin, soit une distance de Manhattan de 40 cellules.
| Réglage et niveau | Intervalle | Mouvements disponibles en 7 secondes | Le pire cas fait 40 cellules — atteignable ? |
|---|---|---|---|
| Calme, niveau 1 | 170 ms | 41 | Tout juste, avec un chemin parfaitement dégagé |
| Calme, vitesse maximale | 110 ms | 63 | Confortablement |
| Classique, niveau 1 | 130 ms | 53 | Oui, avec de la marge pour un détour |
| Classique, vitesse maximale | 80 ms | 87 | Facilement |
| Vif, niveau 1 | 100 ms | 70 | Facilement |
| Frénétique, vitesse maximale | 45 ms | 155 | Presque toujours |
Cela produit une conclusion réellement contre-intuitive : les baies dorées sont les plus difficiles à récupérer sur le réglage le plus lent. Calme vous donne plus de temps de réflexion par mouvement, mais moins de mouvements à l'intérieur d'un chronomètre fixe de sept secondes. Si vous chassez les points bonus plutôt que la survie, Classique ou Vif sont de meilleurs terrains de chasse que Calme.
La fenêtre de combo en mouvements, pas en secondes
La même logique s'applique à la fenêtre de combo de cinq secondes, et l'effet est encore plus fort. La distance de Manhattan moyenne entre deux cellules au hasard sur un plateau de 21 × 21 est de presque exactement 14 cellules, c'est donc le trajet typique d'une baie à la suivante.
| Réglage et niveau | Intervalle | Mouvements dans la fenêtre de 5 secondes | Marge sur le trajet moyen de 14 cellules |
|---|---|---|---|
| Calme, niveau 1 | 170 ms | 29 | Environ 2,1 fois |
| Classique, niveau 1 | 130 ms | 38 | Environ 2,7 fois |
| Vif, niveau 1 | 100 ms | 50 | Environ 3,6 fois |
| Frénétique, niveau 1 | 78 ms | 64 | Environ 4,6 fois |
| Frénétique, vitesse maximale | 45 ms | 111 | Environ 7,9 fois |
Autrement dit, les réglages rapides ne sont pas seulement plus risqués — ils sont aussi là où vivent les scores les plus élevés, car ils rendent réalistes les multiplicateurs de cinq fois soutenus. Calme est le réglage sur lequel apprendre. Ce n'est pas le réglage sur lequel établir des records.
Les trois modes
Murs
L'ensemble de règles original de 1997. La bordure est pleine ; la toucher termine la partie. C'est la version la plus pure du jeu et celle sur laquelle votre score devrait être mesuré si vous voulez vous comparer aux classiques. Le mode Murs punit la dérive : sans échappatoire aux bords, le périmètre devient l'endroit le plus dangereux du plateau plutôt que le plus sûr.
Portail
Hérité de Snake II sur le Nokia 3310. Sortez par n'importe quel bord et vous rentrez par le bord opposé. Cela semble rendre le jeu plus facile, et pendant les trente premières secondes, c'est le cas. Puis cela le rend considérablement plus difficile, pour une raison que la plupart des joueurs n'articulent jamais : en mode Murs, votre propre corps et la bordure forment une seule barrière connectée, si bien que le plateau a un intérieur et un extérieur simples. En mode Portail, le plateau est topologiquement un tore, votre corps peut l'enrouler, et la région dans laquelle vous vous êtes piégé est bien moins évidente. Les longues parties de Portail exigent une vraie imagination spatiale.
Le mode Portail est aussi là où les scores les plus élevés sont théoriquement possibles, car le bord n'est plus un danger et chaque baie est atteignable par deux itinéraires plutôt qu'un — parfois le chemin qui fait le tour est plus court que le chemin direct, ce qui compte énormément pour garder une chaîne en vie.
Labyrinthe
Cinq dispositions de pierre tournent à mesure que vous montez de niveau, et l'agencement change sous vos pieds toutes les cinq baies. Les dispositions sont symétriques et déterministes — le même niveau produit toujours les mêmes murs — elles peuvent donc s'apprendre plutôt que simplement se subir. Deux règles vous protègent : aucune pierre n'est jamais placée sur le bord du plateau, et la rangée centrale où le serpent apparaît est toujours gardée dégagée.
Le mode Labyrinthe change la compétence fondamentale mise à l'épreuve. Murs et Portail concernent la gestion de l'espace que consomme votre propre corps. Labyrinthe concerne la recherche d'itinéraire sous pression temporelle, ce qui est bien plus proche de ce que faisait Nibbler en 1982 que de ce que faisait Nokia en 1997.
| Mode | Bords | Obstacles | Idéal pour | Risque principal |
|---|---|---|---|---|
| Murs | Mortels | Aucun | Apprendre et comparer les scores équitablement | Se coincer contre la bordure |
| Portail | Enveloppants | Aucun | Longues parties et scores élevés | Perdre le fil de la région où l'on se trouve |
| Labyrinthe | Mortels | Cinq dispositions tournantes | Planification d'itinéraire et variété | Le plateau qui change de forme en cours de partie |
Stratégie : comment progresser vraiment au Serpent
La plupart des conseils sur le Serpent en ligne se résument à « soyez prudent » et « ne vous écrasez pas ». Voici quelque chose de plus utile. Ils sont grossièrement classés selon le point de votre développement où ils commencent à compter.
1. Cessez de poursuivre la baie
Les débutants dirigent le serpent droit vers la nourriture. Cela marche jusqu'à ce que le serpent fasse une dizaine de cellules, puis cela commence à vous tuer, car un itinéraire direct optimise pour la baie actuelle et ignore où sera votre queue ensuite. Les joueurs intermédiaires posent une question différente : non pas « comment y arriver ? », mais « à quoi ressemblera le plateau une fois que j'y serai arrivé ? ».
La version pratique de cette règle est simple. Avant de vous engager sur un itinéraire, vérifiez qu'il existe un moyen de sortir de l'emplacement de la baie. Manger une baie dans un cul-de-sac, c'est ainsi que les bonnes parties se terminent.
2. Gardez votre corps contre les bords
L'espace au Serpent n'est pas interchangeable. Cent cellules libres éparpillées en poches ne valent rien ; cent cellules libres dans une seule région ouverte, c'est une partie entière. La manière de garder votre espace libre d'un seul tenant est de garder votre corps le long du périmètre et de laisser le centre ouvert, plutôt que l'inverse. Un serpent enroulé autour de l'extérieur du plateau laisse un seul grand trou. Un serpent qui erre dans le centre découpe le plateau en fragments.
3. Apprenez le zigzag
Le motif classique de remplissage d'espace — parfois appelé boustrophédon, du grec « comme le bœuf laboure » — consiste à parcourir toute la longueur d'une rangée, descendre d'une, revenir, et recommencer. Il paraît lent et il l'est, mais il vous garantit de balayer chaque cellule d'une région sans jamais vous couper le passage. Quand une baie apparaît au loin et que votre serpent est long, marcher en zigzag vers elle est presque toujours plus sûr que de prendre la ligne directe.
4. Suivez votre propre queue
Si vous ne savez jamais quoi faire, poursuivez votre propre queue. Comme la queue s'éloigne d'une cellule chaque fois que la tête bouge, un serpent qui suit sa propre queue peut survivre indéfiniment. C'est la manœuvre d'urgence : quand le plateau a mauvaise allure et que vous ne voyez pas de plan, mettez-vous derrière votre queue et gagnez du temps pendant qu'une nouvelle baie apparaît à un meilleur endroit.
5. Comprenez la règle de la queue qui se libère
Voici une règle que la plupart des implémentations gèrent mal et que la plupart des joueurs n'apprennent donc jamais à exploiter. Quand le serpent bouge et ne mange pas, la queue quitte sa cellule à l'instant même où la tête entre dans une nouvelle. Cela signifie que la cellule actuellement occupée par le bout de votre queue peut être investie sans danger : elle sera vide au moment où vous y arriverez.
Notre version implémente cela correctement. La conséquence est que vous pouvez exécuter des virages réellement serrés qui paraissent impossibles, en suivant votre propre corps une cellule derrière lui. Mais notez l'exception : si vous mangez une baie sur ce même mouvement, le serpent grandit et la queue ne se libère pas. Investir la cellule de votre queue en mangeant est mortel. Les joueurs expérimentés l'intériorisent comme « les virages serrés sont sûrs sauf s'il y a de la nourriture sur le chemin ».
6. Jouez le combo, pas la baie
Compte tenu des tableaux ci-dessus, l'arithmétique est brutale. Un joueur calme et prudent qui mange une baie toutes les huit secondes marque à ×1 pour toujours. Un joueur agressif qui en mange une toutes les trois secondes est à ×5 en treize baies et gagne cinq fois plus par baie à partir de là. Le joueur agressif mourra plus tôt. Il finira aussi avec un score plusieurs fois plus élevé.
La règle pratique : dès qu'une baie apparaît, commencez à vous déplacer vers elle. Ne terminez pas d'abord votre boucle actuelle. N'attendez pas de voir où elle va : elle ne va nulle part.
7. Contournez les baies dorées, ne faites pas de détour vers elles
Une baie dorée vaut trois baies ordinaires, ce qui est excellent, mais elle apparaît dans une cellule au hasard et expire en sept secondes. Si elle est à peu près sur le chemin, prenez-la. Si la récupérer briserait votre combo sur la baie ordinaire, laissez-la. Trois fois une baie vaut moins que le multiplicateur de cinq fois que vous perdriez.
8. Gérez le moment de montée de niveau
Toutes les cinq baies, le jeu accélère — et en mode Labyrinthe, les murs changent aussi. Cet instant est le moment le plus dangereux de toute partie. Si vous approchez de votre cinquième, dixième ou quinzième baie, assurez-vous d'y arriver avec de l'espace ouvert devant vous plutôt que dans un coin serré.
Erreurs courantes et leurs corrections
| Erreur | Pourquoi elle vous tue | Correction |
|---|---|---|
| Prendre la ligne directe vers chaque baie | Laisse votre corps éparpillé dans le centre du plateau | Tracez des itinéraires le long du périmètre et n'entrez au centre que pour récupérer |
| Tourner deux fois dans un même intervalle de mouvement | Le second virage est ce qui se produit réellement ; le premier est écarté | Une commande décisive par mouvement, pas une rafale de tapes |
| Paniquer quand le serpent s'allonge | La panique produit des décisions à courte portée, qui fragmentent le plateau | Repliez-vous sur le suivi de votre propre queue jusqu'à ce qu'un plan apparaisse |
| Manger une baie dans un coin | Vous arrivez avec une seule sortie, et votre nouveau segment la bloque | Approchez les coins le long du mur, pas perpendiculairement à lui |
| Jouer en Calme pour marquer haut | Moins de mouvements par seconde signifie moins de mouvements dans la fenêtre de combo | Apprenez en Calme, marquez en Classique ou Vif |
| Ignorer les moments de montée de niveau | La vitesse change pendant que vous êtes en pleine manœuvre | Comptez vos baies ; arrivez à chaque cinquième dans un espace ouvert |
Les mathématiques du Serpent
Le Serpent ressemble à un jeu de réflexes et se comporte comme un problème de théorie des graphes. Cette section est optionnelle, mais elle contient un fait sur notre plateau précis que nous n'avons vu discuté nulle part, et il change la façon dont une partie parfaite devrait être jouée.
Le Serpent comme graphe en grille
Modélisez le plateau comme un graphe : chaque cellule est un sommet, et deux sommets sont reliés si leurs cellules sont orthogonalement adjacentes. Le serpent est un chemin à travers ce graphe qui avance d'un pas par tour, ne peut pas faire demi-tour, et grandit d'un sommet chaque fois qu'il atterrit sur de la nourriture. Presque toute question intéressante sur le Serpent devient une question sur les chemins et les cycles dans les graphes en grille.
Pourquoi « suivez simplement un cycle » est la stratégie parfaite standard
La façon la mieux connue de garantir qu'un serpent ne meure jamais est de trouver un cycle hamiltonien — une boucle fermée qui visite chaque cellule exactement une fois — et de simplement la suivre pour toujours. Comme la boucle couvre chaque cellule, toute la nourriture finit par tomber devant vous ; comme c'est une seule boucle fermée et que le serpent est plus court que la boucle, vous ne pouvez jamais entrer en collision avec vous-même. C'est parfait, et c'est insupportablement lent, mais cela gagne toujours.
Pourquoi notre plateau de 21 × 21 n'a pas un tel cycle
Voici la partie intéressante. Coloriez le plateau comme un échiquier. Chaque mouvement fait passer le serpent d'une cellule claire à une cellule foncée ou inversement, donc toute boucle fermée doit alterner les couleurs — ce qui signifie qu'un cycle hamiltonien ne peut exister que si le nombre de cellules claires est égal au nombre de cellules foncées.
Sur un plateau de 21 × 21, il y a 441 cellules : 221 d'une couleur et 220 de l'autre. Elles ne sont pas égales, et elles ne peuvent pas l'être, parce que 441 est impair. Par conséquent, aucun cycle hamiltonien n'existe sur notre plateau, tout simplement. La classique stratégie de la « boucle sûre » est mathématiquement impossible ici.
Ce qui existe, c'est un chemin hamiltonien : un itinéraire ouvert à travers les 441 cellules. Une partie parfaite reste donc possible, mais elle ne peut pas être une boucle irréfléchie. Tout joueur ou algorithme tentant de remplir le plateau devrait, soit travailler à l'intérieur d'une sous-région de 20 × 21 de 420 cellules, qui est paire et admet bien un cycle, et traiter la rangée restante séparément, soit planifier un chemin ouvert et se repositionner à la fin. Ce n'est pas un accident de notre conception ; c'est une propriété de tout plateau de Serpent de dimensions impair par impair, y compris un grand nombre de ceux que vous trouverez en ligne.
| Plateau | Cellules totales | Répartition des couleurs | Cycle hamiltonien possible ? |
|---|---|---|---|
| 20 × 20 | 400 | 200 / 200 | Oui |
| 21 × 21 (ce jeu) | 441 | 221 / 220 | Non — seulement un chemin ouvert |
| Sous-plateau de 20 × 21 | 420 | 210 / 210 | Oui |
| Tout plateau impair × impair | Impair | Inégal d'un | Non |
À quel point le Serpent est-il difficile, formellement ?
Assez difficile pour que des informaticiens aient publié à son sujet. En 2016, Marzio De Biasi et Tim Ophelders ont présenté un article intitulé « The Complexity of Snake » à l'International Conference on Fun with Algorithms, étendu plus tard dans Theoretical Computer Science. Ils ont montré que décider si un serpent peut récupérer toute la nourriture sur un graphe en grille plein est NP-difficile, et que sur les graphes en grille généraux, le problème est PSPACE-complet — tout comme la question plus simple de savoir si un serpent peut passer d'une configuration à une autre, même sans aucune nourriture sur le plateau.
Dit simplement : il n'existe aucun algorithme efficace connu qui joue au Serpent de façon optimale, et il y a de bonnes raisons de croire qu'aucun n'existe. Quand vous sentez qu'une position est insoluble, vous avez peut-être objectivement raison. Le problème a aussi attiré des chercheurs en robotique, car un serpent qui ne doit pas entrer en collision avec son propre corps est un modèle raisonnable pour la planification de mouvement de robots articulés en forme de serpent.
Quelques nombres sur le plateau
| Grandeur | Valeur |
|---|---|
| Cellules totales | 441 |
| Cellules du périmètre | 80 |
| Cellules intérieures | 361 (une région de 19 × 19) |
| Cellules libres au début d'une partie | 437 (441 moins 3 segments de serpent et 1 baie) |
| Distance de Manhattan maximale entre deux cellules | 40 |
| Distance de Manhattan moyenne entre deux cellules au hasard | Environ 14,0 |
| Longueur maximale du serpent | 441 |
| Baies dans une partie parfaite | 438 |
| Niveau final dans une partie parfaite | 88 |
Sous le capot : construire un Serpent qui ne ment pas au joueur
Cette section est pour les développeurs, et pour quiconque se demande pourquoi certains jeux du Serpent de navigateur font du bien et d'autres font bon marché. Chaque point ci-dessous est un bug que nous avons soit corrigé, soit délibérément contourné par conception.
Pas de temps fixe au lieu de setInterval
La façon naïve d'exécuter un jeu du Serpent est d'appeler une fonction de mouvement sur un minuteur. Cela semble marcher. C'est faux de trois manières : les minuteurs de navigateur dérivent, ils sont bridés dans les onglets en arrière-plan, et l'intervalle ne coïncide jamais avec le rafraîchissement de l'écran, si bien que l'animation saccade.
La bonne approche est un accumulateur à pas de temps fixe. À chaque image d'animation, mesurez combien de temps réel s'est écoulé, ajoutez-le à un accumulateur, et exécutez autant de mouvements logiques que ce temps en contient. La logique du jeu avance par incréments exacts et identiques, quelle que soit la fréquence d'images ; seul le dessin suit l'écran. Deux garde-fous supplémentaires comptent : bornez le temps écoulé pour qu'un onglet en arrière-plan n'accélère pas le serpent jusqu'à un mur au retour, et plafonnez le nombre de mouvements de rattrapage par image pour qu'un appareil lent ne parte pas en vrille.
| Approche | Comportement sur un moniteur à 144 Hz | Comportement dans un onglet en arrière-plan | Équité |
|---|---|---|---|
| setInterval | Saccade ; le timing des mouvements dérive du timing de l'écran | Bridé de façon imprévisible | La vitesse varie selon l'appareil |
| Un mouvement par image d'animation | Tourne à 144 mouvements par seconde | S'arrête complètement | Totalement inéquitable |
| Accumulateur à pas de temps fixe | Fluide, avec une cadence de mouvement exactement correcte | Borné, puis reprend proprement | Identique partout |
La file d'attente d'entrées, et le bug qui tue tout premier jet
Presque tout jeu du Serpent fait maison contient le même bug fatal. Le joueur se déplace vers la droite, appuie rapidement en haut puis à gauche, et les deux entrées sont appliquées avant le mouvement suivant — si bien que le serpent fait demi-tour dans son propre cou et meurt sans raison visible. C'est la source la plus courante des plaintes « ce jeu est cassé », et ce n'est pas la faute du joueur.
La correction consiste à mettre les entrées en file d'attente plutôt qu'à les appliquer immédiatement. Chaque mouvement logique consomme au plus une direction de la file, et rejette toute direction qui est l'inverse exact de l'actuelle. Le joueur peut mettre en tampon un virage un peu à l'avance — ce qui paraît réactif — mais ne peut jamais plier accidentellement le serpent en deux.
La collision, faite avec exactitude
Comme décrit dans la section stratégie, la queue libère sa cellule à tout mouvement qui ne fait pas grandir le serpent. Une implémentation correcte compare la cible de la tête à tous les segments du corps sauf le dernier, à moins que le mouvement ne soit un mouvement de repas, auquel cas chaque segment compte. Se tromper dans un sens ou dans l'autre produit un jeu qui paraît soit injustement dur, soit suspicieusement indulgent. Nous avons vérifié ce comportement par des tests automatisés avant la publication.
Rendu interpolé sur une grille discrète
La logique tourne sur des coordonnées de cellule entières ; le dessin tourne sur des positions fractionnaires. Entre les mouvements, chaque segment est dessiné à un mélange de là où il était et de là où il va, pondéré par notre avancement dans l'intervalle courant. Le résultat est un serpent qui glisse plutôt que de sauter, sans le moindre compromis sur l'équité de la grille sous-jacente.
Une subtilité : en mode Portail, un segment peut s'enrouler d'un bord du plateau à l'autre, et interpoler cette transition dessinerait une traînée droite en travers de l'écran. La correction consiste à détecter tout saut plus long qu'une cellule et à aligner au lieu de mélanger, et à rompre le tracé du corps dessiné à cet endroit.
Placement de la nourriture sans échantillonnage par rejet
L'approche courante consiste à choisir une cellule au hasard, vérifier si elle est occupée, et réessayer si elle l'est. Cela marche bien au début et devient pathologique à la fin : quand le serpent remplit presque tout le plateau, la boucle peut tourner des centaines de fois, et si le plateau est complètement plein, elle ne se termine jamais. Nous construisons la liste des cellules réellement libres et y choisissons de façon uniforme. C'est à la fois plus rapide dans le pire cas et démontrablement terminant.
Ne pas casser la page dans laquelle il vit
Un jeu intégré a des obligations envers son hôte. Le nôtre n'enregistre jamais un gestionnaire de clavier global qui volerait les touches fléchées à la page : l'entrée n'est capturée que pendant que vous interagissez réellement avec le jeu, et elle est libérée dès que vous cliquez ailleurs, se mettant en pause au passage. Il se met en pause quand l'onglet est masqué et quand il sort de la vue au défilement. Tout son style est isolé pour qu'il ne puisse pas fuir dans l'article qui l'entoure, et rien du site environnant ne peut fuir vers l'intérieur.
Deux vrais bugs que nous avons trouvés en testant
Nous serons honnêtes à leur sujet, car les articles comme celui-ci font d'ordinaire semblant que le développement se déroule sans friction. Lors des tests finaux, un navigateur automatisé a trouvé deux problèmes que le jeu manuel avait manqués.
Le premier était une collision de noms de variable : une référence nouvellement ajoutée à l'élément du plateau masquait la fonction de la boucle de rendu du même nom, ce qui désactivait silencieusement tout le jeu. Elle lançait une seule erreur de console et rien ne bougeait. La leçon est peu glorieuse et universelle : nommez les choses avec soin, et exécutez ce que vous avez publié.
Le second était plus subtil et plus instructif. Pour dimensionner le plateau, nous mesurions la largeur de l'élément même dont nous fixions la largeur, ce qui crée une boucle de rétroaction : le plateau peut rétrécir mais ne peut jamais regrandir. La correction était structurelle : un élément mesure l'espace disponible et n'a jamais sa taille fixée ; un élément séparé à l'intérieur est le plateau et est dimensionné en pixels. Si vous ne retenez qu'une seule idée d'architecture de cet article, que ce soit celle-là : ne mesurez jamais une boîte dont vous contrôlez les dimensions.
Langues, accessibilité et jeu sur n'importe quel écran
Le jeu est livré en six langues, avec l'anglais comme source. Il détecte automatiquement la bonne en vérifiant, dans l'ordre : un paramètre de langue explicite dans l'adresse de la page, un attribut sur l'élément même du jeu, la langue déclarée par la page, la locale dans les métadonnées sociales de la page, la déclaration de langue du contenu, et enfin la préférence propre du navigateur. Si aucun de ces éléments ne produit une langue prise en charge, il se rabat sur l'anglais. Vous pouvez toujours passer outre le résultat avec le sélecteur dans le coin.
| Langue | Code | Titre dans cette langue | Sens du texte |
|---|---|---|---|
| Anglais | en | Snake | De gauche à droite |
| Français | fr | Snake | De gauche à droite |
| Espagnol | es | Snake | De gauche à droite |
| Chinois | zh | 贪吃蛇 | De gauche à droite |
| Hindi | hi | स्नेक | De gauche à droite |
| Arabe | ar | لعبة الثعبان | De droite à gauche |
L'arabe fait basculer toute l'interface de droite à gauche, avec une exception délibérée : le pavé directionnel garde son agencement physique, car « gauche » sur une manette de jeu signifie gauche à l'écran quelle que soit la langue dans laquelle vous lisez.
Côté accessibilité, le jeu est entièrement utilisable au clavier, chaque commande est un vrai bouton avec un libellé approprié, et les changements de score ainsi que la fin d'une partie sont annoncés aux lecteurs d'écran via une région active. Si votre système est réglé pour réduire le mouvement, l'animation décorative, la secousse du crash et les effets de pulsation sont tous désactivés, tandis que le jeu lui-même reste intact.
Côté réactivité, la mise en page s'adapte à la largeur du jeu plutôt qu'à la largeur du navigateur — ce qui compte, car un jeu intégré à l'intérieur d'une colonne d'article étroite devrait se comporter comme un jeu étroit même sur un large moniteur. En plein écran sur un écran paysage, il passe à un agencement à deux colonnes avec le plateau d'un côté et les commandes de l'autre, et le plateau peut grandir jusqu'à plus de mille pixels de large.
Référence complète des commandes
| Entrée | Action | Notes |
|---|---|---|
| Touches fléchées | Diriger | La disposition standard |
| W, A, S, D | Diriger | Pour les claviers QWERTY |
| Z, Q, S, D | Diriger | Pour les claviers AZERTY |
| Espace | Mettre en pause ou reprendre | Démarre aussi une partie depuis l'écran-titre |
| R | Recommencer | Lance une nouvelle partie immédiatement |
| F | Plein écran | Active et désactive |
| M | Couper le son | Le son est coupé par défaut |
| Entrée | Confirmer | Active le bouton de la carte actuelle |
| Échap | Quitter le plein écran | Comportement standard du navigateur |
| Balayer sur le plateau | Diriger | Les balayages enchaînés sont reconnus sans lever le doigt |
| Toucher le plateau | Démarrer ou reprendre | Comme mettre une pièce dans une borne d'arcade |
| Pavé à l'écran | Diriger | Apparaît automatiquement sur les appareils tactiles |
Foire aux questions
Qui a inventé le jeu du Serpent ?
Personne à lui seul, et c'est pourquoi la question continue de recevoir des réponses différentes. La mécanique a été créée par Lane Hauck chez Gremlin Industries pour le jeu d'arcade de 1976 Blockade. Le format solo, mangeur de nourriture, que nous appelons désormais Serpent a été établi par Nibbler de Rock-Ola en 1982. La version qui l'a rendu célèbre dans le monde entier a été écrite par Taneli Armanto chez Nokia pour le 6110 en 1997. Les trois réponses sont défendables ; ce sont des réponses à des questions différentes.
Quel est le score le plus élevé possible dans ce jeu ?
211 560, atteint en mangeant les 438 baies disponibles tout en tenant un multiplicateur de cinq fois d'un bout à l'autre, et en ignorant les baies dorées. En pratique, les baies dorées pousseraient une partie théoriquement parfaite encore plus haut. Une très bonne partie humaine en Classique se situe généralement quelque part entre 2 000 et 10 000.
Le jeu accélère-t-il pour toujours ?
Non. Chaque difficulté a un plancher. Classique atteint son minimum à 80 millisecondes par mouvement au niveau 10 et ne va jamais plus vite ; Frénétique atteint son minimum à 45 millisecondes. Tout ce qui vient après ce point devient plus difficile purement parce que votre serpent est plus long, ce qui est le type honnête de difficulté.
Un serpent plus long vaut-il plus de points ?
Indirectement. La longueur en elle-même n'est pas comptée, mais la longueur suit les baies mangées, les baies mangées déterminent votre niveau, et le niveau élève la valeur de base de chaque baie future de deux points. Le multiplicateur, en revanche, n'a rien à voir avec la longueur : il concerne purement la rapidité à laquelle vous mangez.
Pourquoi mon score est-il plus bas en Calme qu'en Classique ?
Parce que la fenêtre de combo se mesure en secondes, pas en mouvements. Un serpent plus lent couvre moins de terrain en cinq secondes, donc les chaînes se brisent plus souvent. Calme est plus facile à survivre et plus difficile à scorer. Cela surprend presque tout le monde.
Mes scores et statistiques sont-ils envoyés quelque part ?
Non. Tout — meilleurs scores par mode, parties jouées, baies mangées, serpent le plus long, temps total — est stocké localement dans votre propre navigateur. Il n'y a aucun compte, aucun serveur, aucun classement et aucun pistage. Effacer les données de votre navigateur efface vos records, et le bouton de réinitialisation du panneau de records fait la même chose délibérément.
Puis-je jouer au clavier sur un téléphone, ou au tactile sur un ordinateur portable ?
Oui aux deux. Le pavé directionnel apparaît automatiquement sur les appareils tactiles, mais le clavier reste actif s'il y en a un connecté, et les ordinateurs portables à écran tactile peuvent balayer sur le plateau.
Pourquoi le jeu se met-il en pause quand je clique ailleurs sur la page ?
Délibérément. Un jeu intégré qui continue de consommer vos touches fléchées après que vous êtes passé à la lecture de l'article est une nuisance. Quand vous interagissez avec quelque chose en dehors du jeu, celui-ci libère le clavier et se met en pause pour que vous ne reveniez pas à un serpent mort.
Quelle est la façon la plus rapide de progresser ?
Jouez vingt parties en Classique en mode Murs et, à chacune, forcez-vous à tracer des itinéraires le long du périmètre plutôt que par le centre. Cela paraîtra plus lent et vos premiers scores baisseront. À la dixième partie, ils seront plus élevés qu'avant, car vous aurez cessé de fragmenter le plateau.
Glossaire
| Terme | Signification |
|---|---|
| Tick | Un mouvement logique du serpent, une cellule vers l'avant |
| Intervalle de mouvement | Le temps en millisecondes entre deux ticks |
| Pas de temps fixe | Exécuter la logique du jeu par incréments de temps exacts et identiques, quelle que soit la fréquence d'images |
| Interpolation | Dessiner un segment à mi-chemin entre sa cellule précédente et sa cellule actuelle pour un mouvement fluide |
| File d'attente d'entrées | Un court tampon de changements de direction en attente, consommé un par tick |
| Libération de la queue | La règle selon laquelle le dernier segment quitte sa cellule à tout mouvement qui n'est pas un repas |
| Chaîne de combo | Baies consécutives mangées dans la fenêtre de cinq secondes |
| Mode Portail ou enveloppant | Un terrain de jeu où sortir par un bord vous ramène par le bord opposé |
| Graphe en grille | Un graphe dont les sommets sont des cellules de grille et dont les arêtes relient les cellules adjacentes |
| Cycle hamiltonien | Un itinéraire fermé visitant chaque cellule exactement une fois |
| Chemin hamiltonien | Un itinéraire ouvert visitant chaque cellule exactement une fois |
| Boustrophédon | Un motif de balayage en va-et-vient qui remplit une région sans se piéger soi-même |
| Distance de Manhattan | Le nombre de pas horizontaux plus verticaux entre deux cellules |
| NP-difficile | Au moins aussi difficile que les problèmes les plus difficiles vérifiables en temps polynomial |
| PSPACE-complet | Parmi les problèmes les plus difficiles solubles avec une quantité polynomiale de mémoire |
Pourquoi nous construisons encore des choses comme celle-ci
Il existe une version de cet article qui se termine par une phrase sur la nostalgie, et elle ne serait pas fausse. Le Serpent a cinquante ans cette décennie. Un très grand nombre de personnes ont un souvenir précis qui y est attaché : un téléphone précis, une salle de classe précise, un écran précis teinté de vert.
Mais la nostalgie n'est pas la raison pour laquelle le jeu mérite encore d'être bien construit. Le Serpent survit parce qu'il est l'un des très rares jeux où les règles sont complètement visibles et où la profondeur est complètement cachée. Rien ne vous est dissimulé. Il n'y a aucun déblocage, aucune méta-progression, aucune statistique qui ne vous ait été montrée. Tout ce dont vous avez besoin pour atteindre une partie parfaite est à l'écran dès la première seconde — et vous ne pouvez toujours pas le faire, parce que la difficulté n'a jamais été dans l'information, elle était dans la planification.
C'est un type de conception de jeu rare et honnête, et il vaut l'effort d'un pas de temps fixe, d'une règle de collision correcte, d'une file d'attente d'entrées qui respecte le joueur, et d'un serpent qui glisse au lieu de sauter. Tout dans cet article — chaque tableau, chaque formule, chaque milliseconde — existe pour que, lorsque vous perdez, vous sachiez que c'est votre décision qui a perdu.
Maintenant, allez battre 2 000 en Classique. Tracez des itinéraires le long des bords. Ne vous arrêtez pas pour les baies dorées.
