2 de marzo de 2008

Freeway en Camino

Ya hace una semana y unos días que comenzamos con el desarrollo del juego. Hasta ahora viene bien, sin inconvenientes. En la siguiente imagen muestro la humilde fachada de nuestro pequeño juego:



La solución está compuesta por el momento de tres proyectos:

FreeWayXNA (Windows Game): es el proyecto de inicio donde se encuentra la clase que deriva de Microsoft.Xna.Framework.Game.


MakanaInput (Windows Library): Es un proyecto que contiene un Game Component que sirve para administrar las entradas de teclado y del gamepad de Xbox360.


MakanaMenu (Windows Library): Este es otro proyecto que contiene un Drawable Game Component que sirve para renderizar y darle funcionalidad al menú del juego.

Obviamente que ambos Game Components están desarrollados para ser reutilizados en futuros proyectos.

El proyecto MakanaInput tiene una clase llamada InputGameComponent utilizada para tal fin. Esta clase administras dos clases que se llaman Teclado y GamePad que guardan el estado actual y el estado previo de ambos dispositivos de entrada. A su vez tienen métodos dedicados a consultar los valores de las teclas, botones y palancas de ambos dispositivos. Probablemente cuando el componente este maduro voy a dedicarle una nota en el blog.

Por otro lado, el proyecto MakanaMenu fue concebido con la idea de generar un Drawable Game Component fácil de reutilizar y creo que en mayor o menor medida se ha logrado. Existen dos clases, una se llama MenuAdm que es el DGC y la otra clase se llama MenuItem. Cada MenuItem tiene una lista de MenuItems y la idea es generar como un árbol de menú agregando a cada MenuItem los ítems que contiene. Para dar una idea de esto, copio una porción simplificada del código que inicializa todos los menús:

/* MENU PRINCIPAL */
MenuItem menuPrincipal = new MenuItem("Menu Principal", TipoMenuItem.Contenedor);
menuPrincipal.MenuPadre = menuPrincipal;

/* ITEM 1.1 - NUEVO JUEGO */
MenuItemPersonajes menuNuevoJuego = new MenuItemPersonajes(menuPrincipal, "Nuevo Juego", TipoMenuItem.Contenedor);
menuPrincipal.Submenus.Add(menuNuevoJuego);

/* ITEM 1.2 - OPCIONES */
MenuItem menuOpciones = new MenuItem(menuPrincipal, "Opciones", TipoMenuItem.Contenedor);
menuPrincipal.Submenus.Add(menuOpciones);

/* ITEM 1.3 - SALIR */
MenuItem menuSalir = new MenuItem(menuPrincipal, "Salir", TipoMenuItem.Salir);
menuPrincipal.Submenus.Add(menuSalir);

/* ITEM 1.2.1 - TIEMPO DE JUEGO */
MenuItem menuTiempoJuego = new MenuItem(menuOpciones, "Tiempo de Juego", TipoMenuItem.Lista);
menuOpciones.Submenus.Add(menuTiempoJuego);

/* ITEM 1.2.2 - SONIDO */
MenuItem menuSonido = new MenuItem(menuOpciones, "Sonido", TipoMenuItem.SiNo);
menuOpciones.Submenus.Add(menuSonido);

/* ITEM 1.2.3 - MUSICA */
MenuItem menuMusica = new MenuItem(menuOpciones, "Musica", TipoMenuItem.SiNo);
menuOpciones.Submenus.Add(menuMusica);

/* ITEM 1.2.4 - VOLVER */
MenuItem menuVolver = new MenuItem(menuOpciones, "Volver", TipoMenuItem.Volver);
menuOpciones.Submenus.Add(menuVolver);


// Creo el menu principal
menuAdm = new MenuAdm(this, spriteBatch, spriteFont);
menuAdm.MenuPrincipal = menuPrincipal;
menuAdm.MenuActual = menuPrincipal;



Cada grupo de código se basa en crear el MenuItem y agregarlo a la lista del menú padre que lo contiene. De esta forma, por ejemplo, el menú “Sonido” se incluye adentro del menú “Opciones” con esta línea: menuOpciones.Submenus.Add(menuSonido);
Vale aclarar que cada MenuItem tiene un tipo de menú y este es asignado en el último parámetro del constructor. Sin embargo para el menú de nuevo juego utilizamos la clase MenuItemPersonaje la cual no pertenece al proyecto MakanaMenu sino que es propia del proyecto FreeWayXNA y deriva de ManuItem para implementar las cuestiones especificas de ese menú. Bueno, no voy a interiorizar mas en esto porque voy a terminar eliminando el escaso publico del blog :P

Entre las opciones se encuentra la cantidad de minutos que se va a jugar, si debe tener sonido y música. Al seleccionar cada uno de los ítems, la opción va cambiando (en el caso del sonido y la música, el semáforo cambia entre rojo y verde)

Finalmente al seleccionar nuevo juego, aparece la pantalla para elegir el animal que cada jugador utilizará. Las opciones disponibles son: VACA, CABALO, CERDO y TORTUGA.




Actualmente el juego maneja los game status así que si presionamos el ENTER el juego “comienza” (en realidad, por ahora solo aparece la pantalla de fondo) y al tocar ESC se vuelve al menú con el juego pausado.

Bueno, por ahora es todo, en la próxima entrega tendremos el juego terminado.

Freeway XNA !

La práctica hace al maestro, decían por ahí, y en base a eso decidí comenzar a desarrollar un juego básico para festejar que ya he terminado de leer los 11 primeros capítulos del libro de XNA donde se incluía entre otras cosas todas las cuestiones que tienen que ver con 2D.

Después de mucho pensar alguna idea sencilla decidí por hacer algo parecido a un juego viejo hecho para la Atari 2600 que se llamó Freeway. Este juego, hecho por los amigos de Activision, nació el mismo año que nací yo y se trata de dos animalitos que deben cruzar una calle apestada de autos. Cuando un auto colisiona con el animal, este es arrojado hacia atrás y queda “inconciente” sin poder moverse una fracción de segundo. Cada jugador comanda uno de los animalitos y al terminar el tiempo, el que haya cruzado mas veces gana. La calle ocupa toda la pantalla, es tan ancha como la 9 de Julio pero sin las plazoletas en el medio. Les adjunto una imagen de este sencillo juego corriendo en el emulador Stella:





En cuanto al desarrollo, obviamente lo voy a hacer en XNA, en 2D con las imágenes que va a crear Ana. El jugador va a poder elegir entre cuatro animales que tendrán diferentes características entre las que enumero a continuación:

  • Tamaño

  • Velocidad

  • Peso

  • Reacción

Los dos primeros se explican solos. El peso tiene que ver con la distancia en que un auto te arroja hacia atrás cuando te atropella. La reacción esta ligada con el tiempo en que el animal se queda tirado luego de ser arrollado hasta que el jugador puede volver a controlarlo. En cuanto a los autos, se moverán en diferentes velocidades pero no tendrán mayor I.A. que esa(bue, es decir, no tendrán I.A. :P). Se va poder jugar con teclado y/o con el gamepad de Xbox360.

Bueno, eso es todo, no deberíamos tardar mas de 2 semanas en hacerlo, vamos a ver que sale de todo esto.