Curso de videojuegos con Pygame

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.

Programación Fácil YouTube

Suscríbete

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.