Desarrollo de Videojuegos Sociales y Móviles

Publicado en


En los últimos años, las redes sociales han propiciado un espacio para el desarrollo de los llamados “videojuegos sociales”. Estos juegos digitales tienen la particularidad de integrar las distintas capacidades de comunicación de la red social en que son ejecutados, como la mensajería a través de chats, envío de invitaciones y uso del contenido que los propios usuarios han generado en la red.
A su vez, la masificación del uso de dispositivos móviles ha permitido incorporar nuevos elementos que expanden aún más las características de sociabilización en este tipo de aplicaciones, tales como la geolocalización, el compartir información en tiempo real usando una cámara o micrófono, así como también la capacidad de estar conectado en todo momento a través de redes inalámbricas. Todos estos elementos permiten establecer una interacción más rica y síncrona entre los usuarios participantes.

Consideraciones

La creación de un videojuego social conlleva diferentes desafíos de carácter técnico, ya que se espera que este tipo de aplicaciones permitan que muchos usuarios puedan conectarse a ellas para interactuar entre sí, debiendo soportar diferentes configuraciones de software (sistemas operativos, browsers) y hardware (PC, dispositivos móviles).
Dado esto, el diseño de un videojuego social debe considerar aspectos relevantes como:

  • Escalabilidad: hacer que el juego pueda funcionar correctamente cuando aumenta o disminuye la cantidad de jugadores.
  • Concurrencia: soportar adecuadamente que varios usuarios interactúen simultáneamente en la aplicación.
  • Plataforma(s) de operación: construir el juego de modo que pueda funcionar en diversas plataformas y diferentes redes sociales.
  • Seguridad: proteger la integridad de la plataforma y los datos de los jugadores.
  • Monitoreo y registro de información: verificar la salud de la plataforma del juego y generar bitácoras con información relevante sobre las acciones de los jugadores y “logs” del sistema.

Arquitectura

Para cumplir con las consideraciones mencionadas, es deseable separar los componentes del juego en diversos módulos según su tipo de responsabilidades y acciones a realizar.
A continuación se presenta un ejemplo de arquitectura para un videojuego social:

Figura 1: Ejemplo de arquitectura
A continuación explico los distintos componentes:

  • Game Front-end. Es la capa de presentación del juego que se ejecuta dentro del contexto de una red social. Interactúa con el usuario, es responsable de manejar los elementos multimediales (gráficos, audio), los dispositivos de entrada de datos (teclado, mouse, pantalla táctil) y se comunica con los servicios del back-end.
  • Social network integration. Módulo encargado de interactuar con la API de una o más redes sociales. Permite que el front-end del juego pueda acceder a los datos y funcionalides sociales que provee cada red social (listas de amigos, envío de invitaciones, etc.) y acceder a los medios de pago integrados (ej: Facebook credits).
  • Game services. Corresponde a la capa de servicios del juego, es usada por el Front-end para validar, persistir y recuperar la información relacionada con la cuenta de cada jugador.
  • Storage. Capa encargada de proveer mecanismos para guardar y recuperar la información y estado de cada uno de los usuarios que participan en el juego.
  • Caching system. Corresponde a una capa de caché o almacenamiento volátil de datos, la cual permite reducir los accesos más costosos al storage y acelerar la recuperación de datos del juego que no cambian frecuentemente.
  • Tracking service (analytics). Se refiere a una capa de seguimiento de acciones, la cual permite registrar el comportamiento de los usuarios en base a eventos disparados durante el juego tales como el envío de invitaciones, compras de ítems virtuales, etc.

Front end.

Actualmente, la mayoría de los juegos sociales usa Adobe Flash en su front-end, lo que permite que éstos sean ejecutados principalmente en PCs y navegadores web a través de un plugin. Sin embargo, la gradual adopción en los últimos años de la especificación HTML5 por parte de grandes compañías como Google, Apple y Microsoft, ha permitido que tanto computadores de escritorios como smartphones y tablets puedan hacer uso de contenido multimedia usando un browser, sin necesidad de instalar un plugin adicional.
El desarrollar aplicaciones usando HTML5 consiste en usar el lenguaje Javascript para manipular los objetos provistos por esta especificación, en particular:

  • Canvas. Objeto que permite renderizar figuras geométricas, y desplegar elementos gráficos basados en bitmaps (ej: imágenes PNG, JPG).
  • Audio. Permite ejecutar sonidos. Los formatos permitidos varían según plataforma de ejecución (ej: browser).
  • WebSocket. Tecnología que permite establecer comunicación bidireccional continua de datos entre un cliente y un servidor usando un socket (protocolo TCP).

Actualmente existen diferentes motores de juegos que pueden ser usados para implementar un front-end usando HTML5, tales como ImpactJS y MelonJS. Éstos proveen herramientas de apoyo (ej: editor de niveles) y permiten abstraer en parte los problemas de compatibilidad entre los diversos navegadores.
Junto a esto, existen herramientas que optimizan la ejecución de aplicaciones HTML5 en dispositivos móviles (Android, iOS), proveyendo acceso a funcionalidades nativas de cada dispositivo (cámaras, acelerómetro, etc.). Algunas de éstas son PhoneGap, TriggerIO y AppMobi XDK, las cuales ofrecen funcionalidades gratis y pagadas para generar archivos distribuibles en mercados como Apple Store y Google Play.

Back-end

La capa de servicios del juego puede ser implementada usando lenguajes del lado del servidor (Java, PHP, C#) y pueden ser expuestos a través de protocolos binarios de comunicación (ej: AMF de Adobe Systems) o basados en HTTP (REST, SOAP).
En la actualidad, destaca el uso del servidor Node.js, el cual permite desarrollar aplicaciones altamente escalables usando Javascript, empleando una arquitectura orientada a eventos. Además, cuenta con la capacidad de extender su funcionalidad base mediante módulos que se le pueden ir incorporando.
Junto a esto, para permitir escalabilidad del back-end, alta disponibilidad y una gran capacidad de almacenamiento puede hacerse uso de tecnología basada en Cloud Computing. En la modalidad PaaS (Platform as a Service) puede usarse una plataforma que ya viene predeterminada con hardware, redes, sistema operativo y servidor de aplicaciones. Tal es el caso de Microsoft Windows Azure, el cual provee un sistema operativo Windows Server el cual ofrece almacenamiento de tipo relacional (SQL Azure) y no relacional (table storage, blobs, queues).
A su vez, en la modalidad IaaS (Infrastructure as a Service) pueden realizarse modificaciones al sistema operativo, servidor de aplicaciones y otras configuraciones de infraestructura. Un ejemplo de esto es la plataforma Amazon Web Services, la cual ofrece máquinas virtuales de Linux, Windows y permite establecer el servidor de aplicaciones a usar (ej: Tomcat, Jetty).
A nivel de persistencia, los grandes volúmenes a manipular por una aplicación social pueden ser controlados usando mecanismos de almacenamiento distribuido y no relacional, tales como MongoDB (base de datos de tipo NoSQL) y Table Storage de Windows Azure. A su vez, existen soluciones complementarias como Memcached, la cual permite agregar una capa de caché distribuida que almacena y recupera objetos serializados en memoria RAM, disminuyendo así el acceso a los repositorios persistentes cuyo acceso es generalmente más lento y caro.
Con respecto a la capa de integración a redes sociales, cada una de estas redes provee un conjunto de APIs en distintos lenguajes para poder interactuar desde aplicaciones hechas por terceros. Facebook provee una SDK oficial para programar en Javascript, PHP y dispositivos móviles (iOS y Android). Junto a esto, redes sociales como Orkut y Hi5 utilizan la API de la especificación OpenSocial para acceder a sus datos y funcionalidades mediante Javascript.
Finalmente, la capa de análisis de datos puede implementarse usando el servicio Google Analytics, el cual permite definir una serie de métricas y categorías que se van nutriendo de información a través de llamadas HTTP enviadas desde el front-end o back-end. En caso que se desee una solución más específica para capturar eventos de redes sociales existe el servicio ofrecido por Kontagent, el cual permite registrar invitaciones, publicaciones y datos demográficos entre otros.

Conclusión

En este artículo hemos echado un vistazo de alto nivel a las distintas consideraciones y aspectos técnicos que hay que tener en cuenta al construir un juego social. Espero que te sea de ayuda en la construcción de tu próximo juego.

Bio

Milko Madariaga es Ingeniero en Computación y Magíster en Ciencias de la Universidad de Chile. Actualmente se desempeña como CTO de Syrenaica Inc., empresa chilena desarrolladora de videojuegos sociales y móviles. mmadaria@syrenaica.com