viernes, 20 de marzo de 2009

Nueva versión del Tetris

Hacemos un paréntesis en la programación del NSMB y vamos a presentar la última versión del Tetris.

Se ha creado un menú en la pantalla táctil, por lo que usaremos el stylus por primera vez en este blog. La imagen es la siguiente:



Posibilita la selección de tres tipos de juegos.

PALib controla cuando se pulsa en la pantalla táctil y devuelve las coordenadas (x, y) donde se ha pulsado.

if (Stylus.Held) {
    tipo_juego = obtener_tipo_juego(Stylus.X, Stylus.Y);

El Stylus.Held indica que se está pulsando en la pantalla y las coordenadas quedan en Stylus.X y en Stylus.Y. Ahora para saber si se ha pulsado un botón u otro se ha creado esta función:


u8 obtener_tipo_juego(s32 xStylus, s32 yStylus) {
if (pulsado_boton_con_stylus(xStylus, yStylus, 60, 37, 205, 79)) {
return JUEGO_MARATON;
} else if (pulsado_boton_con_stylus(xStylus, yStylus, 74, 83, 224, 125)) {
return JUEGO_EXPERTO;
} else if (pulsado_boton_con_stylus(xStylus, yStylus, 61, 133, 226, 170)) {
return JUEGO_SUPER_BLOQUES;
} else {
return 0;
}
}

bool pulsado_boton_con_stylus(s32 xStylus, s32 yStylus, s32 x1, s32 y1, s32 x2, s32 y2) {
return (xStylus > x1 && xStylus <> y1 && yStylus < y2);
}


Esta última función es la que uso en todos los proyectos. Sirve para saber si un punto (x, y) esta dentro de un rectángulo (x1, y1) - (x2, y2).
Los rectángulos los sacamos de la imagen, y aunque los botones estén un poco torcidos más o menos he trazado unos rectángulos y son esas coordenadas las que he usado:


El modo superbloques muestra fichas de distintas formas, posibilidad que nos da el haber creado las fichas como matrices de 4x4. Y tanto este modo como el experto van incrementando las velocidad a medida que se consigue aumentar la puntuación.

Veamos la función actualizar_puntuacion:


if (tipo_juego == JUEGO_EXPERTO || tipo_juego == JUEGO_SUPER_BLOQUES) {
if (nivel != puntos / 100) {
nivel = puntos / 100; velocidad -= nivel;
}
}

Cada cien puntos aumentamos la velocidad (o disminuimos el tiempo de espera).

Os dejo todo el código en el lugar habitual para que echéis un vistazo. Como siempre nos vemos en los comentarios.

Saludos

6 comentarios:

David Martínez Martínez dijo...

¿Y eso que te diste un respiro de Mario Bros? Muy interesante la nueva versión del Tetris. Si le pones Wifi, sería interesantísimo xD

¿Sabes si hay alguna manera de usar Wifi sin pasar por los sockets? Estos están bien si te tienes que comunicar con solo otra ds, pero si quisieras hacer un multijugador de 4 por ejemplo, es una locura...

¡Sigue así! Nos leemos.

Inigo dijo...

Buenas David

Como siempre gracias por tus comentarios. Nunca he usado la capacidad wifi, es una asignatura pendiente.

He notado que hay menos comentarios. No sé si será por utilizar objetos, aunque el número de visitas se mantiene, la gente no se anima a comentar.

David Martínez Martínez dijo...

Que eso no te desanime. Ten en cuenta, que un tutorial de estos es para que perdure, no para que la gente lo siga semana a semana.

Quizás ahora mismo no lo mire mucha gente, pero ahí está. Si mañana llega uno y dice, oye, quiero programar un tres en raya en la DS, pues aquí tiene tus tutoriales.

A mi me tienes ya como asiduo, eso no lo dudes. Espero que consigas terminar el Super Mario Bros, que una cosa es tener muchas ideas y otra cosa es aplicarlas y terminar proyectos, por propia experiencia lo digo.

¡Saludos!

Anónimo dijo...

INTERESANTE.
No obstante creo k habrias de poner mulijugador i despues diferentes campos.

Inigo dijo...

Ya sois varios lo que me comentáis el tema del multijugador.

Y ¿Cómo va eso del multijugador en el Tetris?

¿Y lo de diferentes campos? Que el juego empiece con fichas ya puesta?

Anónimo dijo...

EL MULTIJUGADOR SERIA K LOS DOS TUVIESEN K HACER UNA PARTIDA AL TETRIS I EL K OBTENIERA MAS PUNTUACIÓN GANARA.
ESTARIA BIEN K TABIEN UBIESEN OBJETOS K APAREZCAN SEGUN HAGAS LINEAS I FUESEN IMAJENES .GIF K PASSARAN A LA PANTALLA DE CONTRARIO PARA MOLESTAR.