PyCharm

Pycharm es un fantástico IDE para Python.
Cuenta con versión gratuita y versión de pago. Tú eliges.
Este es el IDE que utilizo en el curso
Ir a la página de descargaEn este sexto capítulo, podrás ver cómo crear un sistema completo de audio en Pygame con música de fondo y controles de volumen.
Para cargar una música en Pygame lo debes hacer así:
pygame.mixer.music.load('sonido/intergalactic_odyssey.ogg')
Y para reproducirla, lo harás con un play.
Si entre los paréntesis ponemos un 1
la música se reproducirá una sola vez.
Si pones un número 'x', se reproducirá 'x' veces.
Finalmente, con un valor de -1
se reproducirá en bucle infinito.
pygame.mixer.music.play(1)
Para los controles de sonido he cargado unas cuantas imágenes que se van a mostrar con la tecla correspondiente.
sonido_arriba = pygame.image.load('sonido/volume_up.png')
sonido_abajo = pygame.image.load('sonido/volume_down.png')
sonido_mute = pygame.image.load('sonido/volume_muted.png')
sonido_max = pygame.image.load('sonido/volume_max.png')
Para el control del nivel de volumen lo haremos con set_volume
.
Especificaremos un número decimal del 0.0
al 1.0
.
pygame.mixer.music.set_volume(1.0)
Puedes ver en el siguiente código completo del capítulo o en el vídeo de arriba, cómo asignar las imágenes y el control de volumen a las teclas.
import pygame
import sys
# Iniciación de Pygame
pygame.init()
# Pantalla - ventana
W, H = 1000, 600
PANTALLA = pygame.display.set_mode((W, H))
pygame.display.set_caption('Exterminator')
icono=pygame.image.load('icon.png')
pygame.display.set_icon(icono)
# Fondo del juego
fondo = pygame.image.load('imagenes/fondos/ciudad.png')
# Música de fondo
pygame.mixer.music.load('sonido/intergalactic_odyssey.ogg')
pygame.mixer.music.play(-1)
# Personaje
quieto = pygame.image.load('imagenes/principal/idle1.png')
caminaDerecha = [pygame.image.load('imagenes/principal/run1.png'),
pygame.image.load('imagenes/principal/run2.png'),
pygame.image.load('imagenes/principal/run3.png'),
pygame.image.load('imagenes/principal/run4.png'),
pygame.image.load('imagenes/principal/run5.png'),
pygame.image.load('imagenes/principal/run6.png')]
caminaIzquierda = [pygame.image.load('imagenes/principal/run1-izq.png'),
pygame.image.load('imagenes/principal/run2-izq.png'),
pygame.image.load('imagenes/principal/run3-izq.png'),
pygame.image.load('imagenes/principal/run4-izq.png'),
pygame.image.load('imagenes/principal/run5-izq.png'),
pygame.image.load('imagenes/principal/run6-izq.png')]
salta = [pygame.image.load('imagenes/principal/jump1.png'),
pygame.image.load('imagenes/principal/jump2.png')]
# Sonido
sonido_arriba = pygame.image.load('sonido/volume_up.png')
sonido_abajo = pygame.image.load('sonido/volume_down.png')
sonido_mute = pygame.image.load('sonido/volume_muted.png')
sonido_max = pygame.image.load('sonido/volume_max.png')
x=0
px = 50
py = 200
ancho = 40
velocidad = 10
# Control de FPS
reloj = pygame.time.Clock()
# Variables salto
salto = False
# Contador de salto
cuentaSalto = 10
# Variables dirección
izquierda = False
derecha = False
# Pasos
cuentaPasos = 0
# Movimiento
def recargaPantalla():
# Variables globales
global cuentaPasos
global x
# Fondo en movimiento
x_relativa = x % fondo.get_rect().width
PANTALLA.blit(fondo, (x_relativa - fondo.get_rect().width, 0))
if x_relativa < W:
PANTALLA.blit(fondo, (x_relativa, 0))
x -= 5
# Contador de pasos
if cuentaPasos + 1 >= 6:
cuentaPasos = 0
# Movimiento a la izquierda
if izquierda:
PANTALLA.blit(caminaIzquierda[cuentaPasos // 1], (int(px), int(py)))
cuentaPasos += 1
# Movimiento a la derecha
elif derecha:
PANTALLA.blit(caminaDerecha[cuentaPasos // 1], (int(px), int(py)))
cuentaPasos += 1
elif salto + 1 >= 2:
PANTALLA.blit(salta[cuentaPasos // 1], (int(px), int(py)))
cuentaPasos += 1
else:
PANTALLA.blit(quieto,(int(px), int(py)))
ejecuta = True
# Bucle de acciones y controles
while ejecuta:
# FPS
reloj.tick(18)
# Bucle del juego
for event in pygame.event.get():
if event.type == pygame.QUIT:
ejecuta = False
# Opción tecla pulsada
keys = pygame.key.get_pressed()
# Tecla A - Moviemiento a la izquierda
if keys[pygame.K_a] and px > velocidad:
px -= velocidad
izquierda = True
derecha = False
# Tecla D - Moviemiento a la derecha
elif keys[pygame.K_d] and px < 900 - velocidad - ancho:
px += velocidad
izquierda = False
derecha = True
# Personaje quieto
else:
izquierda = False
derecha = False
cuentaPasos = 0
# Tecla W - Moviemiento hacia arriba
if keys[pygame.K_w] and py > 100:
py -= velocidad
# Tecla S - Moviemiento hacia abajo
if keys[pygame.K_s] and py < 300:
py += velocidad
# Tecla SPACE - Salto
if not (salto):
if keys[pygame.K_SPACE]:
salto = True
izquierda = False
derecha = False
cuentaPasos = 0
else:
if cuentaSalto >= -10:
py -= (cuentaSalto * abs(cuentaSalto)) * 0.5
cuentaSalto -= 1
else:
cuentaSalto = 10
salto = False
# Control del audio
# Baja volumen
if keys[pygame.K_9] and pygame.mixer.music.get_volume() > 0.0:
pygame.mixer.music.set_volume(pygame.mixer.music.get_volume() - 0.01)
PANTALLA.blit(sonido_abajo, (850, 25))
elif keys[pygame.K_9] and pygame.mixer.music.get_volume() == 0.0:
PANTALLA.blit(sonido_mute, (850, 25))
# Sube volumen
if keys[pygame.K_0] and pygame.mixer.music.get_volume() < 1.0:
pygame.mixer.music.set_volume(pygame.mixer.music.get_volume() + 0.01)
PANTALLA.blit(sonido_arriba, (850, 25))
elif keys [pygame.K_0] and pygame.mixer.music.get_volume() == 1.0:
PANTALLA.blit(sonido_max, (850, 25))
# Desactivar sonido
elif keys[pygame.K_m]:
pygame.mixer.music.set_volume(0.0)
PANTALLA.blit(sonido_mute, (850, 25))
# Reactivar sonido
elif keys[pygame.K_COMMA]:
pygame.mixer.music.set_volume(1.0)
PANTALLA.blit(sonido_max, (850, 25))
# Actualización de la ventana
pygame.display.update()
# Llamada a la función de actualización de la ventana
recargaPantalla()
# Salida del juego
pygame.quit()
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.
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.