Declarar variables y usar selecciones múltiples para influir en el final

¡Hola, creadores de novelas visuales! Bienvenidos a la sexta entrada de esta guía de Ren'Py en español. En el [post anterior] aprendimos a mejorar los diálogos con efectos visuales, formatos y líneas de tiempo. Hoy vamos a dar un paso importante: aprenderemos a **declarar variables**, usar **selecciones múltiples** y hacer que las decisiones de los jugadores influyan en el final de la historia. También veremos cómo algunas opciones pueden ser negativas y llevar a un "final malo". Al final, te dejaré algunos ejercicios para que practiques. ¡Empecemos!

#### 1. Configurar la escena base
Usaremos el fondo de la playa y los personajes Perrito y Gatita que ya conocemos. Si no tienes los archivos, revisa los posts anteriores para descargarlos.

1. Abre tu archivo `script.rpy` y asegúrate de tener los personajes declarados:
   ```
   define perrito = Character("Perrito", color="#00B7EB")
   define gatita = Character("Gatita", color="#FF69B4")
   ```
2. Configura la escena inicial:
   ```
   label start:
       scene bg playa
       show perrito at left
       show gatita at right
   ```

#### 2. Declarar una variable para el contador
Vamos a crear una variable que actúe como un "contador de amistad" entre Perrito y Gatita. Las decisiones del jugador sumarán o restarán puntos a este contador, y al final, el valor determinará si tienen un final bueno o malo.

1. Al inicio del `label start`, declara la variable:
   ```
   $ amistad = 0
   ```
   - `$` indica que estamos usando una variable en Ren'Py.
   - `amistad` es el nombre de la variable, y la iniciamos en 0.

#### 3. Usar selecciones múltiples para modificar el contador
Vamos a crear un menú con opciones que afecten el contador de amistad. Algunas opciones sumarán puntos (positivas), y otras restarán puntos (negativas).

1. Añade un diálogo y un menú:
   ```
   perrito "¡Hola, Gatita! ¿Quieres construir un castillo de arena conmigo?"
   menu:
       "¡Claro, suena divertido!":
           $ amistad += 2
           gatita "¡Genial! Vamos a hacerlo."
       "No, prefiero tomar el sol.":
           $ amistad -= 1
           gatita "Hmph, qué aburrido..."
       "¡No seas tonto, Perrito!":
           $ amistad -= 3
           gatita "¡Oye, no seas grosero!"
   ```
   - `+=` suma puntos a la variable `amistad`.
   - `-=` resta puntos.
   - En este ejemplo, ser amable suma 2 puntos, ignorar a Perrito resta 1 punto, y ser grosero resta 3 puntos.

2. Añade un segundo menú para más decisiones:
   ```
   perrito "¿Trajiste algo para compartir? Yo tengo un helado."
   menu:
       "Sí, tengo unas galletas para compartir.":
           $ amistad += 2
           gatita "¡Qué rico! Gracias por compartir."
       "No, no traje nada.":
           $ amistad -= 1
           gatita "Oh... Bueno, está bien."
   ```

#### 4. Usar condicionales para determinar el final
Ahora que el jugador ha tomado decisiones, usaremos el valor de `amistad` para decidir el final. Vamos a definir tres posibles finales: bueno, neutral y malo.

1. Añade condicionales basados en el valor de `amistad`:
   ```
   if amistad >= 3:
       perrito "¡Fue un día increíble, Gatita!"
       gatita "Sí, me la pasé muy bien contigo. ¡Hagámoslo de nuevo!"
       "Final bueno: Perrito y Gatita se hicieron grandes amigos."
   elif amistad > 0:
       perrito "Bueno, estuvo bien, ¿no?"
       gatita "Sí, supongo... Pero podría haber sido mejor."
       "Final neutral: Perrito y Gatita pasaron un día decente."
   else:
       perrito "Creo que no nos llevamos muy bien..."
       gatita "Hmph, no quiero volver a la playa contigo."
       "Final malo: Perrito y Gatita no se hicieron amigos."
   ```
   - `if amistad >= 3`: Si la amistad es 3 o más, obtienen el final bueno.
   - `elif amistad > 0`: Si la amistad es mayor que 0 pero menor que 3, obtienen el final neutral.
   - `else`: Si la amistad es 0 o negativa, obtienen el final malo.

#### 5. Cerrar la escena
Termina la escena para regresar al menú principal:
   ```
   return
   ```

#### 6. Código completo
Aquí está el código completo de la escena:
```
define perrito = Character("Perrito", color="#00B7EB")
define gatita = Character("Gatita", color="#FF69B4")

label start:
    scene bg playa
    show perrito at left
    show gatita at right
    $ amistad = 0

    perrito "¡Hola, Gatita! ¿Quieres construir un castillo de arena conmigo?"
    menu:
        "¡Claro, suena divertido!":
            $ amistad += 2
            gatita "¡Genial! Vamos a hacerlo."
        "No, prefiero tomar el sol.":
            $ amistad -= 1
            gatita "Hmph, qué aburrido..."
        "¡No seas tonto, Perrito!":
            $ amistad -= 3
            gatita "¡Oye, no seas grosero!"

    perrito "¿Trajiste algo para compartir? Yo tengo un helado."
    menu:
        "Sí, tengo unas galletas para compartir.":
            $ amistad += 2
            gatita "¡Qué rico! Gracias por compartir."
        "No, no traje nada.":
            $ amistad -= 1
            gatita "Oh... Bueno, está bien."

    if amistad >= 3:
        perrito "¡Fue un día increíble, Gatita!"
        gatita "Sí, me la pasé muy bien contigo. ¡Hagámoslo de nuevo!"
        "Final bueno: Perrito y Gatita se hicieron grandes amigos."
    elif amistad > 0:
        perrito "Bueno, estuvo bien, ¿no?"
        gatita "Sí, supongo... Pero podría haber sido mejor."
        "Final neutral: Perrito y Gatita pasaron un día decente."
    else:
        perrito "Creo que no nos llevamos muy bien..."
        gatita "Hmph, no quiero volver a la playa contigo."
        "Final malo: Perrito y Gatita no se hicieron amigos."

    return
```

#### 7. Ejercicios para practicar
Aquí tienes algunos ejercicios para que practiques lo que aprendiste:

1. **Cambia los valores del contador**:
   - Modifica los puntos que se suman o restan en cada opción. Por ejemplo, haz que ser grosero reste 5 puntos en lugar de 3. ¿Cómo cambia el final?
   
2. **Añade una tercera decisión**:
   - Agrega otro menú con una nueva pregunta (p. ej., "¿Vamos a nadar?") y tres opciones que afecten el contador de `amistad`.

3. **Crea más finales**:
   - Añade un nuevo rango para un "final súper bueno" si `amistad` es mayor o igual a 5. Escribe un diálogo especial para este final.

4. **Usa una variable diferente**:
   - Crea una nueva variable (p. ej., `$ diversion = 0`) y haz que las decisiones afecten esta variable en lugar de `amistad`. Ajusta los finales según el valor de `diversion`.

#### 8. ¡Tu turno!
Copia este código en tu proyecto de Ren'Py y prueba las diferentes opciones. ¿Qué final obtuviste? ¿Lograste un final bueno, neutral o malo? Intenta los ejercicios y comparte tus resultados en los comentarios. ¡Nos leemos el 6 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