Creando variables con los directorios y archivos del juego
Capítulo 19: Organizar directorios y archivos del juego
En este capítulo aprenderemos a crear directorios para guardar los archivos del juego, directorios que van a ser multiplataforma, tanto para Linux como Windows o Mac.
Lo primero es importar el módulo os, dedicado a los sistemas operativos.
Lo siguiente es especificar la carpeta principal del juego.
La variable especial __file__
nos sirve para sustituir por cualquier nombre de directorio en este caso.
import os
# Directorio del juego
carpeta_juego = os.path.dirname(__file__)
Así como lo tengo, lo que hace es obtener la ruta hacia la carpeta de juego, de esa forma, esté donde esté, la encontrará.
Ahora que ya tenemos almacenada la raíz de nuestro juego, es hora de crear tantas variables como carpetas tenga tu proyecto. Yo tengo la de imágenes, que antes se llamaba principal y la he renombrado.
Y tengo otra más con sonidos.
Se trata de especificar en el join()
la ruta almacenada en la carpeta del juego y seguido ponemos el nombre de la carpeta.
carpeta_imagenes = os.path.join(carpeta_juego, "imagenes")
carpeta_sonidos = os.path.join(carpeta_juego, "sonidos")
Para especificar subdirectorios lo podemos hacer de la misma forma, solo que esta vez, en lugar de especificar en la ruta el directorio de la carpeta del juego, le pones el directorio de la carpeta en la que estás:
# Sub directorios de imágenes
carpeta_imagenes_enemigos = os.path.join(carpeta_imagenes,"enemigos")
carpeta_imagenes_fondos = os.path.join(carpeta_imagenes,"fondos")
carpeta_imagenes_jugador = os.path.join(carpeta_imagenes,"jugador")
# Sub directorios de sonido
carpeta_sonidos_ambiente = os.path.join(carpeta_sonidos,"ambiente")
carpeta_sonidos_armas = os.path.join(carpeta_sonidos,"armas")
carpeta_sonidos_explosiones = os.path.join(carpeta_sonidos,"explosiones")
Una vez tenemos todas las carpetas, es el momento de renombrar todas las rutas estáticas, porque estas rutas de ahora pueden cambiar. Podemos mover el proyecto entero a otra carpeta y la variable carpeta_juego = os.path.dirname(__file__)
, va a obtener la ruta correcta esté donde esté.
En la nave del jugador (clase Jugador
) en lugar de poner toda la ruta hacia la carpeta, llamamos a su carpeta y ponemos el nombre de la imagen:
self.image = pygame.image.load(os.path.join(carpeta_imagenes_jugador, "nave.png")).convert()
Y las rutas de los sonidos quedarán así:
laser = pygame.mixer.Sound(os.path.join(carpeta_sonidos_armas, 'laser.wav'))
explosion1 = pygame.mixer.Sound(os.path.join(carpeta_sonidos_explosiones, 'explosion1.wav'))
explosion2 = pygame.mixer.Sound(os.path.join(carpeta_sonidos_explosiones, 'explosion2.wav'))
explosion3 = pygame.mixer.Sound(os.path.join(carpeta_sonidos_explosiones, 'explosion3.wav'))
explosion4 = pygame.mixer.Sound(os.path.join(carpeta_sonidos_explosiones, 'explosion4.wav'))
ambiente = pygame.mixer.Sound(os.path.join(carpeta_sonidos_ambiente, 'space_ambient.ogg'))
Lo mismo podemos hacer con cualquier archivo del juego.
Comentarios
Si te quedan dudas sobre el temario, sobre Python, Pygame 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.