{
 "id": 37036,
 "slug": "2018-02-21_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": "es",
 "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": "Actualizando Snake '97",
 "subtitle": "Sobre los retos de desarrollar un juego tremendamente popular",
 "summary": "Hace unos años, mi hermano me tiró una cerveza encima del iPhone en un bar de Ámsterdam. Al pobre no le gustó la cerveza holandesa tanto como a mí: murió. Mientras esperaba el móvil nuevo, usé uno viejo que solo servía para mandar mensajes, llamar y... ¡Snake! Así nació la idea de Snake '97, y este mes tocaba actualizar el juego, que se ha vuelto popularísimo.",
 "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": "Gemini translation (2025), reviewed and corrected by Claude Sonnet (20 Oct 2026) against a glossary and hunspell",
  "date": "2026-10-20",
  "reviewed_by_native_reader": false,
  "language": "es",
  "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": "fr",
   "title": "Mettre à 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": "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": "Café 't Pakhuis en Ámsterdam, donde se \"inventó\" Snake '97",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-1.jpg"
  },
  {
   "url": "https://willem.com/global/images/ee992b73bb44.webp",
   "description": "Snake '97 en un iPhone X, con el aspecto y el tacto del juego retro de móvil de los 90",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-2.jpg"
  },
  {
   "url": "https://willem.com/global/images/13f8f2dd6fc1.webp",
   "description": "Snake '97 arrasando en las listas junto a Angry Birds y WhatsApp",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-3.jpg"
  },
  {
   "url": "https://willem.com/global/images/87b0ccd8c5d9.webp",
   "description": "iPhone 4: ahhh, dulces recuerdos de desarrollador, cuando un solo tamaño (pequeño) servía para todo...",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-4.jpg"
  },
  {
   "url": "https://willem.com/global/images/3da50637eff4.webp",
   "description": "Prototipo de Snake '97 funcionando en varios dispositivos",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-5.jpg"
  },
  {
   "url": "https://willem.com/global/images/8d20b82f1396.webp",
   "description": "Programando el nuevo motor y probándolo en un HMD Nokia 2 con Android",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-6.jpg"
  },
  {
   "url": "https://willem.com/global/images/37052d0f8036.webp",
   "description": "¿El mismo 3310? Mira bien y encuentra las diferencias entre el iPhone SE y el iPhone X",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-7.jpg"
  },
  {
   "url": "https://willem.com/global/images/98f47b70cb4c.webp",
   "description": "Gracias a los nuevos gráficos adaptables, ahora se puede jugar en pantalla panorámica",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-8.jpg"
  },
  {
   "url": "https://willem.com/global/images/6848b7ac140f.webp",
   "description": "Snake '97 como app de escritorio para macOS, posible gracias a los nuevos gráficos escalables",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-9.jpg"
  },
  {
   "url": "https://willem.com/global/images/a5e27801afbd.webp",
   "description": "Analizando las diferencias de velocidad de juego con vídeo a cámara lenta",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-10.jpg"
  },
  {
   "url": "https://willem.com/global/images/6251dc574a72.webp",
   "description": "El código real de Snake '97 calculando distancias con el teorema de Pitágoras",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-11.jpg"
  },
  {
   "url": "https://willem.com/global/images/07b9c2f3b1a4.webp",
   "description": "Manejar Snake con un mando de Super Nintendo es genial (con un conector USB SuperSmart-joy)",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-12.jpg"
  },
  {
   "url": "https://willem.com/global/images/fa191d607fbb.webp",
   "description": "Un truco que el Snake original no sabía hacer: jugar con un mando DualShock de PlayStation por Bluetooth, con stick analógico",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-13.jpg"
  },
  {
   "url": "https://willem.com/global/images/12934c0ebe67.webp",
   "description": "Diseño UX para un público internacional. ¡Diseñar interfaces sin palabras es difícil!",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-14.jpg"
  },
  {
   "url": "https://willem.com/global/images/37c761847d86.webp",
   "description": "Campeón mundial de Snake '97, pero no por mucho tiempo...",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-15.jpg"
  },
  {
   "url": "https://willem.com/global/images/d31a2077c5a4.webp",
   "description": "Así es la nube, queridos niños y niñas.",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-16.jpg"
  },
  {
   "url": "https://willem.com/global/images/5234dd3dd7ae.webp",
   "description": "Snake '97, disponible como descarga gratuita para iOS, Android, macOS, Windows y ChromeOS",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_37036_images-17.jpg"
  }
 ],
 "text": "Snake '97\nProgramé el juego Snake por primera vez en 2011, para iOS. Tardé unas dos semanas en tener un prototipo funcional que se viera y se sintiera como el verdadero clásico de los 90. Mi otro hermano me ayudó con los gráficos: sacó unas macros muy nítidas de mi móvil antiguo (sigue pareciéndome raro que tantos de vosotros llevéis en el bolsillo una copia de mi teléfono).\nAlgunos blogs importantes lo recogieron (https://snake97.com/press/) y eso llevó a Snake '97 a lo más alto de las listas de todo el mundo. Hoy se juega en todas partes, está traducido a 53 idiomas y disponible para iOS, Android, Windows, ChromeOS y macOS.\nHacía falta una actualización\nEn 2011 solo había un iPhone, el iPhone 4. Como desarrollador, podías olvidarte tranquilamente de Android, y Windows Phone ni siquiera existía todavía. La vida era tan bonita como puede desear un desarrollador (perezoso): un solo tamaño de pantalla.\nAvancemos hasta hoy: Apple vende ahora 8 iPhones y hay millones y millones de dispositivos Android, todos con pantallas, procesadores, memoria y versiones de software distintos. Decir que es un reto se queda corto...\nPara mantener la diversión en Snake '97 tuve que actualizar el motor del juego desde su mismo núcleo. De algún modo tenía que lograr que los gráficos encajaran en todas las pantallas del mundo y compensar las diferencias de potencia y de memoria...\nUn motor de juego para gobernarlos a todos\nLas versiones originales del juego tenían cada una su propio motor. Uno para iOS, otro para Android, otro para Windows, etc. Cuando lancé Snake 2k (la variante de Snake II), simplemente añadí otro juego de motores. En total programé 6 motores de Snake distintos en Objective-C (iOS), Java (Android) y C# (Windows). Mantenerlos en marcha en dispositivos nuevos, con otros tamaños de pantalla, procesadores y memoria, se hacía cada vez más difícil.\nPero este mes me armé de valor, y a lo grande. Rediseñé y construí otro motor de Snake, pero este estaba pensado para sustituir a todos los anteriores. Tenía que funcionar en iOS, Android y Windows. Quería un motor preparado para el futuro, para cualquier pantalla y cualquier tipo de entrada (teclado, táctil, lápiz, gamepad, joystick, lo que se te ocurra).\nHTML5 Rocks\nLa web ha alcanzado a la tecnología de las apps nativas. Se han introducido muchas API nuevas que permiten experiencias interactivas ricas en todo tipo de dispositivos. Me pregunté lo difícil que sería hacer que Snake '97 funcionara con tecnología web. Solo había una forma de averiguarlo, así que me puse a ello.\nGráficos adaptables\nPrimero empecé a construir el motor gráfico sobre el canvas de HTML5 y un sistema de escalado adaptable que diseñé para la versión de Android de Snake '97. En esencia, el motor mide el tamaño de pantalla disponible, la orientación y la densidad de píxeles. Y adapta automáticamente el material fotográfico de alta resolución a tu pantalla concreta.\nEl nuevo motor gráfico se adapta incluso a rarezas como el notch del iPhone X. Todo esto ocurre en una fracción de segundo. También lo diseñé para que reaccione a los cambios de tamaño de pantalla. Ahora puedes jugar en vertical o en horizontal, en una ventana o a pantalla completa (o en pantalla dividida, si tienes un iPad).\nDiferencias de potencia\n¿Crees que un juego sencillo no tiene que preocuparse por la potencia de cálculo? ¡Error! En un juego como Snake el tiempo lo es todo. La gente juega con \"memoria muscular\" y repite sus toquecitos en la pantalla táctil sin pensar en cada movimiento.\nEl motor tiene que ser predecible y funcionar a un ritmo constante. Pero además, la experiencia debe ser la misma tanto en un Android viejo como en una bestia de 6 núcleos como el iPhone X.\nUsé la cámara de alta velocidad del iPad Pro para grabar partidas de Snake a cámara lenta. Con el vídeo pude detectar diferencias de velocidad fotograma a fotograma. De ahí salió un sistema interno de benchmarking (con temporizadores, contando milisegundos) que ajusta automáticamente la velocidad del juego, afinada con precisión para tu dispositivo.\nControles: táctil, teclado, lápiz, gamepad\nLos jugadores manejan la serpiente con los controles retro (el teclado del móvil antiguo). La versión original para iOS usaba UIButtons transparentes y fijos que coloqué sobre las fotos del móvil viejo. Un comienzo sencillo y eficaz.\nPor desgracia, los botones de iOS tenían algo de retardo (con demoras impredecibles en la entrada) y, como es lógico, no se adaptaban a otros tamaños de pantalla. Literalmente, escribí a mano coordenadas nuevas para cada iPhone que Apple sacó en los últimos años... un trabajo nada divertido.\nEl nuevo motor usa un truco que desarrollé para la versión de Android: botones virtuales colocados dinámicamente. Con la información de escalado que calcula el motor gráfico, mantengo una matriz de coordenadas X e Y que corresponden a los botones virtuales. Cuando el jugador toca la pantalla, el motor calcula el botón más cercano con matemáticas: el teorema de Pitágoras.\nFunciona a las mil maravillas y convierte toda la pantalla en un botón. Así es mucho más divertido jugar. Además del táctil, añadí compatibilidad con el teclado para que quien no tenga pantalla táctil también pueda jugar a Snake.\nMientras trabajaba en los controles descubrí otra maravilla de HTML5: la API GamePad. Permite a programadores como yo dar soporte a gamepads, joysticks y otros dispositivos de entrada conectados por USB o Bluetooth.\nSoportar gamepads distintos es un reto, pero también es divertido. Seguro que perdí un día entero \"probando\"... perfeccionando mi técnica con el formidable mando de la SNES y la deliciosa palanca analógica del DualShock. (\"Perdona, cariño, estoy trabajando...\")\nInternacionalización\nSi estás leyendo esto, seguramente entiendas inglés. Pero buena parte del público de Snake '97 no habla inglés. De hecho, hay jugadores en más de 30 idiomas distintos. Del español al ruso, del árabe al hebreo, del alemán al japonés. Lo que digas, Snake lo tiene.\nDiseñar una interfaz basada en texto es complicado si quieres llegar a todo el mundo. Los iconos tampoco son infalibles (una imagen puede significar cosas distintas). Como diseñador de UX tienes que pensar en conceptos de uso universal. Para Snake usé iconos de un reloj, un velocímetro, un altavoz y un trofeo. Son iconos comunes en todo el mundo y los elegí precisamente por eso.\nLa descripción de la app es un texto que encargué traducir a un servicio de traducción profesional. Otros editores se fían de Google Translate, pero sé que eso da resultados lamentables.\nClasificación mundial\nEn los 90 te ganabas un buen prestigio en la calle si conseguías una buena puntuación en Snake. En las versiones originales de Snake '97 solo tenías tu propio récord que superar y, en iOS, podías subir tu puntuación a GameCenter.\nPara la nueva versión quería un alcance más global, así que introduje la \"clasificación mundial\". Es la nueva tabla integrada que coloca tu partida al instante, comparando puntuaciones de gente de todo el mundo. Hay tres clasificaciones: de todos los tiempos, de las últimas 24 horas y de la última hora.\nLas puntuaciones las procesa un increíble servidor Intel XEON de 48 núcleos con una barbaridad de memoria. Funciona con Debian GNU/Linux, MariaDB, NGINX y NodeJS. En horas punta gestiona más de 10 puntuaciones por segundo. La configuración del servidor merece un artículo propio, que escribiré más adelante, así que estate atento a este blog si lo tuyo es el big data.\nDescárgalo ya\nSolo hay una forma de saber si mi trabajo ha valido la pena: pruébalo tú mismo.\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)\nSi te encuentras algún error, avísame: aquí tienes mis datos de contacto (https://willem.com/).",
 "word_count": 1289,
 "markdown_url": "https://agents.willem.com/es/posts/2018-02-21_actualizando-snake-97/post.md"
}