Sistema de sonido y sonidos random - Curso Pygame - Capítulo 17


Ejercicio resuelto

Lo primero en este capítulo es resolver el ejercicio del capítulo anterior.
Se trata de añadir un zfill a la variable puntuacion con el número de ceros que queremos.

Código

muestra_texto(pantalla,consolas,str(puntuacion).zfill(7), ROJO, 40, 700, 50)
Puntuaciones en Pygame

Para añadir audio al juego, lo primero para iniciarlo con el mixer de Pygame tal y como expliqué en el capítulo 6.

Código

pygame.mixer.init()

Una vez hecho podemos empezar a crear una lista de sonidos.
Tienes la opción de buscarlos por internet y cumplir las condiciones de uso del autor o puedes producirlos.

Hay un programa muy bueno para generar sonidos de 8 o 16 bits para videojuegos sobretodo retro.
Se llama sfxr y lo puedes descargar de forma gratuita desde su sitio web oficial haciendo click aquí.
En el vídeo puedes ver un poco su funcionamiento.

Los sonidos de Pygame, según su referencia pueden ser .wav sin comprimir y .ogg, no he probado con otros formatos.
Puesto que sfxr guarda los sonidos en formato wav, no hay problema.

sfxr creador de sonidos gratis para videojuegos

Para añadir un sonido, debes guardarlo en una variable y poner esto:

Código

laser = pygame.mixer.Sound('sonidos/laser.wav')

Una vez cargado, para que el sonido se reproduzca en el momento del disparo, le pones en el método disparo de la clase Jugador el play:

Código

def disparo(self):
    bala = Disparos(self.rect.centerx, self.rect.top + 20)
    balas.add(bala)
    laser.play()

Le voy a añadir cuatro sonidos más para explosiones. Basta con uno, pero así le añadimos más variedad.

Código

explosion1 = pygame.mixer.Sound('sonidos/explosion1.wav')
explosion2 = pygame.mixer.Sound('sonidos/explosion2.wav')
explosion3 = pygame.mixer.Sound('sonidos/explosion3.wav')
explosion4 = pygame.mixer.Sound('sonidos/explosion4.wav')

Y ponemos los play correspondientes en los if de las colisiones.

Código

if colision_disparos_amarillos:
    puntuacion += 10
    explosion1.play()

if colision_disparos_verdes:
    puntuacion += 25
    explosion2.play()

if colision_disparos_azules:
    puntuacion += 50
    explosion3.play()

if colision_disparos_rojos:
    puntuacion += 100
    explosion4.play()

Para poner música de ambiente ya sabes como se hace del capítulo 6, pero si no lo recuerdas, aquí lo tienes:

Código

ambiente = pygame.mixer.Sound('sonidos/space_ambient.ogg')
ambiente.play()

Sonidos random

Para terminar con el capítulo,veamos los sonidos aleatorios.
Para poner sonidos aleatorios lo puedes hacer muy fácilmente con una lista y un randrange.

Creamos la lista. Un sonido por posición.

Código

explosiones_random = [pygame.mixer.Sound('sonidos/explosion1.wav'),
                     pygame.mixer.Sound('sonidos/explosion2.wav'),
                     pygame.mixer.Sound('sonidos/explosion3.wav'),
                     pygame.mixer.Sound('sonidos/explosion4.wav')]

Y finalmente reproducimos una posición aleatoria de la lista en cada colisión.

Código

if colision_disparos_amarillos:
   puntuacion += 10
   explosiones_random[random.randrange(0,3)].play()

if colision_disparos_verdes:
   puntuacion += 25
   explosiones_random[random.randrange(0,3)].play()

if colision_disparos_azules:
   puntuacion += 50
   explosiones_random[random.randrange(0,3)].play()

if colision_disparos_rojos:
   puntuacion += 100
   explosiones_random[random.randrange(0,3)].play()

Suscríbete a mi canal de YouTube para apoyarme

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.


Comentarios

Si te quedan dudas sobre el temario, sobre Python, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.