Aprende programación






16 ene 2011

Primer prototipo para eficiencia en desarrollo de juegos Android con buscaminas de ejemplo

Buenas,

En el anterior post, comenté los perjuicios en el desarrollo que ví desarrollando directamente con el SDK. Para ello comenté la posibilidad de hacer la aplicación con frames y luego cambiando una clase poderla portar a Android. Pues bién, aquí hay un pequeño prototipo experimental con unos pequeños métodos que habrá que ir incrementado con el tiempo.

Lo he llamado adaptador de juegos android ya que en realidad se basa en que hay que extender una clase y no utilizar directamente lo que dispone Android, si no unos métodos que hacen de adaptador al SDK. Además viene de ejemplo el juego del buscaminas, que es bastante sencillo de desarrollar.

En el framework adaptador este hay que extender la clase JuegoAdaptador para poder pintar o extender eventos. Es muy importante el orden alfabético de los métodos ya que si inician por pintarXXXX es que se plasma algo sobre las ventanas. Si pone eventoXXXX es que es un evento del usuario.

Los eventos implementados son:
public void eventoInicializar(); //Al iniciar la aplicacion
public void eventoPausa(); //Al pulsar pausa (de momento no es posible).
public void eventoFinalizar(); //Al finalizar la aplicacion
public void eventoTick(); //Hilo que sirve para animar la aplicación. Por defecto se ejecuta cada 100ms.
public void eventoPintar(int orientacion); //Se está solicitando pintar en pantalla. La variable orientación indica si está en 0 vertical, 1 horizontal. Sin embargo, para que no esteis haciendo if hay una funcion getValor(orientacion,20,30) donde devuelve 20 si está vertical o 30 en horizontal. Así solo teneis que pintar todo 1 vez.
public void eventoTocarPantalla(int orientacion, int x, int y); //Se ejecuta cuando se hace click sobre la pantalla.
public Serializable eventoEstadoCapturar(); //Para persistencia y grabación en "video". Si se guardan los datos en una clase Serializable hacer snapshot de la partida e incluso grabarla y poderla rebobinar. Aquí se solicitan los datos serializables.
public void eventoEstadoReestablecer(Serializable s); //Para lo mismo. Aquí se solicita modificar los datos.



Monitor de grabación.
Una cosa muy interesante es estar jugando y si ves algún fallo poder ver que está pasando. Para ello hay una ventana adicional que permite visualizar los métodos get del modelo Serializable e incluso rebobinar a un estado anterior. También permite guardar el estado actual en disco duro para seguir otro día. Mi recomendación es ejecutarlo en modo depuración pero para comprobar las variables utilizar este frame de visualización ya que en un videojuego hay muchas iteraciones.

Ejemplo buscaminas.
Para que veais como funciona, he preparado un buscaminas ya que es relativamente fácil de hacer. Ya lo iremos complicando poco a poco. Para ello, he aplicado el JuegoAdaptador con JuegoAdaptadorTablero que permite la visualización de tableros NxM de manera que cada número va asociado a una imagen.

¿Donde conseguir el programa?.
Aún me falta hacer una lista de distribución y un portal para quien quiera participar. Si es que no tengo tiempo. Para que vayais probandolo lo teneis por SVN en google code y para quien quiera bajarlo sin SVN lo he subido a Mediafire.

https://code.google.com/p/adaptador-de-juegos-android/
http://www.mediafire.com/?xs35doxzo9lgw08

Vuestras sugerencias son bienvenidas.
Comentar que aún no está la clase que interaciona con Android. Este es un primer paso para recibir críticas. Hay cosas que están premeditadas como la utilización de español para hacer un API (ya lo explicaré en otro momento), pero ahora mismo se me habrán pasado miles de cosas y faltan muchas cosas por desarrollar. Vuestras ideas serán bienvenidas.

Poco a poco iré dando de alta a más sitios para que sea más colaborativo. De momento, las sugerencias podeis hacerlas en este post.

La licencia que le he puesto es Apache 2.0 para que sea lo más permisiva posible.

Resumen de todo este rollo.
La idea es crear métodos en la clase JuegoAdaptador que aislen donde se están volcando datos en un frame o en un screen de Android. Extendiendo esta clase se debería poderse utilizar tanto para Java Frames como para Android cambiando la implementación de la clase JuegoAdaptador. De momento, es algo básico pero se irán añadiendo funcionalidades poco a poco (sonido, eventos de arrastrar, etc).

Actualización 18-01-2011:
Subida una nueva versión con correcciones.


2 comentarios:

  1. Hola Jorge, buen articulo. Yo estoy como tu intentando encontrar un momento para empezar con esto de android pero no lo encuentro, espero que estos "tutoriales me animen"

    ResponderEliminar
  2. Hola Jorge, comentarte que me parece genial tu idea. Yo como tu, andaba buscando una manera de abstraerme de si desarrollaba directamente para Android o para Aplicaciones de Desktop, pero ya viendo lo que tienes hecho, creo que voy a partir de aqui. Espero que crees el foro, para poder intercambiar ideas del tema, Animo...

    ResponderEliminar