Programacion

Juan Mellado, 10 Abril, 2008 - 19:29

IndielibLoover publicó ayer un post en el foro de Stratos anunciando la salida de Indielib, un motor pensado para ayudar a los desarrolladores a programar juegos 2D muy rápidamente. Totalmente gratuíto, incluso para aplicaciones comerciales. Está escrito en C++, se entrega en forma de dos librerías para Microsoft Visual C++ 6 y 2008, y viene acompañado con un manual con toda la documentación en formatos HTML y PDF. El SDK contiene como bonus los ejecutables y fuentes de 19 tutoriales completos.

Técnicamente comentar que se apoya en SDL, DevIL y Direct3D. Esto último hace que sólo funcione bajo Windows, pero aporta la ventaja de que se utiliza la aceleración por hardware para realizar todas las operaciones gráficas. Gracias a ello también permite cargar modelos 3D para mostrarlos sobre fondos bidimensionales, algo habitual en algunas aventuras gráficas por ejemplo. En general tiene una lista bastante importante de características soportadas (features): interfaz sencillo, traslaciones, rotaciones, escalados, efectos, animaciones, colisiones, scrolls, varios tipos de cámaras, varios viewports simultáneos, ... y así un largo etcétera. En los ejecutables de las demos que vienen ya precompiladas pueden verse muchas de estas características en funcionamiento, aunque se echa en falta un jueguecillo.

En el post del anuncio pedía algo de promoción en el ciberespacio, así que sirva este post para la causa.

Juan Mellado, 16 Febrero, 2008 - 15:12

La "estadística del pollo" dice que desarrollo un juego nuevo cada tres meses, una productividad que más que quisiera para sí más de uno, incluido yo mismo. El problema de esa estadística es que también dice que si tú te comes dos pollos y yo no me como ninguno, entonces "de media" nos comemos un pollo cada uno, aunque la realidad es que uno se harta y otro se queda a dos velas.

De los últimos 9 juegos que he publicado en la web en estos últimos 27 meses, hay algunos que me llevaron un par de días de desarrollo y otros que los he ido dilantando durante semanas, tomando horas sueltas de aquí y de allá. Lo interesante desde mi punto de vista es que puedo hacer un repaso desde la distancia y observar mi evolución como programador de videojuegos amateur.

Para los juegos de la web decidí usar JavaScript, así que para ir familarizándome con el lenguaje empecé con lo básico, un Arkanoid del cual llegué a hacer tres versiones. Comenzar escribiendo un clon de algún juego sencillo (Adivinar un Número, Ahorcado, Tetris, ...) es lo que siempre se recomienda cuando se está empezando, y no creo que sea un mal consejo, aunque yo creo que llevo demasiado tiempo siguiéndolo.

Después de ese primer juego fueron cayendo otros. Un Mahjong donde empezaba a usar gráficos estáticos, aunque no tenía ningún tipo de variación sobre lo básico, ni puntuación, ni tiempo. Colors, un juego de emparejamiento de colores que hacía uso de un algoritmo recursivo fundamental dentro del género. Un Solitario donde tuve que lidiar con el drag and drop, y empezar a pelearme con las incompatibilidades entre distintas plataformas y navegadores. Un Sudoku donde puse a prueba el rendimiento del backtracing en un navegador. Discovery, un punto de inflexión en el que me reafirmé en mi condición de "coder" prácticamente nulo como "designer". Buscaminas, un entrenimiento como cualquier otro para pasar un frío fin de semana. Videopoker, un juego hecho para reaprovechar material gráfico y buscar formas sencillas de encontrar la mejor jugada posible. Y por último Confetti, posiblemente el más elaborado de todos ellos, tanto interna como externamente.

En mi último juego me he esmerado un poco más que de costumbre en el acabado y he tratado de ser un poco más original que de costumbre. Dos detalles:

- El marcador con la puntuación originalmente iba a ser un simple y discreto texto estático, pero a medida que trabajaba en el código me dí cuenta que el único objetivo del juego era conseguir sumar más puntos que en la partida anterior, así que decidí darle más protagonismo. El resultado fue un marcador bastante grande, visible de un sólo y fugaz vistazo. Para mejorarlo un poco y hacerlo más atractivo visualmente decidí que cada número apareciera desplazado verticalmente de forma aleatoria uno o dos pixels. Un cambio pequeño pero que queda muy bien, ya que le quita rigidez a la puntuación y le da un poco de vida. No contento con eso decidí que debía tener algún tipo animación, así que hice que la puntuación fuera subiendo gradualmente en vez de de un sólo golpe. Queda muy bien cuando termina la partida y se puede ver la puntuación subiendo todavía.

- El contador de tiempo en un principio tenía que haber sido la clásica barra que fuera subiendo hasta alcanzar su tope, pero después de echar un vistazo a algunos juegos comerciales (en plan "casual") me fijé que normalmente tenían algún tipo de detalle diferenciador y decidí cambiarlo. En un principio pensé en un termómetro, pero luego me pregunté si podría implementar un sistema de partículas y simular un reloj de arena. Después de muchas pruebas lo conseguí. Incluso llegué a hacer uno con varios colores, pero era tan espectacular que distraía la atención sobre el juego y decidí no ponerlo. Curiosamente al final esto me llevó tanto tiempo que casi me hace abandonar la idea de hacer el juego completo, uno de los de los problemas de no tener diseño ni planificación previa (¿o debería decir "ventajas" cuando uno se es amateur?)

A partir de aquí no tengo muy claro hacía donde mirar y qué camino seguir, y es que creo que siempre trabajaré mejor por encargo que por iniciativa propia. En mi trabajo siempre me he encontrado cómodo con esa presión, buscando soluciones a problemas ajenos en un tiempo adecuado y con la calidad necesaria.

Juan Mellado, 10 Febrero, 2008 - 12:49

A partir de ahora Confetti estará también disponible como un gadget de Google.



Add to Google

Juan Mellado, 2 Febrero, 2008 - 20:08

Acabo de subir un nuevo juego terminado a la web con el nombre de Confetti. Por la imagen adjunta creo que resultará claro entrever el género al que pertenece.

Siguiendo la costumbre de los últimos juegos, este también está hecho en JavaScript y puede jugarse directamente desde el navegador. Sólo lo he probado en Firefox 2 e Internet Explorer 6 bajo Windows XP, en otras configuraciones puede no visualizarse correctamente. En los próximos días trataré de hablar un poco más de él.

Juan Mellado, 31 Octubre, 2007 - 19:59

PacManUna de las cosas que no me gustan de los portales de juegos online son las facilidades que dan algunos de ellos para hacer trampas a los jugadores. Sobre todo cuando se trata de videojuegos de "habilidad". Cuando son juegos de "azar" entonces la cosa cambia y es la casa la que tiene más oportunidades de hacerlas, aunque en mi opinión ningún portal medianamente serio las hace.

La semana pasada estuve visitando algunos portales para ver que tipo de juegos ofrecían. Y no me refiero a webs que se dedican a recopilar miles de juegos hechos en flash, sino sitios que ofrecen unos pocos juegos escogidos, normalmente con la idea de poder jugarlos con otros usuarios conectados a la red. Pocos eran de acceso público, la mayoría pedían registro, y en algunos incluso se podía apostar con dinero de verdad.

Los casinos online los descarté enseguida, pues a excepción de algunos juegos de cartas, las posibilidades de ganar se basan en la suerte y no en la habilidad de quienes juegan. Ningún tipo de truco de los que puede encontrarse por Internet es válido, en los casinos todo depende de la suerte. Apostar el doble de la jugada anterior con la intención de recuperarse de las pérdidas, o contar cartas por ejemplo, no tiene sentido, porque las mesas tienen un límite máximo de apuesta, y las cartas se barajan en cada mano.

Los portales de videojuegos por su parte ofrecen la posibilidad de jugar a juegos en los que sí prima la habilidad del usuario por encima de la suerte, aunque este sea también un factor importante. Después de un rato me estuve fijando en algunas tablas de puntuación y llegué a la conclusión de que no podian ser reales. Siempre cabe la posibilidad de que lo sean, pero la verdad es que algunas me parecieron absolutamente irreales. Partiendo de esta premisa estuve analizando un par de días un juego a ver si podía llegar a alguna conclusión. Concretamente utilice como referencia uno de tipo Bejeweled (el intercambiador).

En este tipo de juego lo único que hay que hacer es juntar tres o más fichas de un mismo tipo a base de intercambiarlas. Uno de los factores clave es "ver" las combinaciones a la mayor velocidad posible. E identificar patrones es algo que un ordenador puede hacer facilmente, basta con que compare pixel a pixel los gráficos de unas posiciones con otras. Sin embargo, un análisis más detallado me permitió ver que eso era algo que ya se había tenido en cuenta. Ocurrió que me dí cuenta de que cada gráfico de forma individual no se dibujaba siempre igual, a pesar de representar el mismo tipo de pieza. A veces se desplazaban unos pocos píxeles hacia arriba, otras veces hacia un lado, ... Un cambio lo suficientemente leve como para que el jugador no notase la diferencia. Y la cosa no acababa ahí, sino que los colores también cambiaban ligeramente entre pieza y pieza, aunque fueran de un mismo tipo. Los tonos eran un poco más apagados o fuertes de pieza en pieza, e incluso el antialiasing se había hecho de una forma distinta. Es decir, se habían tomado precauciones para evitar que un simple análisis pixel a pixel fuera efectivo.

Sin embargo, aunque loable, es fácil pensar que ese sistema no puede resistirse a un análisis más serio. Los sistemas de reconocimiento de imágenes y OCRs hoy en día son lo suficientemente potentes como para reconocer figuras en diversas posiciones e incluso con ligeras variaciones. De hecho, mi primera idea fue que un detector de bordes podría ser suficiente como para identificar los patrones de cada tipo de ficha. Pero ni siquiera sería necesario llegar a eso, una simple descomposición por componentes de los colores (RGB) bastaría para identificarlas de forma fiable 100%. Se sumarían por separado las componentes de una batería de píxeles distribuidos regularmente sobre cada pieza, y los tres resultados identificarían a cada pieza individualmente. Comparar una pieza con otra sería tan fácil como comparar los tres resultados de una pieza con los tres resultados de otra dentro de un margen de error.

Como resulta fácil de suponer, absolutamente todos los portales prohiben en su página de condiciones de uso la utilización de cualquier tipo de software (o hardware como pantallas táctiles) que proporcionen ventaja a un jugador frente al resto. E incluso en algunos juegos online, a otra escala, como el popular World of Warcraft, incluyen dentro de sus condiciones de uso la posibilidad de instalar software que inspeccione los programas de nuestro ordenador a la busca de cualquier tipo de software que ofrezca algún tipo de ventaja.