Estructura de un juego de Facebook: ¿cómo está hecho? ¿cuál es la tecnología detrás?

Ejemplos de juegos sociales

Los juegos: Farmville, de Zynga; Pirates Ahoy, de Playfish; y Social City, de Playdom.

En este artículo hablaremos acerca de la estructura tecnológica de los juegos en red, al estilo de los juegos sociales o los MMORPG. El objetivo es disipar las dudas de aquellos que quieran hacer un juego social o un MMORPG como primer proyecto (respuesta corta: no lo hagan), y las de aquellos que ya tienen idea de cómo hacer juegos, pero no saben cómo planificar o cómo formar un equipo para un proyecto de esta naturaleza. En el artículo supondremos que se está haciendo un trabajo de diseño del juego, el proceso que establece las reglas del mismo para los jugadores, y que es en gran parte responsable del alcance de la estructura tecnológica que se vaya a emplear para el juego. Para los conocedores, simplificaré algunos aspectos, pero recuerden que esto es un artículo para principiantes :-P .

Un juego de esta naturaleza necesita 3 aplicaciones: cliente, servidor y base de datos. El cliente es el programa que suelen descargar y utilizar los jugadores, el que presenta los visuales y la interfaz para que los jugadores hagan sus acciones. Esas acciones se mandan a través de la red al servidor, el cual es el verdadero encargado de procesar las acciones y aplicar las reglas del juego. La base de datos es donde se guardan los datos de los jugadores, como su información básica, y el estado actual del juego. Las 3 aplicaciones son separadas, y pueden ser llevadas a cabo por distintas personas de un equipo, pero las 3 se complementan entre sí.

Si tomásemos como ejemplo, a Farmville, de Zynga, el cliente es una película SWF (o Flash, para los no entendidos) que muestra a los jugadores el estado de su terreno, a su avatar, y permite hacer click sobre algún terreno o elemento del juego. El servidor es el que dicta cuánto tiempo tarda el terreno en desarrollarse una vez sembrado, y cuánto tiempo tarda la cosecha fresca. Y finalmente en la base de datos se guardan los datos del jugador y del estado de su partida, para todas las veces que el jugador ingrese al juego. El siguiente diagrama resume lo anterior:

El resto del artículo explicará cada uno de estos elementos y dará algunos ejemplos de tecnologías con los que se implementan.

El cliente, o frontend

El cliente es lo que solemos ver como jugadores. Podemos descargarlo para ejecutarlo en la computadora, o jugarlo a través del navegador. En esta parte se implementa la interfaz de los jugadores, se muestran los gráficos, sonidos y mensajes de información que el servidor envía. Al mismo tiempo, el cliente no suele implementar las reglas del juego, sino que de parte del jugador elabora peticiones al servidor de las acciones que hace éste, y muestra la respuesta del servidor.

En el cliente también se implementan algunas reglas (por ejemplo, en Farmville se impide hacer click en un terreno para cosecharlo si la cosecha aún no está lista), pero el equipo desarrollador se suele asegurar de que sea el servidor el que tenga la última palabra. Esto se debe a que en el pasado las aplicaciones clientes han podido ser modificadas por entusiastas y conocedores para saltarse las reglas o aprovechar alguna información extra que provenga del servidor para hacer trampa. El mejor ejemplo de esto es que en la época de popularidad de Counter-Strike, salieron modificaciones que permitían apuntar automáticamente al enemigo o ver su posición detrás de las paredes. El cómo prevenir esto cae muy fuera del alcance de este artículo, y lo expreso sólo para informar.

¿Qué tipo de tecnologías se utilizan para implementar el cliente?

Dependiendo del conocimiento del equipo o de los objetivos del juego. Actualmente se suele caer en tres campos no exclusivos: descargable, en el navegador, y móviles.

Los descargables suelen ser aquellos juegos que tenemos que descargar en su totalidad en nuestra PC o Mac, y luego instalar en la computadora. Hacer un juego descargable tiene la principal desventaja de la distribución (convencer a alguien para que descargue nuestro juego no es fácil), y el coste de tener que hacer implementaciones distintas para cada plataforma (Windows, Mac, Linux) pero ofrece muchísima flexibilidad y libertad para implementar juegos complejos. Ejemplos de descargables: World of Warcraft, Minecraft o Terraria. Se suelen utilizar lenguajes como C++, Java, Python, en conjunto con las librerías que ofrecen las plataformas para implementar la interfaz gráfica. Existen algunos lenguajes que son multi-plataforma, como Python, Java, y Actionscript con AIR, que permiten desarrollar una sola vez y desplegar para cualquier plataforma.

Los que se juegan en el navegador se suelen implementar en una plataforma que se ejecuta en el navegador, descargando previamente una adición que permite su ejecución. Por ejemplo, para jugar juegos en Flash hace falta descargarse el Flash Player para el navegador que utilices, y en el caso de Java, el JRE de Java. También existen juegos que no necesitan esta adición, y el servidor devuelve texto formateado en HTML, que los jugadores leen y en consecuencia hacen click sobre un enlace o botón que esté en el documento (ejemplo, Chore Wars).

Los móviles tienen su apartado especial. Muchos teléfonos celulares disponen de un navegador, por lo que son capaces de jugar juegos en HTML como los que mencionamos anteriormente. Pero también estos celulares disponen de plataformas sobre las que se pueden desarrollar juegos. Al igual que los descargables, hay que bajarlos e instalarlos en el celular, con la diferencia de que hay que tener ciertas consideraciones en su desarrollo (su poder de procesamiento no es el mismo, el teclado entre celulares cambia) y su distribución (el Apple App Store tiene restricciones sobre lo que puedes subir a su tienda, y en general en todos tienes que pagar un precio para subir tu software).

El servidor, o backend

El servidor es otra aplicación que tiene dos tareas: 1) comunicarse con el cliente, 2) validar las reglas del juego. La plataforma sobre la que se hace el servidor no tiene que ser la misma sobre la que se hace el cliente, y por eso se pueden encargar de ambos dos equipos distintos. El servidor es una aplicación que corre constantemente en una máquina esperando peticiones de los clientes. Cuando recibe una petición del cliente, traduce la petición al formato de datos que pueda entender, valida que la petición sea correcta, y devuelve una respuesta.

En ese sentido, el servidor no conoce sobre la interfaz que va a ver el jugador. El servidor no suele saber de qué mensajes mostrar, ni animaciones, sino que suele ser un proyecto bastante separado de ello. Aún así, en otra parte del servidor (o en otra computadora) se suelen guardar los elementos que necesite el cliente para ejecutarse, sobretodo en el caso de clientes que se corren en el navegador que necesitan cargar sus recursos desde la red.

Existe la posibilidad de que fuese tan exitoso de que se considere implementar otros clientes en más de una plataforma. En este caso habría que extender la primera tarea de la aplicación, comunicarse con el cliente, para que sea capaz de hablar con cada tipo de cliente, ya que cada uno tiene maneras distintas de comunicarse.

 

¿Qué tipo de tecnologías se utilizan para implementar el servidor?

Existen muchos lenguajes de programación sobre los que se pueden escribir aplicaciones pa servidores, y para cada lenguaje existe un servidor.

En el caso del lenguaje Java tenemos una implementación estándar de servidor, que es Tomcat, y varios frameworks sobre los cuales se construyen las aplicaciones, como Struts o Spring. En el caso del lenguaje Python tenemos frameworks como Django o web2py. En el caso de PHP tenemos CakePHP o KumbiaPHP. Existen otros lenguajes capacitados para escribir aplicaciones para servidores como Ruby.

Hago un repaso ligero de todos estos nombres porque es difícil realmente que un servidor para un juego sea un buen primer proyecto para aprender a utilizarlos, por lo que no tiene mucho sentido que te diga cuál plataforma es mejor.

La base de datos

La base de datos permite almacenar, obtener y relacionar información, de tal manera que se puede consultar sobre ella para obtener datos agregados. Cuando hablamos de esto, hablamos de un software de gestión de base de datos, compuesto por un servidor (¡otro!) que guarda la información, y una librería de código que utiliza nuestro servidor para comunicarse con ese servidor de base de datos. Existen varios tipos de bases de datos, pero el más utilizado de todos (y el que implementan las tecnologías más populares) es la base de datos relacional, que emplea tablas donde se ponen registros de los objetos que se guardan, y estas tablas pueden hacer referencia a otras, para poder unir la información y posteriormente poder consultarla.

¿Qué tipo de tecnologías se utilizan para las bases de datos?

Por lo general, nadie implementa un software de base de datos (muy fuera del alcance de un proyecto suficientemente grande como lo es un juego que tratamos en este artículo). El software que se adopta depende de muchos factores, como costo del software, facilidades de administración, informes de desempeño y demás características.

Entre las opciones más populares tenemos MySQL, PostgreSQL, Oracle, sin orden de preferencias. MySQL y PostgreSQL tienen la ventaja de que se dispone de una versión libre descargable, ideal para empresas con poco capital monetario. En mi experiencia, PostgreSQL ha sido más robusto para aguantar un fuerte uso que MySQL, pero la experiencia varía entre los equipos de desarrollo (ej. Facebook utiliza MySQL como base de datos). Oracle es una base de datos comercial, con una licencia de un costo inmanejable para pequeñas empresas, pero es de las más mencionadas en el campo de las bases de datos.

Conclusión

Terminado el paseo por todas los componentes necesarios para implementar un juego social, me queda decir que el objetivo de todo esto no es disuadir a aquellos que estén interesados en hacer un juego de este tipo. Quizás si debo remarcar que entre los novatos existe un gran convencimiento de que un proyecto así se puede llevar a cabo a la primera, además de un convencimiento de que el hecho de que estos proyectos atraigan tanta atención (y dinero) demuestra que no vale la pena hacer otro tipo de proyecto. Cada juego atrae a un distinto tipo de público, y así seguirá siendo (afortunadamente) a medida que las tecnologías pasen. Si no se convencen, revisen este cómic de xkcd.

A un equipo de programadores experimentados que esté interesado en embarcarse en un proyecto así le recomendaría que primero conociera las diversas tecnologías que van a utilizar para implementar el juego. Probablemente unos juegos pequeños que demuestren el uso de cada una.

The Complot busca programadores en C#, XNA o Unity

Les dejo la siguiente información de The Complot, un estudio que está fundando Juan Campa:
Estamos en búsqueda de un programador para trabajar en el desarrollo de un videojuego de alta calidad para plataformas móviles (iPhone, Android, Windows Phone). Si estás interesado en comenzar una carrera en la industria de los videojuegos esta puede ser una oportunidad para ti.

El candidato ideal debe tener las siguientes características:

  • Disponibilidad de tiempo completo (40 horas semanales) para trabajar en el este de Caracas (cerca de la Univ. Metropolitana).
  • Experiencia con *alguna* de estas tecnologías:
    • C#
    • XNA
    • Unity
  • Conocimiento *general* de algunas area de programación relacionadas a videojuegos, por ejemplo:
    • Algebra 3D (vectores, matrices, posición, rotación, etc).
    • Comportamientos modelados con máquinas de estados.
    • Conocimiento sobre assets relevantes al área (modelos 3D, texturas, efectos de sonido) y cómo funcionan en videojuegos.
    • Rendering en tiempo real.
  • Conocimiento general de ingeniería de software:
    • Patrones de diseño.
    • Diseño de software OOP (orientado a objetos).
  • Excelentes habilidades de debugging.
  • Proactivo, responsable y con muchas ganas de aprender todo lo relacionado con esta industria.

Puntos extra:

  • Cualquier habilidad relacionada será considerada. Por ejemplo:
    • Haber participado en algún proyecto relacionado.
    • Conocimiento del funcionamiento de lenguajes con memoria manejada, en especial C#.
    • Conocer bien las herramientas de debugging, en especial las de Visual Studio.
  • Ser un experto en porting de juegos de XNA a Unity!!

Responsabilidades:

Para el proyecto actual, estará encargado de hacer y ejecutar un plan
de porting de un juego de XNA (C#) a Unity Pro (También en C#) en
coordinación con un equipo de trabajo. Otras posibilidades para
proyectos futuros.

Algunos beneficios de trabajar en The Complot y en videojuegos en general:

  • Horario de trabajo flexible.
  • Ambiente de trabajo casual y entretenido.
  • Oportunidad de desarrollar ideas creativas e innovadoras.
  • Trabajar siempre con tecnología de punta.
  • Todos quieren saber de tu trabajo.
  • Desarrollas habilidades avanzadas en muchas disciplinas de la computación: computación gráfica, redes, lenguajes, interfaces, IA, ingeniería de software, sistemas operativos, discretas, física y en especial matemáticas.

Interesado? Escribe a: trabajar@thecomplot.com con tu CV e información explicando porque eres el candidato ideal. Lo más importante es que tengas ganas de trabajar y aprender bastante. El proyecto arrancará en las próxima semanas así que muevelo ;)

Si no estás disponible ahorita pero igual te gustaría trabajar en un futuro envíanos tu información que también nos interesa.

Publicados Nivel 7 y Nivel 8 en español del curso Game Design Concepts

Tengo el placer de anunciar la publicación de los Niveles 7 y 8 de la traducción al español del curso online Game Design Concepts, escrito por Ian Schreiber en el verano de 2009 para todos los interesados en aprender sobre el diseño de juegos a través de la elaboración de prototipos de juegos de mesa.

Inicié el trabajo de traducción poco tiempo después de iniciado el curso, pero múltiples ocupaciones me impidieron seguir con el trabajo. Estoy ahora continuando con el trabajo de traducir 20 artículos grandes, por lo que la velocidad es un tanto lenta. Pueden conseguir los artículos traducidos al español en http://gamedesignconcepts.pbworks.com/Spanish.

Un poco de historia de Venezuela: Callaos y Asociados C.A.

Frank Di Loreto me manda este enlace del Wayback Machine a la página de Callaos y Asociados C.A.. Según él, esta es una de las primeras compañías venezolanas en producir videojuegos, aunque la dirección del Wayback revela el año 1999, y MediaTech, que es el desarrollador de Umi, funciona desde 1995. Fue desarrollado y colocado en jugueterías, y promocionado tanto acá como en el exterior.

En el backup de esta página se pueden ver al menos 4 juegos: The Bedroom of Luis, Luis Rescuing his Sister, Luis and Math, y Luis Learning to Read. Juegos educativos dirigidos al segmento infantil.

Ojalá que otros segmentos de la historia queden preservados por allí :-)

El anuncio de Fundación Filantropía y su primera acción

Como en algún momento lo expresé, la ley de videojuegos recientemente aprobada por la Asamblea Nacional de Venezuela fue aprobada de una forma muy apresurada, dejando de lado algo tan fundamental como un criterio objetivo y pre-establecido acerca de lo que es un juego bélico, y por lo tanto propenso a ser utilizado por cualquier funcionario que quisiese aplicar la ley interpretándola de la manera que más le conviniese. La Alcaldía del Municipio Libertador ha sido una de las primeras instituciones que ha decidido aplicar esta ley, visitando establecimientos comerciales formales e informales, decomisando de manera ilegal videojuegos que ellos consideren que violan la ley (Nota de AVN).

En este sentido, Emgelbert Farfán, Darwin Cárdenas, Jorge Padua y mi persona decidimos formalizar lo que hicimos en un primer momento al atender la primera y única consulta pública que se hizo a la mencionada ley: una institución que de alguna manera produzca información sobre la categorización de los videojuegos en base a su contenido, alejando a esta ley del término “prohibición” y llevándola a una “regulación de contenidos”.

Dicha formalización se llama Fundación Universal para la Información y Protección al Usuario de Video Juegos, FUIPUV – Filantropía, constituida legalmente y con rango de acción institucional. Su página, actualmente en construcción, es http://www.fundacionfilantropia.org, con una página en Facebook que ha servido para canalizar las denuncias de los comerciantes, y un twitter, @f_filantropia, para aprovechar este canal de comunicación directo. Dos de las primeras tareas de la fundación han sido: a) canalizar las denuncias de los comerciantes a los que injusta e ilegalmente se les ha decomisado su mercancía, b) producir un esquema de clasificación del software para informar al público interesado acerca del contenido de los videojuegos comerciales.

Una de las primeras acciones de la fundación también ha sido interceder por los comerciantes informales. Se dio el caso el día de anteayer que un representante de la fundación tuvo la oportunidad de asistir a uno de estos operativos de decomiso en pleno progreso en el Mercado de La Hoyada y entrar en contacto con el Consejo Municipal de Derechos del Niño, Niña y del Adolescente (CMDNA), organismo encargado de realizar los decomisos acompañados de la fuerza pública. La fundación tuvo una fructífera reunión con el consejo y se logró acordar la devolución de los videojuegos decomisados a estos comerciantes.

Los dejo con la reproducción del texto que publicó la fundación en su página en Facebook. Para mayor información, pueden dirigirse a la página de la Fundación Filantropía, o a mi persona.

El día de hoy representantes del Consejo Municipal de Derechos del Niño, Niña y del Adolescente (CMDNA) en la persona de la asesora jurídica Dra Auriestela Reverón y la Ing Alejandra Garrido cordialmente invitaron a los integrantes de la Cooperativa Zadiba278 del Mercado de la Hoyada y a la Fundación para la Información y Protección de Usuarios de Videojuegos Filantropía para buscar soluciones al problema de los decomisos que se han estado llevando a cabo.

Dentro de los tópicos abordados se señalaron y orientaron acerca de las leyes, artículos y los funcionarios específicos que estarían facultados para la realización de las fiscalizaciones, la Dra Auriestela Reverón señaló enfáticamente “en primera instancia serian los representantes del Consejo Municipal de Derechos del Niño, Niña y del Adolescente (CMDNA) o el INDEPABIS quienes de manera preventiva y en salvaguarda de los derechos de los menores de edad realizarían las fiscalizaciones, de resto cualquier otro factor dígase Guardia Nacional, Policía, Bombero, Fiscal de Transito o elemento inescrupuloso se encuentra fuera del marco de la ley“.

Los representantes del Mercado de la Hoyada y la Fundación Filantropía expresaron su preocupación acerca del posible foco de irregularidades que se están presentando y a futuro podrían agudizarse en torno a la interpretación subjetiva de los decomisos amparados en la ley de Prohibición de Vídeo Juegos Bélicos y Juguetes Bélicos a los representantes de la CMDNA, quienes recalcaron el papel de corresponsabilidad de todos los factores que deben manifestar de forma activa su conformidad o inconformidad con respecto a las leyes ante las instancias adecuadas, de manera tal que se generen los aportes que puedan aclarar los elementos difusos que se pueden encontrar en la ley.

Cabe destacar el buen espíritu al dialogo y acción demostrado por parte de la Dra Auriestela Reverón la cual manifestó sensibilidad ante el tema, además de un criterio bastante progresista y de colaboración para aprender y empaparse del tema, conversó con los representantes de la Fundación Filantropía a quienes invitó a formar parte de la institución, trabajar en conjunto y concretamente saber cuáles eran sus demandas puntuales a lo que señalaron la necesidad imperiosa de la promulgación de una tabla de clasificación de contenidos para regular el uso y acceso de los menores de edad a los vídeo juegos bélicos más NO PROHIBIRLO A LOS ADULTOS, lo cual fue apoyado por los representantes, comerciantes del Mercado de la Hoyada y la Dra Auriestela.

Luego del acuerdo se procedió a comprometerse a no permitir a los comerciantes la venta o acceso de los juegos considerados bélicos o violentos que no se correspondan a su rango de edad a los menores de edad e inclusive someter a revisión el material incautado y restituirlo a quienes se le hayan sustraído con un criterio subjetivo dentro del mercado si era efectivamente demostrado.

La Fundación Filantropía quiere extender unas palabras de reconocimiento a los integrantes de la Cooperativa Zadiba278 del Mercado de la Hoyada quienes demostraron un espíritu verdaderamente gallardo ante la adversidad y dieron una lección de dignidad, compromiso y defensa de una causa justa, respetando con conciencia y sentido crítico el enfoque errado y las consecuencias negativas de la mala interpretación de los elementos difusos en la Ley de vídeo juegos Bélicos y Juguetes Bélicos e igualmente creyeron y apoyan la labor de la Fundación que en todo momento los represento.

Reconocimiento especial a Raul Gallardo, Nancy Barsorte, Coromoto Sánchez, Karely Sulbaran y a Todos los comerciantes afectados y no afectados.

– Escrito por Fundación Filatropía el 14 de junio de 2010.

Actas de la reunión con la CMDNA

Actas de la reunión con la CMDNA

Actas de la reunión con la CMDNA