lotu — Un framework para desarrollo de juegos en Ruby

[singlepic=484,60,,,left]Pues aquí estoy con un nuevo proyecto. :)

Un framework para desarrollar juegos en Ruby.

Los antecedentes

Después de terminar mi clon de Tetris llamado rubytris, decidí darme a la tarea de implementar otro clon de los juegos de antaño —¡y uno de mis favoritos!: Missile Command.

Debo comentar que a medio camino se me ocurrió utilizar comportamientos de direccíón (steering behaviors) para modelar el movimiento de los misiles —y algunos otras entidades— para una experiencia más envolvente.

Así, le puse pausa al Missile Command y comencé a desarrollar otro proyecto llamado ruby_steering_behaviors que cuenta ya con los comportamientos necesarios para utilizarlo en mi juego nuevo).

Durante la implementación de esos dos proyectos comencé a desarrollar abstracciones y clases útiles que no tenía en rubytris (mi primer juego):

  • Estados de juego
    Auxiliado por una máquina de estados es mucho más sencillo implementar las diversas pantallas de juego, entradas (splash screens) y menús.
  • Manejador de recursos
    Para un fácil acceso a las imágenes, fuentes y sonidos.
  • Manejador de eventos
    Un sistema de disparo y captación de eventos.
  • Funciones auxiliares
    Para facilitar el despliegue de texto, imágenes, sonidos.
  • Clases útiles
    Un contador de cuadros por segundo (FPS counter).
    Un visor (viewport) para poder tener espacios virtuales de tamaños arbitrarios, con acercamientos, alejamientos y control de entrada.

Desgraciadamente el trabajo y otras actividades de mi vida cotidiana me absorbieron demasiado y dejé ambos proyectos abandonados por un rato.

Pero, ahora que logré hacerme de un tiempecito decidí retomarlos y me pregunté:
¿por qué no desarrollar un framework que incluya todo eso (más lo que salga)? ¿podría ser provechoso para alguien más? Creo que sí.

Y así nació lotu.

lotu

lotu es un framework naciente que está basado en gosu, una biblioteca para creación de juegos en 2D.

Siendo gosu una biblioteca, te provee únicamente con las funciones básicas para crear un juego y nada más.

lotu, por otro lado se encargará de hacer el proceso de creación de juegos simple e intuitivo. gosu provee las herramientas y lotu los medios. gosu da el con qué y lotu provee el cómo.

Sin un marco de trabajo (framework), eres totalmente libre de organizar tu código de la forma que más te plazca, pero corres el riesgo de caer en el caos completo.

Un framework impone ciertas convenciones, te enseña un estilo de trabajo. Si las convenciones ayudan a desarrollar de una manera más rápida y menos compleja tu proyecto, entonces podemos decir que el framework es exitoso.

Como experimento he decidido desarrollar a la par mi juego nuevo y lotu. Espero que de esta manera ambos se retroalimenten y así obtener un mejor resultado.

lotu gem

Nunca antes había hecho una gema en Ruby. Se me hacía un proceso esotérico y extraño (lotu es mi primera gema ¡que emoción!). :D

Pero jeweler realmente te la pone fácil, demasiado diría yo jeje. Si no me crees, checa este video:
Gemcutter & Jeweler

La gema la puedes instalar con:

1
sudo gem install lotu

Sin embargo si quieres ir al día con el desarrollo te aconsejo que lo cheques en github.

Otros frameworks

¿Por qué no usar un framework existente como chingu?

La razón principal es aprendizaje. ;)

¡Es hora de programar! :D

Mi próximo videojuego

[singlepic=610,60,,,left]

Que bien se siente cuando ves de manera palpable la evolución de un proyecto. Cuando éste pasa de un estado burdo a refinado. Por ejemplo compara las siguientes imágenes:

 
[singlepic=633,,150,,left] [singlepic=645,,150,,left]

A mi me agrada, ¿y a tí? :)
Ahora me encuentro haciendo el clón de otro de mis juegos favoritos de antaño: Missile Command.

El código que estoy usando cómo base, también ha evolucionado mucho.

Ya no tengo un solo archivo con todo el código ahí. No tendría chiste repetir el modo de programar que utilicé en el Tetris. Ahora cuento con un manejador de pantallas, un menú de inicio y música. Todas las clases separadas en sus respectivos archivos.

He estado completamente metido en ello, esa es la razón por la que no he podido publicar tanto como quisiera en el blog.

Tengo dos buenas noticias: Una es que ya comencé a darle a la lógica del videojuego, la otra es que si hay gente interesada, puedo escribir un artículo detallando el diseño que empleé para el administrador de pantallas.

El administrador que hice es bastante versátil; te permite hacer splash screens —este proyecto incluye dos, una de Amenoské (los que hicieron la rola) y una mía (debo hacerme propaganda ¿no? ¿si no quién?)— de una manera muy sencilla e hilarlas con las otras pantallas del juego (menús y gameplay).

A lo mejor te preguntarás ¿y para que tanto diseño y archivos para un simple Missile Command?
La respuesta es sencilla: no sólo voy a hacer un Missile Command. Me estoy preparando para lo que viene. Aún estoy ante la disyuntiva de hacer un Pac-Man (jejeje) o un Gauntlet. ¿Qué opinas?

Cómo instalar Ruby/Gosu en Ubuntu 9.04 Jaunty Jackalope

[singlepic=484,60,,,left]

Gosu es un framework escrito en C++ para desarrollar juegos 2D. Cuenta con bindings para Ruby, y eso, es lo que nos interesa — tee-hee!
Además lo necesitas, si quieres probar el clón de Tetris que escribí. :)

Instalación de dependencias para Ruby 1.8 y Ruby 1.9

Para instalar la gema Gosu, necesitarás los siguientes paquetes:

  • g++
  • libgl1-mesa-dev
  • libpango1.0-dev
  • libboost-dev
  • libopenal-dev
  • libsndfile-dev
  • libxdamage-dev
  • libsdl-ttf2.0-dev
  • libfreeimage3
  • libfreeimage-dev

Copia y pega el siguiente comando en tu terminal:

1
sudo apt-get install g++ libgl1-mesa-dev libpango1.0-dev libboost-dev libopenal-dev libsndfile-dev libxdamage-dev libsdl-ttf2.0-dev libfreeimage3 libfreeimage-dev ruby1.8-dev ruby1.9.1-dev

Instalación de la gema

Ahora instala Gosu como gema con el comando:

1
sudo gem install gosu

Con los paquetes mencionados arriba ya instalados, la gema se compilará sin problemas.

Instalación de dependencias adicionales para el soporte de OpenGL en algunos ejemplos

En algunos ejemplos del framework Chingu requieren que la gema ruby-opengl esté disponible. Instálala tecleando esto en tu terminal:

1
2
sudo apt-get install libgl1-mesa-dri libglu1-mesa freeglut3 libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev
sudo gem install ruby-opengl

Recursos

The Gosu Wiki

Para usar la versión C++ de Gosu y/o instalarlo en otras plataformas, checa:
GettingStartedOnLinux
GettingStartedOnOsx
GettingStartedOnWindows

Metris — Mi clón de Tetris en Ruby y Gosu

[singlepic=642,200,,,left]

El proyecto ahora se llama rubytris y lo puedes encontrar en github:
http://github.com/lobo-tuerto/rubytris

¡Por fin terminé una versión presentable de mi clón de Tetris desarrollado en Ruby con ayuda del framework Gosu!

Le puse Me-tris, nombrado así, para no tener problemas con la ley (sí, se que el nombre apesta… jeje). :D

Es altamente configurable, puedes modificar cosas como el ancho y alto del tablero (en bloques), el tamaño de los bloques (en pixeles), el espaciado entre ellos, la velocidad de caída de las piezas (en milisegundos), la velocidad de repetición cuando un jugador deja presionada una tecla (para moverse a los lados, rotar, caer).

También puedes definir nuevas figuras fácilmente e indicar si tienen un pivote (un punto alrededor del cual giran las piezas). Ya no tienes que definir las piezas y cada una de sus rotaciones por separado, las figuras pueden tener un tamaño arbitrario.

El juego está (muy) básicamente completo. Lleva la puntuación del jugador y termina (tee-hee!).
Fue escrito en 3 días, 2 de ellos seguidos y uno más un par de días después.

El código está muy comentado, pero si te surge alguna duda, puedes preguntar con confianza. Tiene también, mucho campo para mejorarse (por ejemplo una pantalla de entrada).

Aquí les dejo unos screenshots que muestran como luce el juego al modificar los parámetros de configuración:
[singlepic=643,100,,,left] [singlepic=644,100,,,left] [singlepic=645,100,,,left] [singlepic=646,100,,,left]

Descargar

Aquí tienen la descarga, es un archivo .rb y varios .ogg y .png.
Metris – Mi clon de tetris escrito en Ruby con Gosu (68.7KiB)

A continuación pongo el código en su totalidad.

Les recomiendo primero checar el RubyTutorial, ahí explican las cuestiones básicas de Gosu.

Continuar leyendo

Programación de videojuegos con Gosu en Ruby

[singlepic=610,120,,,left]

Aún recuerdo cuando me saltaba la barda de la primara para ir a las maquinitas a la hora del recreo. Buenos tiempos aquellos del Atari 2600.

Desde siempre me han llamado la atención los videojuegos — y fui un jugador asiduo y vago, cabe mencionar jeje.

Y también desde siempre quise aprender a programar videojuegos. Aprendí a programar, pero conforme pasaron los años cada vez tenía menos tiempo para mis proyectos personales.

Estos días, sin embargo, he andado un poco libre y me puse a investigar como andaba el rollo de la programación de juegos en Ruby, dado que es el lenguaje que he adoptado a últimas fechas — y que además adoro como no tienen idea. :)

Entonces, andando por la red me enteré de un framework llamado Gosu (sitio en Google Code | Wiki del proyecto).

Gosu, es una biblioteca multiplataforma para desarrollo de juegos en 2D. Tiene soporte para C++ y Ruby. Sumamente sencillo de agarrar y usar.

¿No me creen? échenle un ojo al tutorial de Ruby (o al de C++). En este otro sitio pueden descargar el tutorial de Gosu y Ruby en PDF en español: Un videojuego sencillo con Gosu y Ruby

Bueno, la noticia es que me puse a programar un Tetris, comencé ayer a las 4pm aprox, y ya casi lo termino. Me falta comentar el código y refactorizar algunas cosas. En cuanto lo tenga listo (más al rato o mañana) lo pondré por si están interesados en incursionar en el game development. :)

Aquí les dejo un screenshot jejeje:
[singlepic=633,400,,,center]

De hecho, estaba pensando en hacer un remake de varios juegos antiguos — sólo por diversión y conocimiento. Y después me gustaría hacer algo más elaborado, como Gauntlet — ¡le traigo un chingo de ganas desde hace un buen!

¿Qué tal, cómo ven?
¿Algún otro interesado en programar juegos en Ruby?

Tutorial #4 de Irrlicht: Cómo controlar con el teclado un nodo de escena

[singlepic=537,140,,,left]

Ah pasado un rato desde el último tutorial que escribí para Irrlicht. Cuestiones de tiempo no me habían permitido seguir jugando con este motor gráfico.

Pero aquí seguimos, al pie del cañón. :)
Ok, manos a la obra.

Pueden seguir el tutorial para descargar y compilar la versión en desarrollo de Irrlicht, o simplemente descargar de sourceforge la más reciente liberada al público (la 1.5 al momento de escribir este tutorial).

Objetivo

Controlar un nodo de escena con el teclado.

Tutoriales pasados

Tutorial #1 de Irrlicht: Cómo compilar e instalar Irrlicht en Ubuntu 8.04
Tutorial #2 de Irrlicht: Cómo configurar NetBeans 6.1 y hacer un Hola Mundo
Tutorial #3 de Irrlicht: Cómo agregar y manipular nodos de escena en Irrlicht

Juego de Talento: Take #2

[singlepic=538,110,,,left]

La pensé un poco, no quería —como dicen— restregar sal en la herida, pero que chingaos, ya son varias las personas que me han comentado recientemente lo que está sucediendo con Juego de Talento.

Basta ver el último comentario publicado por GameIndustrySavior en el artículo anterior. Pongo la versión TL;DR a continuación para tu comodidad:

Juego de Talento no es mas que una escusa que utilizaron los organizadores para promover su centro CECAVIM, el cual despues de analizar la curricula presenta programas de estudio basura que no ayudaran a nadie a realmente entrar a la industria, solo enriquecer a los dueños de estas iniciativas. Del jurado del “Virtuality” solo hay 1 persona que realmente se dedica al desarrollo de videojuegos, los demas son personas que no tienen que ver con la industria a excepcion de la chica de gamers que creo yo si aporta a la parte del gameplay. Por dios hasta hay un contador publico! que contador publico es incluido en un concurso de desarrollo de videojuegos como juez!??? Todo esto demuestra que JDT es otra iniciativa que en vez de ayudar a la apenas naciente industria, la perjudica.

Un contador público → LOL?
Continuar leyendo

Tutorial #3 de Irrlicht: Cómo agregar y manipular nodos de escena en Irrlicht

[singlepic=537,140,,,left]

Todo proyecto comienza por un principio —ya sé, bonito aforismo. :P

Por fin haremos algo divertido —uy si, cuánto— con Irrlicht: vamos a agregar algunos objetos a nuestro espacio 3D y los mostraremos en pantalla. :)

Véanlo como poner a un actor en escena, es el primer paso para lograr una obra, en nuestro caso ¡un videojuego!

Los videojuegos en su parte más fundamental están compuestos por entidades, ya saben, siempre nos referimos a ellas como el personaje principal (o monito), los monstruos, las balas, las pociones, el castillo, etc.

Nosotros comenzaremos agregando cubos a nuestra aplicación, esperando que en un futuro no muy lejano se conviertan en temibles criaturas a las cuales podamos derrotar a base de espadazos o balazos —o algo así. :D

Objetivo

En este tutorial aprenderemos a agregar nodos de escena y a modificarles las siguientes propiedades:

  • Posición
  • Escala
  • Rotación

Tutoriales pasados

Tutorial #1 de Irrlicht: Cómo compilar e instalar Irrlicht en Ubuntu 8.04
Tutorial #2 de Irrlicht: Cómo configurar NetBeans 6.1 y hacer un Hola Mundo