Introducción
Remake (parcial) de Fruity Frank... 25 - Añadiendo efectos sonoros.
Detalles
Vamos a añadir sonidos al juego, para que tenga "algo más de vida". Para conseguirlo, crearemos una nueva clase "Sonido", que se apoyará en "Sdl_mixer", ocultando los detalles de esta librería.
Por ejemplo, el constructor se encargará de cargar un fichero de música:
/// Constructor a partir de un nombre de fichero
public Sonido(string nombreFichero)
{
punteroInterno = SdlMixer.Mix_LoadMUS(nombreFichero);
}Y tendremos funciones para reproducir un sonido una vez (por ejemplo, cuando muere un enemigo, o nuestro personaje, o cuando recogemos una fruta), así como para reproducir un sonido de forma continua (para la música de fondo):
/// Reproducir una vez
public void Reproducir1()
{
SdlMixer.Mix_PlayMusic(punteroInterno, 1);
}
/// Reproducir continuo (musica de fondo)
public void ReproducirFondo()
{
SdlMixer.Mix_PlayMusic(punteroInterno, -1);
} También necesitamos otra función que permita dejar de reproducir sonidos:
/// Interrumpir toda la reproducción de sonido
public void Interrumpir()
{
SdlMixer.Mix_HaltMusic();
} Así, cada nivel tendrá una música de fondo. Esta música se declara en la clase "Nivel" genérica:
public class Nivel
{
protected Sonido miMusicaFondo;
...En la clase "Nivel" prepararemos también las funciones para reproducir su música de fondo o para detenerla, ambas basadas en las posibilidades de la clase "Sonido":
public void ReproducirMusica()
{
if (miMusicaFondo != null)
miMusicaFondo.ReproducirFondo();
}
public void PararMusica()
{
if (miMusicaFondo != null)
miMusicaFondo.Interrumpir();
}Y esa música se cargará en el constructor de cada "clase hija" (porque cada nivel concreto tendrá su propia música de fondo):
public class Nivel1: Nivel
{
const byte NUMENEMIGOS = 3;
public Nivel1()
{
byte i;
miMapa = new Mapa1();
miMusicaFondo = new Sonido("sonidos\\fruity-nivel1.mp3");
enemigos = new Enemigo[NUMENEMIGOS];
...En el juego, tendremos una música adicional para el cambio de nivel (todavía no habrá sonido al recoger frutas ni al morir personajes), y entonces, cuando se cambio de nivel, deberemos parar la música del nivel anterior, reproducir el sonido de cambio de nivel, y a continuación comenzar a reproducir la música de fondo del nuevo nivel, así:
public void SiguienteNivel()
{
miNivel.PararMusica();
musicaNuevoNivel.Reproducir1();
...
if (numeroNivel % 3 == 1)
miNivel = new Nivel1();
...
miNivel.ReproducirMusica(); Sólo falta crear la carpeta sonidos, y guardar en ella los sonidos que nos interesan, que habremos capturado previamente del juego original, o bien habremos creado nosotros mismos. También deberemos modificar los ficheros "BAT" encargados de compilar todos los fuentes, para que incluyan la nueva clase "Sonido".