Tabla de contenido:

Vínculos de variables en Twine con Sugarcube: 10 pasos
Vínculos de variables en Twine con Sugarcube: 10 pasos

Video: Vínculos de variables en Twine con Sugarcube: 10 pasos

Video: Vínculos de variables en Twine con Sugarcube: 10 pasos
Video: Twine 2.6: SugarCube 2.36: Introduction: Introduction to SugarCube 2024, Mes de julio
Anonim
Enlaces de variables en Twine con Sugarcube
Enlaces de variables en Twine con Sugarcube

¡Estoy tan feliz de que te hayas unido a mí de nuevo! Esto significa que el Wumpus aún no te ha comido. ¡Bien!

Para aquellos de ustedes que no están familiarizados, este es un conjunto de tutoriales que estoy haciendo para ayudar a mi adorable primo widdle con su proyecto de último año. Estos tutoriales están destinados a ser una referencia de lo que puede hacer con algunas de las funciones de programación de Twine y Sugarcube. Si quieres seguir adelante, puedes encontrar el primer tutorial aquí.

En el último tutorial, construí un pequeño conjunto de habitaciones que el jugador puede explorar. Agregué un objeto Wumpus e hice un código de habitación genérico para cambiar lo que se mostraba en cada habitación dependiendo de dónde esté el Wumpus.

Paso 1: crea tu reproductor

Crea tu jugador
Crea tu jugador

Este paso es muy sencillo. Básicamente, solo estoy usando el mismo código que mi $ wumpus, pero con una variable $ player en su lugar.

Paso 2: Nuevo código de habitación

Nuevo código de habitación
Nuevo código de habitación

Cambió su código de habitación genérico para que el valor de $ player sea la habitación actual. Luego compare $ wumpus con $ player en lugar de la habitación actual.

Este es un cambio menor y no es totalmente necesario, pero me gusta mantener mi código organizado.

Paso 3: crear un vínculo a partir de una variable

Crear un vínculo a partir de una variable
Crear un vínculo a partir de una variable

Finalmente, quiero reemplazar el enlace en mi sala de inicio por uno que cambie según el valor de $ player. Esto se puede hacer con la función "" en Sugarcube. Puede leer más sobre eso en la página de documentación de Sugarcube.

La primera cadena después de nuestro comando es la frase que aparecerá en nuestro pasaje. El segundo es el nombre del pasaje al que queremos enlazar. Estoy usando "¡Caza los Wumpus!" como mi frase, pero podríamos usar nuestra variable allí en su lugar si queremos que el jugador sepa a dónde van de antemano, así:

Paso 4: prueba

Prueba
Prueba
Prueba
Prueba

Cuando pruebes tu código, deberías encontrar que tu enlace ha sido reemplazado con cualquier frase que escribiste antes. Hacer clic en él te lleva a una habitación aleatoria en tu juego.

Desafortunadamente, ¡esto también puede llevarte directamente a la sala de Wumpus! Eso no importa mucho en este momento, pero en un juego real sería un juego instantáneo. Necesitamos arreglar eso.

Paso 5: agregar una lista de salas

Agregar una lista de salas
Agregar una lista de salas

Primero, crearemos una lista de salas para facilitar la administración de las mismas. Al declarar esta matriz, podemos usarla para establecer nuestros valores $ player y $ wumpus sin repetir código. También tiene otra ventaja que exploraremos a continuación.

Las pruebas con este código deberían comportarse como antes.

Paso 6: Eliminación de habitaciones

Eliminando Habitaciones
Eliminando Habitaciones

Agregué una sola línea de código al código anterior (resaltado).

Las matrices en Sugarcube tienen una función incorporada que le permite eliminar elementos de ellas por nombre. En este caso, una vez que asignamos una habitación a $ wumpus, podemos eliminar esa habitación de nuestra lista de $ habitaciones. Sin embargo, esta función es delicada. No funcionará a menos que la salida de la función se asigne o se use de alguna manera. Para encargarme de eso, he creado la variable temporal _temp.

En Sugarcube, las variables temporales comienzan con un guión bajo (_) en lugar de un dólar ($). Son útiles porque se eliminan una vez que se ejecuta el pasaje, por lo que no tiene que preocuparse por la superposición de nombres de variables.

También eliminaré la sala de $ player de $ roomlist, como una cuestión de rutina.

Paso 7: prueba

Pruebas
Pruebas
Pruebas
Pruebas

Si bien podríamos ejecutar el código como está ahora, esa no sería una prueba muy completa. Si ejecutamos el código y encontramos que $ player y $ wumpus están asignados a diferentes salas, no sabemos si es porque el código funciona o si es solo una casualidad. Claro, podríamos ejecutar el código muchas veces y asumir que si nunca les asigna a ambos la misma sala, nunca lo hará, pero eso tomará una eternidad y todavía no es una garantía del 100% de que nunca sucederá.

En cambio, necesitamos una forma de comprobarlo.

Agregué tres líneas en la parte superior de nuestro pasaje de introducción que nos permitirán ver los valores de nuestras variables $ wumpus, $ player y $ roomlist. Debido a la forma en que configuramos nuestro código, sabemos que la sala $ wumpus y la sala $ player deben eliminarse de la lista $ room.

Cuando ejecutamos este código, podemos verificar para asegurarnos de que ese sea el caso.

Paso 8: rarezas con Sugarcube y objetos

Rarezas con Sugarcube y objetos
Rarezas con Sugarcube y objetos
Rarezas con Sugarcube y objetos
Rarezas con Sugarcube y objetos
Rarezas con Sugarcube y objetos
Rarezas con Sugarcube y objetos

Los objetos Sugarcube son un poco extraños. Déjame demostrarte esto.

Mientras estaba construyendo este proyecto originalmente, quería guardar mi $ roomlist en una variable $ saveroom antes de comenzar a eliminar habitaciones. Pensé que sería útil más tarde.

Cuando obtuve un comportamiento extraño de este código, agregué otra línea a mi página de introducción para permitirme ver mi variable $ saveroom (segunda imagen).

¡Me sorprendió descubrir que los elementos que había eliminado de $ roomlist también se habían eliminado de mi lista guardada! Puedes ver esto en acción en la tercera imagen.

Esto se debe a que cuando copia una matriz como esta, en realidad no le está diciendo a Twine que copie la matriz, le está diciendo a Twine que estas dos variables son la misma matriz. Cuando le haces algo a la matriz usando una variable, ¡cambia la misma matriz que la otra variable está mirando!

Podemos arreglar esto con la función clone ().

Paso 9: La función Clone ()

La función Clone ()
La función Clone ()
La función Clone ()
La función Clone ()

Puede leer sobre la función clone () en la página de documentación de Sugarcube.

Una copia "superficial" es lo que estábamos haciendo antes. En lugar de hacer una copia completa de toda la matriz, simplemente asume que su variable está trabajando con la misma matriz. En lugar de una copia superficial, clone () realiza una copia "profunda", que se comporta como cabría esperar. Cada elemento de la matriz se copia en una nueva matriz y está totalmente separado del original.

Si probamos este nuevo código, encontramos que funciona como se esperaba.

Por supuesto, no importa si mantiene $ roomlist o no. Para los propósitos de mi proyecto, no voy a hacerlo. Todo esto fue solo para demostrar copias profundas versus superficiales.

Paso 10: ¡Eso es todo por ahora

¡Eso es todo por ahora!
¡Eso es todo por ahora!

Hemos agregado un código que le permite a nuestro jugador comenzar en una habitación aleatoria. Además de eso, hemos eliminado un error en el que el jugador comenzaría en la misma habitación que el Wumpus.

Aprendimos cómo crear enlaces a partir de variables y cómo Sugarcube trata la copia de matrices.

Las cosas están mejorando, ¡pero recién estamos comenzando!

¡Feliz cacería!

Recomendado: