SOMBRAENCOUNTER.COM

sombra2eternity log stream
Inicio Proyectos

  • |

"Estáis frescos! Pues ahora pienso montar mi propio juego de Magic, con casinos y furcias, es más, paso de las Magic."

Con este pequeño homenaje a Bender Doblador Rodríguez (sí, soy fan de Futurama) me gustaría introducir el proyecto en el que he estado trabajando estas dos últimas semanas. Como siempre que trato de hablar de cualquier cosa en concreto intentaré irme por las ramas primero ;-)

En cierta ocasión anduve desarrollando un pequeño código que implementaba parte del protocolo MSNP13 en PHP y conseguí que bailara a través de una interfaz web por medio de AJAX, hacer eficiente aquella mezcla de lenguajes de programación fue todo un reto, pero aprendí muchas cosas acerca de protocolos de comunicación y sincronización de clientes. Desde entonces muchos de los proyectos que he llevado a cabo se han beneficiado de la experiencia adquirida.

Un protocolo de mensajería un tanto especial

Un par de semanas atrás me dio por continuar una pequeña porción de código que tenía aparcada, se trataba de un borrador sobre un protocolo de comunicación muy parecido a los usados en clientes de mensajería. Dicho borrador aunque funcional, tenía un fallo, estaba diseñado en torno a bases de datos MySQL, era el momento de proporcionarle mayor velocidad. Tardé algunas horas en modernizar toda la arquitectura y hacerla funcionar de nuevo, esta vez bajo SQLITE3. Una vez terminado todo el proceso de conversión, empecé a modificar el protocolo para comportarse de forma diferente, más concretamente, según las reglas del juego de cartas intercambiables Magic: The Gathering.

El editor de mazos no es gran cosa de momento, pero cumple su función perfectamente. Es la aplicación web a través de la cual crearemos una combinación de cartas determinada. Llega el momento de enfrentarnos a nuestros amigos!!.

Magic: The Gathering es un juego en el cual encarnas a un caminante de planos, estas entidades poseen la capacidad de invocar criaturas y efectos para infligir daño a su oponente y así poder ganar el combate. Las cartas que nos van tocando son nuestros hechizos, debemos jugarlos siempre de la manera más inteligente posible porque muchos de ellos pueden combinarse dando lugar a efectos mucho más potentes.

Cualquiera que haya jugado a Magic comprenderá la dificultad que supone hacer interactuar varias de sus normas. Por ello no pretendo tener en cuenta todos y cada uno de los detalles del juego, habrá cartas que no podrán ser soportadas. Conseguir que el algoritmo contemple ciertos aspectos del juego sin una penalización importante de rendimiento ha sido todo un logro, reconozco que en ciertas partes del desarrollo me di bastantes cabezazos preguntándome por qué no habría elegido sincronizar un monopoly (Y desde entonces está también en mis planes). En la actualidad voy añadiendo nuevos efectos día a día e introduciendo más cartas en el entorno. He conseguido llegar a una versión jugable bastante decente, con ciertas salvedades, por supuesto.

Realmente no es nada descabellado sincronizar clientes a través de un protocolo de mensajería, de hecho, Google montó la plataforma Wave sobre jabber. En la imagen podemos observar una partida de prueba, el jugador ha declarado atacantes y el adversario ha decidido bloquear.

El problema de la sincronización AJAX

La arquitectura procura aprovechar cada envío de información realizado por el usuario para traerse las actualizaciones en la partida y la cadencia de las peticiones varía dependiendo de la necesidad, sin embargo, es imposible no notar cierto desfase.

Cabe mencionar que cualquier sincronización en AJAX se consigue haciendo peticiones recursivas en busca de novedades en el servidor, la w3 ha propuesto un borrador que describe la manera de implementar un socket mediante javascript, espero que llegue a buen fin. En definitiva, si no quieres matar tu servidor a base de peticiones, debes establecer un tiempo prudencial entre las mismas. Estos intervalos (y estoy hablando de intervalos menores a 1 minuto) consiguen que una partida se pueda prolongar bastante si a los usuarios se les ofrece la posibilidad de responder todas y cada una de las acciones del contrincante. Debido a esta problemática y sintiéndolo mucho, se han excluido algunos conceptos tradicionales de Magic, quizá algún día cuando me pueda permitir mi propio datacenter recupere parte de esta funcionalidad.

Espero que os guste y podamos echar unas partidas muy pronto, tranquilos, esta vez no elegiré el color azul ;-)

Enlaces

Podéis encontrar la página del proyecto aquí: WhaleCard
De momento haré tracking de errores y peticiones via Facebook: WhaleCard - trading card game

Déjanos un comentario

Cualquier comentario cuyo contenido esté formado por un lenguaje inadecuado, así como mensajes ofensivos o spam, será eliminado y/o modificado. Para informar de un abuso o de un comentario de estas características, pulse aquí.
Aceptar
Acerca de / Estadísticas de visitas / Contacto sombra2eternity • 2008-2010
El contenido está bajo una licencia CC, por lo que puedes usarlo libremente para fines no comerciales siempre y cuando indiques el origen.