jueves, 11 de enero de 2018

C++ Snake Dev Guide Part 3

Tercera parte: movimiento en el mapa y Game Over



Última parte! Como mencioné antes, voy a dedicar esta parte para explicar en más detalle la lógica de cómo saber si el jugador perdió y además, cómo hacer para que la serpiente pueda salir por un borde del mapa y aparecer por otro.

Primero voy a explicar lo último que es más simple.

Si tenemos un tablero de 10 lugares, sabemos que podemos ir desde la posición 0 hasta la 9. Pero sabemos que en el juego Snake si pasamos la casilla 9, volvemos a estar en la casilla 0, como si hubiera un portal para la serpiente.

Esto se hace simplemente forzando la posición de la serpiente. Si la posición de la parte de la serpiente es mayor o igual a 9, que ahora sea 0. Esto va a obligar a el juego a mandar a la serpiente a un extremo si la serpiente se pasó por otro.

Para los bordes izquierdo y el inferior es el mismo truco, si la posición de la serpiente es menor o igual a cero, que se modifique a la posición (TAMAÑO_DE_MAPA - 1) para ir al extremo derecho o superior de la pantalla.

Hay que tener en cuenta que estas verificaciones debemos hacerlas después de que cada parte de la serpiente avanza. Es decir, primero una parte de la serpiente se mueve y luego se verifica si esta tiene que ir hacia otro extremo o no.

Ahora, el Game Over.

Podemos ignorar lo de más arriba y tener como otra condición que la serpiente no pueda tocar las paredes del mapa. 

En ambos casos, deberíamos tener un flag (una variable de tipo boolean) que nos indique si el jugador perdió o no. 

Para no tocar los bordes, tendríamos que verificar que si el jugador tocó alguno de los bordes, se active el flag (flag = true) y que se muestre la pantalla de Game Over.

El hecho de verificar si la serpiente se mordió a si misma son 3 líneas de código. Pero estas líneas puede que requieran un poquito de explicación.

Así es como se mueve la serpiente en todo momento:



Donde "H" es para la cabeza y "B" para el cuerpo. Podemos ver en la segunda imagen como se va armando el camino de la serpiente.

Ahora, lo más importante a notar es que las casillas que no están ocupadas por el cuerpo de la serpiente no tienen ninguna dirección. Osea que si una casilla tiene una dirección, es porque esta ocupada por una parte del cuerpo de la serpiente.

Entonces, si la cabeza de la serpiente entra en una casilla que ya tiene una dirección, esta se esta mordiendo a si misma. Esto nos va a servir como condición para activar nuestro flag y mandar al jugador a la pantalla de Game Over.

Desde acá hay todavía cosas que se pueden agregar. Como por ejemplo, un menú para jugar, un contador del puntaje, tiempo si es que queremos agregar esa funcionalidad, etc.

Yo no quise agregar más cosas para no complicar de más el proyecto. Pero si quieren, les recomiendo probar por su cuenta.

Acá termina esta guía para crear un clon del Snake. Espero que le haya servido a alguien para darse una idea de cómo arrancar a desarrollarlo o haber podido resolver alguna pregunta que alguien se haya hecho durante el desarrollo del juego.

Un saludo y hasta la próxima.

-L

No hay comentarios.:

Publicar un comentario