23. Enemigos que disparan: Marciano 7. (*)
El hecho de que los enemigos disparen no reviste una gran dificultad, pero sí supone algunos cambios:
- Al igual que en el disparo del personaje, cada disparo de un enemigo puede estar activo o inactivo.
- Si queremos que puedan disparar varios enemigos a la vez, necesitaremos un array de disparos, en vez de un único disparo.
- Al igual que hacíamos con el disparo del personaje, deberemos comprobar si hay alguna colisión para los disparos de los enemigos. En este caso, no nos importará si el disparo colisiona con un enemigo, sino con el personaje. En ese caso, habría que restar una vida (y terminar la partida al llegar a cero vidas).
- También podemos comprobar si hay colisiones entre el disparo del personaje y los disparos de los enemigos. Si dos disparos chocan, ambos desaparecen.
- Sólo queda un detalle: cómo aparecen los disparos. En el caso del disparo del personaje, es cuando pulsamos una tecla, pero para los enemigos, no hay tecla que pulsar, sino que deben aparecer al cabo de un cierto tiempo. Una forma sencilla de hacerlo es contando "fotogramas" de juego. Por ejemplo, es frecuente añadir una "pausa" al final de cada "pasada" por el bucle de juego, para que la velocidad del juego sea independiente del ordenador, y no vaya exageradamente rápido en ordenadores muy modernos. Así, para que nuestro juego se mueva a 25 fps (fotogramas por segundo), que es una velocidad suficiente para engañar al ojo humano, y dar sensación de movimiento continuo, podríamos añadir una pausa de 40 milisegundos al final de cada "pasada" (1 segundo / 25 fps = 40 milisegundos por fotograma). Así, si queremos que aparezca un disparo cada 2 segundos, habría que esperar 25 x 2 = 50 fotogramas antes de activar cada nuevo disparo.
- En la práctica, un disparo cada 2 segundos es "demasiado matemático", demasiado poco natural. Suele dar mejores resultados si la espera es un poco más aleatoria. Por ejemplo, podemos generar un número al azar entre 25 (un segundo) y 75 (tres segundos), y que esa sea la cantidad de fotogramas que hay que esperar antes de activar el siguiente disparo. Aun así, para afinar este tipo de valores, no hay más remedio que probarlos: quizá dos segundos parezca un número adecuado "sobre el papel", pero a la hora de probar el juego puede resultar demasiado rápido o demasiado lento, y habrá que terminar de afinarlo, cambiándolo por el valor que mejor se comporte, de forma que la dificultad del juego sea la correcta.
En principio, no voy a incluir ningún fuente que lo resuelva. Lo dejo propuesto como ejercicio para lo seguidores del curso. Eso sí, si alguien envía algún fuente que lo solucione, lo revisaré y lo publicaré.
En el siguiente apartado veremos la apariencia que suele tener un "bucle de juego" normal, y lo aplicaremos para imitar un juego clásico...