miércoles, 10 de enero de 2018

C++ Snake Dev Guide Part 2


Segunda parte: Movimiento y Comida



Ya teniendo una idea de como armar la serpiente y el tablero, nos falta pensar como va a ser el movimiento de la serpiente y como esta va a crecer cada vez que come.

Lo que primero hice fue dibujar el tablero en pantalla, dibujando cuadrados y luego llenar la pantalla con los cuadrados, cambiando los colores de los cuadrados del borde para que se distingan y sean el borde del mapa.

Para la serpiente, lo que hice fue simplemente recorrer la estructura que la contenía (una lista, un array, etc) y por cada eslabón de la serpiente, dibujar en la pantalla un cuadrado (de color verde) en la posición x e y en donde estaba esa parte de la serpiente.

El movimiento de la serpiente es simplemente recorrer de nuevo el array que contiene la serpiente y por cada eslabón avanzar hacia una casilla correspondiente dependiendo la dirección indica la casilla actual. Esto se puede hacer fácilmente con un switch y aprovechando el enum que mencioné en la parte 1.

Entonces por ejemplo, si la casilla [1][1] tiene dirección arriba, indicamos que este eslabón de la serpiente ahora está en la casilla [2][1] (contando de arriba para abajo en filas) haciendo algo del estilo "eslabón->posiciónY++". No debemos olvidarnos de dos cosas importantes: 
  • La cabeza tiene que marcar de nuevo la dirección nueva.
  • Hay que borrar la dirección de la casilla de la última parte de la serpiente.

Lo primero es porque, una vez que toda la serpiente se mueve, la cabeza tiene que seguir indicando la dirección que tiene que seguir el cuerpo. Si no, sería el equivalente a que en un tren en marcha, la locomotora se desenganche y frene, sabemos que si esto pasa, los vagones van a chocar y apilarse con la locomotora.

Para la comida podemos hacer algo muy simple. Declarar 2 variables de tipo int indicando la posición x e y de la comida. Darle un valor aleatorio a estas posiciones y luego, mostrarlo en el mapa con un color distinto.

Para saber si la serpiente comió o no la comida lo que podemos hacer es que en cada movimiento que pase, la cabeza de la serpiente pregunte "¿mi casilla siguiente es la posición x y la posición y de la comida?" si la respuesta es si, agregamos un eslabón a la serpiente (agregar un elemento al array o a la lista) y ahora le decimos que la cabeza esta en donde estaba la comida. De esta forma, la serpiente se "agrandó".

De esta forma ya tenemos una serpiente que se puede mover y crecer al comer.

En la tercer parte voy a explicar los detalles finales como cómo hacer para que se pueda mover de un borde de la pantalla a otra o saber si se mordió a si misma.

Hasta la próxima.

-L

No hay comentarios.:

Publicar un comentario