Uso de diccionarios en Ren'Py

¡Hola, creadores de novelas visuales! Bienvenidos a la decimoséptima entrada de esta guía de Ren'Py en español. En el [post anterior] creamos un proyecto final básico y aprendimos a organizarlo en múltiples archivos `.rpy`. Hoy vamos a dar un paso hacia temas intermedios explorando los **diccionarios** en Ren'Py. Aprenderemos qué son, cómo usarlos y por qué son útiles para manejar datos en tu novela visual. ¡Empecemos!

1. ¿Qué es un diccionario y para qué sirve?
Un diccionario en Ren'Py (y en Python) es una estructura de datos que almacena información en pares **clave-valor**. Piensa en un diccionario como una libreta de direcciones: cada "clave" (como el nombre de una persona) está asociada a un "valor" (como su número de teléfono).

**¿Por qué usar diccionarios en Ren'Py?**
- **Organización**: Puedes almacenar datos relacionados en un solo lugar (por ejemplo, las estadísticas de un personaje).
- **Flexibilidad**: Puedes acceder y modificar los datos fácilmente durante el juego.
- **Escalabilidad**: Son ideales para proyectos más grandes, como manejar relaciones entre personajes, inventarios o elecciones complejas.

2. Crear un diccionario en Ren'Py
Vamos a crear un diccionario para almacenar las estadísticas de Perrito y Gatita, como su energía y felicidad.

1. **Definir un diccionario**:
   - Usa la sintaxis de Python `{clave: valor}` para crear un diccionario.
   - Ejemplo:
     ```
     define perrito_stats = {"energia": 50, "felicidad": 70}
     define gatita_stats = {"energia": 60, "felicidad": 40}
     ```
   - Aquí, `perrito_stats` es un diccionario con dos claves (`energia` y `felicidad`) y sus valores.

2. **Acceder a los valores**:
   - Usa la clave para obtener el valor asociado. Por ejemplo:
     ```
     $ energia_perrito = perrito_stats["energia"]
     ```
   - Esto guarda el valor de `energia` (50) en la variable `energia_perrito`.

3. **Modificar valores**:
   - Puedes cambiar los valores del diccionario en cualquier momento:
     ```
     $ perrito_stats["energia"] = perrito_stats["energia"] + 10
     ```
   - Esto aumenta la energía de Perrito en 10 (de 50 a 60).

3. Usar diccionarios en una escena
Vamos a crear una escena donde Perrito y Gatita juegan en la playa, y sus estadísticas cambian según las elecciones del jugador.

1. **Configurar la escena**:
   ```
   define perrito = Character("Perrito", color="#00B7EB")
   define gatita = Character("Gatita", color="#FF69B4")

   # Diccionarios para las estadísticas
   define perrito_stats = {"energia": 50, "felicidad": 70}
   define gatita_stats = {"energia": 60, "felicidad": 40}

   label start:
       scene bg playa with fade
       show perrito at left
       show gatita at right
       narrator "Perrito y Gatita están en la playa. Vamos a ver cómo están hoy."
       perrito "Mi energía está en [perrito_stats[energia]], y mi felicidad en [perrito_stats[felicidad]]."
       gatita "Mi energía está en [gatita_stats[energia]], y mi felicidad en [gatita_stats[felicidad]]."

       menu:
           "Jugar a correr por la playa.":
               jump correr
           "Descansar bajo una sombrilla.":
               jump descansar
   ```

2. **Escena de correr**:
   ```
   label correr:
       narrator "Perrito y Gatita corren por la playa, gastando energía pero aumentando su felicidad."
       $ perrito_stats["energia"] -= 20
       $ perrito_stats["felicidad"] += 10
       $ gatita_stats["energia"] -= 20
       $ gatita_stats["felicidad"] += 10
       perrito "¡Qué divertido! Ahora mi energía está en [perrito_stats[energia]], y mi felicidad en [perrito_stats[felicidad]]."
       gatita "¡Sí, me siento mejor! Mi energía está en [gatita_stats[energia]], y mi felicidad en [gatita_stats[felicidad]]."
       jump final
   ```

3. **Escena de descansar**:
   ```
   label descansar:
       narrator "Perrito y Gatita descansan bajo una sombrilla, recuperando energía pero sin cambiar su felicidad."
       $ perrito_stats["energia"] += 10
       $ gatita_stats["energia"] += 10
       perrito "Qué relajante. Ahora mi energía está en [perrito_stats[energia]]."
       gatita "Sí, me siento más descansada. Mi energía está en [gatita_stats[energia]]."
       jump final
   ```

4. **Final**:
   ```
   label final:
       narrator "Perrito y Gatita terminan su día en la playa."
       perrito "¡Fue un día genial!"
       gatita "Sí, estoy lista para volver mañana."
       return
   ```

4. Código completo
Aquí está el código completo con los diccionarios:
```
define perrito = Character("Perrito", color="#00B7EB")
define gatita = Character("Gatita", color="#FF69B4")

define perrito_stats = {"energia": 50, "felicidad": 70}
define gatita_stats = {"energia": 60, "felicidad": 40}

label start:
    scene bg playa with fade
    show perrito at left
    show gatita at right
    narrator "Perrito y Gatita están en la playa. Vamos a ver cómo están hoy."
    perrito "Mi energía está en [perrito_stats[energia]], y mi felicidad en [perrito_stats[felicidad]]."
    gatita "Mi energía está en [gatita_stats[energia]], y mi felicidad en [gatita_stats[felicidad]]."

    menu:
        "Jugar a correr por la playa.":
            jump correr
        "Descansar bajo una sombrilla.":
            jump descansar

label correr:
    narrator "Perrito y Gatita corren por la playa, gastando energía pero aumentando su felicidad."
    $ perrito_stats["energia"] -= 20
    $ perrito_stats["felicidad"] += 10
    $ gatita_stats["energia"] -= 20
    $ gatita_stats["felicidad"] += 10
    perrito "¡Qué divertido! Ahora mi energía está en [perrito_stats[energia]], y mi felicidad en [perrito_stats[felicidad]]."
    gatita "¡Sí, me siento mejor! Mi energía está en [gatita_stats[energia]], y mi felicidad en [gatita_stats[felicidad]]."
    jump final

label descansar:
    narrator "Perrito y Gatita descansan bajo una sombrilla, recuperando energía pero sin cambiar su felicidad."
    $ perrito_stats["energia"] += 10
    $ gatita_stats["energia"] += 10
    perrito "Qué relajante. Ahora mi energía está en [perrito_stats[energia]]."
    gatita "Sí, me siento más descansada. Mi energía está en [gatita_stats[energia]]."
    jump final

label final:
    narrator "Perrito y Gatita terminan su día en la playa."
    perrito "¡Fue un día genial!"
    gatita "Sí, estoy lista para volver mañana."
    return
```

5. Más formas de usar diccionarios
Los diccionarios tienen muchas aplicaciones en Ren'Py. Aquí algunos ejemplos:
- **Relaciones entre personajes**: Usa un diccionario para rastrear la afinidad entre personajes (por ejemplo, `relaciones = {"perrito_gatita": 50}`).
- **Inventarios**: Almacena los objetos del jugador (por ejemplo, `inventario = {"concha": 3, "frisbee": 1}`).
- **Condiciones**: Usa los valores del diccionario para tomar decisiones (por ejemplo, `if perrito_stats["felicidad"] > 50:`).

6. Consejos para usar diccionarios
- **Claves únicas**: Asegúrate de que las claves sean únicas dentro de cada diccionario (por ejemplo, no uses dos veces "energia").
- **Valores iniciales**: Define valores iniciales razonables para evitar errores (por ejemplo, no dejes que la energía baje de 0).
- **Prueba cambios**: Usa diálogos para mostrar los valores del diccionario (como `[perrito_stats[energia]]`) y verifica que los cambios se apliquen correctamente.

7. Ejercicios para practicar
Aquí tienes algunos ejercicios para que practiques el uso de diccionarios:

1. **Añade una nueva estadística**:
   - Agrega una estadística de "hambre" a los diccionarios de Perrito y Gatita, y cámbiala según las elecciones (por ejemplo, correr aumenta el hambre, descansar la reduce).

2. **Usa condiciones**:
   - Añade una condición que verifique si la felicidad de Gatita es mayor a 50, y si es así, haz que diga algo especial (por ejemplo, "¡Estoy muy feliz hoy!").

3. **Crea un inventario**:
   - Crea un diccionario para un inventario (por ejemplo, `inventario = {"concha": 0, "frisbee": 0}`) y haz que el jugador gane un objeto según la elección (por ejemplo, buscar conchas aumenta `inventario["concha"]`).

8. ¡Tu turno!
Copia este código en tu proyecto de Ren'Py y prueba los diccionarios. ¿Lograste cambiar las estadísticas de Perrito y Gatita según las elecciones? ¿Entendiste cómo acceder y modificar los valores de un diccionario? Intenta los ejercicios y comparte tus resultados en los comentarios. En la próxima entrada, seguiremos explorando temas intermedios para que mejores tus proyectos. ¡Nos leemos el 17 de abril!

Comentarios

Entradas más populares de este blog

Introducción a Ren'Py - Tu primer paso para crear novelas visuales

Importar un segundo personaje y hacer que interactúen en Ren'Py

Crear rutas alternas con el comando `if` en Ren'Py