Nethope, comenzando…
Febrero terminó, desde el punto de vista universitario, siendo momento de retomar todos esos proyectos que comentaba en el post del año nuevo… En cuanto a los proyectos personales, he decidido continuar con NetHope, el juego tipo arkanoid.
Antes de meterme con el apartado trigonométrico (el rebote de la bola en función de velocidad y ángulo de impacto), voy a comentar la implementación previa a ello.
Niveles
La información y los archivos necesarios en cada nivel, están en subcarpetas, dentro de una carpeta general llamada levels. El archivo .xml, los emoticonos, las paredes y el resto de gráficos del nivel 1, por ejemplo, estarán en levels/level_1. Allí, habrá un level_1.xml y un level_1.png, siendo este último el fondo del nivel. Con esta estructura, puedo cargar a través de una función genérica cualquier nivel, pasando como parámetro el número de nivel y concatenando adecuadamente para tener las rutas de los archivos.
El archivo .xml, por el momento, sólo contiene los datos de la ubicación de los sprites en pantalla (smilies y paredes) y, más concretamente, las coordenadas x e y, el nombre del gráfico y su estado. En el juego es importante distinguir qué tipo de elemento es cada sprite, es decir, no es lo mismo que se trate de un smilie simple (que desaparezca al primer impacto) que uno doble (desaparece al recibir el segundo impacto) o que una pared que nunca va a destruirse. Es por ello que la variable estado ahora cobra sentido. (estado = 0, si el smilie ya ha desaparecido, 1, 2, 3…. resto de smilies, y 9 si se trata de una pared indestructible).
La bola y la barra
Estos elementos también son sprites, pero los trato de forma diferente a los anteriores comentados, entre otras cosas, por ser elementos comunes a todo el juego. Al comenzar el nivel, bola y barra se situan en el centro de la pantalla. La variable miembro i_state del sprite bola, valdrá entonces 0, indicando con ello que está en reposo. Mientras esté en este estado, si la barra se mueve horizontalmente, la bola seguirá ese movimiento horizontal. Pero… y al lanzar la bola, qué pasará?
Para calcular la trayectoria que describirá la bola, hay que tener en cuenta varios factores, como el movimiento de la barra. Es decir, si la barra se mueve hacia la derecha y en ese momento se lanza la bola… ésta tomará un impulso tal que la lleve a moverse de izquierda a derecha, hasta que choque con algo. De igual modo, cuando la bola impacte con ese algo, debemos tener en cuenta de donde viene, para posteriormente sacar el ángulo de entrada y calcular la trayectoria de salida. Por este motivo, creé unas variables que guardan la posición anterior de barra y bola. Es decir, cada vez que se mueven, guardo su posición y al entrar de nuevo en el game loop, ya tengo cual era su ubicación en la vuelta anterior del bucle.
En el próximo post sobre NetHope, contaré con más detalle el cálculo de todo esto, pues aún no está implementado del todo y algunos cambios son posibles.
Dejo una captura.