{
 "id": 37036,
 "slug": "2018-02-21_mettre-a-jour-snake-97",
 "url": "https://agents.willem.com/fr/posts/2018-02-21_mettre-a-jour-snake-97/",
 "source_url": "https://willem.com/fr/2018-02-21_mettre-a-jour-snake-97/",
 "language": "fr",
 "date": "2018-02-21",
 "published": "2018-02-21T00:00:00+01:00",
 "created": "2025-06-26T22:10:27.779000+02:00",
 "updated": "2026-10-20T09:20:31.699000+02:00",
 "title": "Mettre à jour Snake '97",
 "subtitle": "Les défis du développement d'un jeu ultra populaire",
 "summary": "Il y a quelques années, mon frère a renversé une bière sur mon iPhone dans un bar d'Amsterdam. Le pauvre n'a pas aimé la bière néerlandaise autant que moi : il est mort. En attendant un nouveau téléphone, j'ai utilisé un vieux modèle qui ne savait faire qu'envoyer des SMS, téléphoner et... jouer à Snake ! L'idée de Snake '97 était née, et ce mois-ci, il était temps de mettre à jour ce jeu ultra populaire.",
 "topics": [
  "Windows",
  "android",
  "creating",
  "creativity",
  "design",
  "game",
  "iOS",
  "iPad",
  "iPhone",
  "programming",
  "retro",
  "server",
  "smartphone",
  "snake",
  "work"
 ],
 "author": {
  "name": "Willem L. Middelkoop",
  "url": "https://willem.com"
 },
 "provenance": {
  "kind": "model",
  "method": "Claude Sonnet, two passes (translation, then proofreading) against a glossary and hunspell",
  "date": "2026-10-20",
  "reviewed_by_native_reader": false,
  "language": "fr",
  "source_language": "en"
 },
 "translations": [
  {
   "language": "en",
   "title": "Updating Snake '97",
   "url": "https://agents.willem.com/en/posts/2018-02-21_updating-snake-97/",
   "source_url": "https://willem.com/en/2018-02-21_updating-snake-97/"
  },
  {
   "language": "nl",
   "title": "Snake '97 Updaten",
   "url": "https://agents.willem.com/nl/posts/2018-02-21_snake-97-updaten/",
   "source_url": "https://willem.com/nl/2018-02-21_snake-97-updaten/"
  },
  {
   "language": "de",
   "title": "Snake '97 aktualisieren",
   "url": "https://agents.willem.com/de/posts/2018-02-21_snake-97-aktualisieren/",
   "source_url": "https://willem.com/de/2018-02-21_snake-97-aktualisieren/"
  },
  {
   "language": "es",
   "title": "Actualizando Snake '97",
   "url": "https://agents.willem.com/es/posts/2018-02-21_actualizando-snake-97/",
   "source_url": "https://willem.com/es/2018-02-21_actualizando-snake-97/"
  },
  {
   "language": "it",
   "title": "Aggiornare Snake '97",
   "url": "https://agents.willem.com/it/posts/2018-02-21_aggiornare-snake-97/",
   "source_url": "https://willem.com/it/2018-02-21_aggiornare-snake-97/"
  },
  {
   "language": "pt",
   "title": "Atualizar o Snake '97",
   "url": "https://agents.willem.com/pt/posts/2018-02-21_atualizar-o-snake-97/",
   "source_url": "https://willem.com/pt/2018-02-21_atualizar-o-snake-97/"
  },
  {
   "language": "pap",
   "title": "Aktualisá Snake '97",
   "url": "https://agents.willem.com/pap/posts/2018-02-21_aktualisa-snake-97/",
   "source_url": "https://willem.com/pap/2018-02-21_aktualisa-snake-97/"
  },
  {
   "language": "fy",
   "title": "Snake '97 fernije",
   "url": "https://agents.willem.com/fy/posts/2018-02-21_snake-97-fernije/",
   "source_url": "https://willem.com/fy/2018-02-21_snake-97-fernije/"
  }
 ],
 "image": "https://willem.com/global/images/da5f22919df3.webp",
 "image_width": 2560,
 "images": [
  {
   "url": "https://willem.com/global/images/06e55a3e0198.webp",
   "description": "Le café 't Pakhuis à Amsterdam, où Snake '97 a été « inventé »",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-1.jpg"
  },
  {
   "url": "https://willem.com/global/images/ee992b73bb44.webp",
   "description": "Snake '97 sur iPhone X, avec le look et la sensation du jeu de téléphone rétro des années 90",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-2.jpg"
  },
  {
   "url": "https://willem.com/global/images/13f8f2dd6fc1.webp",
   "description": "Snake '97 au sommet des classements avec Angry Birds et WhatsApp",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-3.jpg"
  },
  {
   "url": "https://willem.com/global/images/87b0ccd8c5d9.webp",
   "description": "iPhone 4 : ah, les doux souvenirs de développeur, quand une seule (petite) taille convenait à tout le monde...",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-4.jpg"
  },
  {
   "url": "https://willem.com/global/images/3da50637eff4.webp",
   "description": "Prototype de Snake '97 tournant sur différents appareils",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-5.jpg"
  },
  {
   "url": "https://willem.com/global/images/8d20b82f1396.webp",
   "description": "Programmation du nouveau moteur de jeu et test sur un HMD Nokia 2 sous Android",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-6.jpg"
  },
  {
   "url": "https://willem.com/global/images/37052d0f8036.webp",
   "description": "Toujours le même 3310 ? Regarde bien et repère les différences entre l'iPhone SE et l'iPhone X",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-7.jpg"
  },
  {
   "url": "https://willem.com/global/images/98f47b70cb4c.webp",
   "description": "Jouer en grand écran est désormais possible grâce aux nouveaux graphismes adaptatifs",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-8.jpg"
  },
  {
   "url": "https://willem.com/global/images/6848b7ac140f.webp",
   "description": "Snake '97 en appli de bureau macOS, rendu possible par les nouveaux graphismes évolutifs",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-9.jpg"
  },
  {
   "url": "https://willem.com/global/images/a5e27801afbd.webp",
   "description": "Analyse des différences de vitesse de jeu grâce à une vidéo au ralenti",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-10.jpg"
  },
  {
   "url": "https://willem.com/global/images/6251dc574a72.webp",
   "description": "Le vrai code de Snake '97 qui calcule les distances avec le théorème de Pythagore",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-11.jpg"
  },
  {
   "url": "https://willem.com/global/images/07b9c2f3b1a4.webp",
   "description": "Contrôler Snake avec une manette Super Nintendo, c'est génial (avec un connecteur USB SuperSmart-joy)",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-12.jpg"
  },
  {
   "url": "https://willem.com/global/images/fa191d607fbb.webp",
   "description": "Une astuce que le Snake d'origine ne connaissait pas : jouer avec une manette PlayStation DualShock en Bluetooth, stick analogique compris",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-13.jpg"
  },
  {
   "url": "https://willem.com/global/images/12934c0ebe67.webp",
   "description": "Un design UX pour un public international. Concevoir des interfaces sans mots, c'est difficile !",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-14.jpg"
  },
  {
   "url": "https://willem.com/global/images/37c761847d86.webp",
   "description": "Champion du monde de Snake '97, mais pas pour longtemps...",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-15.jpg"
  },
  {
   "url": "https://willem.com/global/images/d31a2077c5a4.webp",
   "description": "Voilà à quoi ressemble le cloud, chers garçons et filles.",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-16.jpg"
  },
  {
   "url": "https://willem.com/global/images/5234dd3dd7ae.webp",
   "description": "Snake '97 disponible en téléchargement gratuit pour iOS, Android, macOS, Windows et ChromeOS",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-17.jpg"
  }
 ],
 "text": "Snake '97\nÀ l'origine, j'ai programmé le jeu Snake en 2011 pour iOS. Il m'a fallu environ deux semaines pour créer un prototype fonctionnel qui ressemblait et se jouait comme le vrai classique des années 90. Mon autre frère m'a aidé pour les graphismes en prenant de superbes photos en gros plan de mon vieux téléphone (c'est toujours bizarre de penser que tant d'entre vous ont une copie de mon téléphone dans leur poche).\nQuelques gros blogs (https://snake97.com/press/) en ont parlé, et Snake '97 s'est retrouvé en tête des classements partout dans le monde. Aujourd'hui, on y joue aux quatre coins de la planète, il est traduit en 53 langues et disponible sur iOS, Android, Windows, ChromeOS et macOS.\nUne mise à jour s'impose\nEn 2011, il n'existait qu'un seul iPhone, l'iPhone 4. En tant que développeur, tu pouvais ignorer Android sans risque, et Windows Phone n'était même pas encore inventé. La vie était aussi belle qu'un développeur (paresseux) pouvait la rêver : une seule taille d'écran.\nAvance rapide jusqu'à aujourd'hui : Apple vend actuellement 8 iPhone et il existe des millions et des millions d'appareils Android, tous avec des tailles d'écran, des processeurs, des mémoires et des versions de logiciel différents. Dire que c'est un défi serait un euphémisme...\nPour que Snake '97 reste aussi fun, je devais mettre à jour le moteur du jeu en profondeur. D'une manière ou d'une autre, je devais adapter les graphismes à chaque écran du monde et tenir compte des différences de puissance de calcul et de mémoire....\nUn seul moteur de jeu pour les gouverner tous\nLes premières versions du jeu avaient chacune leur propre moteur. Un pour iOS, un pour Android, un pour Windows, etc. Quand j'ai lancé Snake 2k (la variante Snake II), j'ai tout simplement ajouté une nouvelle série de moteurs. Au total, j'ai programmé 6 moteurs Snake différents en Objective-C (iOS), Java (Android) et C# (Windows). Faire tourner ces moteurs sur de nouveaux appareils, avec d'autres tailles d'écran, d'autres processeurs et d'autres configurations de mémoire, devenait de plus en plus difficile.\nMais ce mois-ci, j'ai serré les dents, et pas qu'un peu. J'ai conçu et construit un autre moteur Snake. Mais celui-ci devait remplacer tous les précédents. Il devait tourner sur iOS, Android et Windows. Je voulais un moteur prêt pour l'avenir, pour n'importe quel écran et n'importe quel type de commande (clavier, tactile, stylet, manette, joystick, ce que tu veux).\nHTML5 Rocks\nLe web a rattrapé la technologie des applis natives. De nombreuses nouvelles API ont fait leur apparition et permettent des expériences riches et interactives sur beaucoup d'appareils différents. Je me suis demandé s'il serait très difficile de faire fonctionner Snake '97 avec les technologies du web. Il n'y avait qu'une façon de le savoir, alors je m'y suis mis.\nDes graphismes adaptatifs\nJ'ai commencé par construire le moteur graphique à partir du canvas HTML5 et d'un système d'échelle adaptatif que j'avais conçu pour la version Android de Snake '97. En gros, le moteur mesure la taille de l'écran disponible, l'orientation et la densité de pixels. Il adapte automatiquement du matériel photo haute résolution à ton écran précis.\nLe nouveau moteur graphique gère même des trucs bizarres comme l'encoche de l'iPhone X. Tout cela se passe en une fraction de seconde. J'ai aussi conçu le moteur pour qu'il réagisse aux changements de taille d'écran. On peut maintenant jouer en mode portrait ou paysage, dans une fenêtre ou en plein écran (ou en écran partagé si tu es sur iPad).\nDes puissances de calcul différentes\nTu crois qu'un jeu simple n'a pas à se soucier de la puissance de calcul ? Faux ! Dans un jeu comme Snake, le timing est essentiel. Les gens jouent avec leur « mémoire musculaire », en répétant leurs tapotements sur l'écran tactile sans penser aux mouvements individuels.\nLe moteur de jeu doit être prévisible, il doit tourner à vitesse constante. Mais surtout, l'expérience doit être la même, que tu aies un vieil appareil Android ou une bête de course à 6 cœurs comme l'iPhone X.\nJ'ai utilisé la caméra vidéo haute vitesse de l'iPad Pro pour filmer des parties de Snake au ralenti. Grâce à la vidéo, j'ai pu repérer les différences de vitesse image par image. Cela a donné un système interne de benchmark (avec des minuteurs, qui comptent les millisecondes) qui ajuste automatiquement la vitesse du jeu, réglée avec précision pour ton appareil.\nLes commandes : tactile, clavier, stylet, manette\nLes joueurs contrôlent le serpent avec les commandes rétro (le clavier de l'ancien téléphone). La version iOS d'origine utilisait des UIButton transparents fixes que j'avais placés sur les photos de l'ancien téléphone. Un début simple et efficace.\nMalheureusement, les boutons fournis par iOS avaient un certain retard (ce qui causait des délais imprévisibles) et ne s'adaptaient évidemment pas aux différentes tailles d'écran. J'ai littéralement codé en dur de nouvelles coordonnées pour chaque nouvel iPhone sorti ces dernières années.... pas un boulot marrant.\nLe nouveau moteur utilise une astuce que j'avais mise au point pour la version Android : des boutons virtuels positionnés dynamiquement. Avec les informations d'échelle calculées par le moteur graphique, je maintiens dynamiquement une matrice de coordonnées X et Y correspondant aux boutons virtuels. Quand un joueur touche l'écran, le moteur calcule le bouton le plus proche avec des maths, le théorème de Pythagore.\nÇa marche comme un charme et ça transforme tout l'écran en bouton. Le jeu est bien plus agréable à jouer comme ça. En plus du tactile, j'ai ajouté la prise en charge du clavier pour que les gens sans écran tactile puissent jouer à Snake eux aussi.\nPendant que je travaillais sur les commandes, j'ai découvert une autre merveille de HTML5, l'API GamePad. Elle permet à des programmeurs comme moi de gérer les manettes, les joysticks et d'autres périphériques de commande connectés en USB ou en Bluetooth.\nGérer des manettes différentes est un défi, mais c'est quand même amusant. J'ai sûrement perdu une journée entière à « tester »... enfin, à perfectionner mes talents avec la formidable manette SNES et le superbe stick analogique de la manette DualShock. (« Désolé chérie, je travaille ici... »)\nInternationalisation\nSi tu lis ceci, tu comprends probablement l'anglais. Mais une grande partie du public de Snake '97 ne le parle pas. Il y a même des joueurs dans plus de 30 langues différentes. De l'espagnol au russe, de l'arabe à l'hébreu, de l'allemand au japonais. Dis une langue, Snake l'a.\nConcevoir une interface qui repose sur du texte est difficile quand on veut servir le monde entier. Les icônes ne sont pas parfaites non plus (une image peut avoir un autre sens ailleurs). En tant que designer UX, il faut trouver des concepts utilisés partout dans le monde. Pour Snake, j'ai choisi des icônes d'horloge, de compteur de vitesse, de haut-parleur et de trophée. Ces icônes sont courantes dans le monde entier et je les ai choisies précisément pour cette raison.\nLa description de l'appli est un texte que j'ai fait traduire par un service de traduction professionnel. D'autres éditeurs se fient à Google Translate, mais je sais que cela donne des résultats lamentables.\nClassement mondial\nDans les années 90, tu gagnais du respect dans la rue si tu avais fait un beau score à Snake. Dans les versions d'origine de Snake '97, tu n'avais que ton propre meilleur score à battre, et sur iOS, tu pouvais envoyer ton score à GameCenter.\nPour la nouvelle version, je voulais une portée plus mondiale, avec un « classement mondial ». C'est le nouveau classement intégré, qui place instantanément ta partie dans la hiérarchie en comparant les scores de joueurs du monde entier. Il y a trois classements : de tous les temps, des 24 dernières heures et de la dernière heure.\nLes meilleurs scores sont traités par un incroyable serveur Intel XEON à 48 cœurs avec une quantité folle de mémoire. Il tourne sous Debian GNU/Linux, avec MariaDB, NGINX et NodeJS. Aux heures de pointe, il traite plus de 10 scores par seconde. La configuration du serveur mérite un article de blog à part que j'écrirai plus tard, alors garde un œil sur ce blog si les big data te passionnent.\nTélécharge-le maintenant\nIl n'y a qu'une façon de savoir si mon travail est réussi : l'essayer toi-même.\n- Android (https://play.google.com/store/apps/details?id=com.dsd164.snake97)\n- ChromeOS (https://play.google.com/store/apps/details?id=com.dsd164.snake97)\n- iOS (https://itunes.apple.com/us/app/snake-97-retro-phone-classic/id438052745?mt=8)\n- Mac (https://itunes.apple.com/app/snake-97-retro-phone-classic/id1349761776?mt=12)\n- Windows (https://www.microsoft.com/en-us/store/p/snake-97/9nblggh0ccmr)\n- Web (https://snake97.com)\nN'hésite pas à me signaler les bugs que tu rencontres, tu trouveras mes coordonnées ici (https://willem.com/).",
 "word_count": 1413,
 "markdown_url": "https://agents.willem.com/fr/posts/2018-02-21_mettre-a-jour-snake-97/post.md"
}