Tag Archive for 'tetris'

lotu — Un framework para desarrollo de juegos en Ruby

ruby.jpg 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

Artículos relacionados:

Rubytris en GitHub

rubytris

Sólo para informarles que mi proyecto ya tiene un hogar en GitHub :D

Rubytris (¡con nuevo nombre!)

 
Este fin de semana refactoricé un buen de código, aunque visualmente no cambió mucho, por dentro es básicamente otro. :)

Si usan git y lo quieren probar, solo deben hacer un:

1
git clone git://github.com/lobo-tuerto/rubytris.git

El siguiente fin de semana le volveré a meter mano, creo que es una buena idea terminar bien este proyecto antes de saltarme a otro. ;)

Artículos relacionados:

Una manita de gato al clon de Tetris

lobo_tuerto

Al parecer el proyecto de los steering behaviors va para largo.

Por mientras, este fin de semana le daré una manita de gato a mi clon de Tetris, incluso le cambiaré el nombre y lo subiré a GitHub. Entre otras cosas quiero convertirlo en gema y separar el único archivo que contiene todas las clases en varios ficheros.

También traduciré los comentarios al inglés, y será el juego que mantendré de manera oficial.
El antiguo Metris se quedará en su artículo como un programa didáctico en español para quien lo quiera usar.

Comenzaré ahora mismo. :)

Actualización 2009-08-01 03:29am

La refactorización va viento en popa, también ya casi termino la traducción al inglés y la separación en varios archivos. :D

De paso modifiqué el algoritmo que obtenía los colores al azar de las piezas — ¡ya no más piezas oscuras que apenas se ven en el tablero ni piezas con colores desabridos!

¡Ah! y ya tengo el nuevo nombre… jojojo. :D

Artículos relacionados:

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

metris-1
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:
metris-2 metris-3 metris-4 metris-5

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.

Continue reading ‘Metris — Mi clón de Tetris en Ruby y Gosu’

Artículos relacionados:

Lobos en línea

De pata de lobo

Horizonte en el desierto 1/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007] Campo de trigo en una tarde nublada.
Neuenkirchen, Deutschland. [Mayo 2007] Campo de trigo en una tarde nublada.
Neuenkirchen, Deutschland. [Mayo 2007] Atardecer entre matorrales 2/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007] Atardecer entre matorrales 1/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007] Horizonte en el desierto 2/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007]

Qué estoy haciendo...

Posting tweet...

Powered by Twitter Tools

Mapa de visitas

Mira…

Calendario

septiembre 2010
L M X J V S D
« ago    
 12345
6789101112
13141516171819
20212223242526
27282930  

FireStats icon Con la potencia de FireStats