Índice:

Links de variáveis em Twine With Sugarcube: 10 etapas
Links de variáveis em Twine With Sugarcube: 10 etapas

Vídeo: Links de variáveis em Twine With Sugarcube: 10 etapas

Vídeo: Links de variáveis em Twine With Sugarcube: 10 etapas
Vídeo: Decoding Twine Episode One | Passages, Links & Variables 2024, Novembro
Anonim
Links de variáveis em Twine With Sugarcube
Links de variáveis em Twine With Sugarcube

Estou tão feliz que você se juntou a mim novamente! Isso significa que o Wumpus ainda não o comeu. Boa!

Para aqueles de vocês que não estão familiarizados, este é um conjunto de tutoriais que estou fazendo para ajudar minha adorável prima widdle oochy-skootchy com seu projeto de último ano. Esses tutoriais são uma referência sobre o que você pode fazer com alguns dos recursos de programação do Twine e do Sugarcube. Se você quiser acompanhar, você pode encontrar o primeiro tutorial aqui.

No último tutorial, construí um pequeno conjunto de salas que o jogador pode explorar. Eu adicionei um objeto Wumpus e criei um código genérico para alterar o que era exibido em cada sala, dependendo de onde o Wumpus está.

Etapa 1: Crie seu jogador

Crie o seu jogador
Crie o seu jogador

Esta etapa é muito simples. Basicamente, estou apenas usando o mesmo código do meu $ wumpus, mas com uma variável $ player.

Etapa 2: Novo código de quarto

Novo código de sala
Novo código de sala

Alterou o código genérico do quarto para que o valor de $ player seja o quarto atual. Em seguida, compare $ wumpus com $ player em vez da sala atual.

Esta é uma pequena alteração e não totalmente necessária, mas gosto de manter meu código organizado.

Etapa 3: Criação de um link a partir de uma variável

Criando um link a partir de uma variável
Criando um link a partir de uma variável

Por fim, desejo substituir o link na minha sala inicial por um que muda com base no valor de $ player. Isso pode ser feito com a função "" no Sugarcube. Você pode ler mais sobre isso na página de documentação do Sugarcube.

A primeira string após nosso comando é a frase que aparecerá em nossa passagem. O segundo é o nome da passagem à qual queremos nos vincular. Estou usando "Hunt the Wumpus!" como minha frase, mas poderíamos usar nossa variável lá se quisermos que o jogador saiba para onde está indo com antecedência, assim:

Etapa 4: teste

Teste
Teste
Teste
Teste

Ao testar seu código, você deve descobrir que seu link foi substituído por qualquer frase que você escreveu antes. Clicar nele leva você a uma sala aleatória do jogo.

Infelizmente, isso também pode levá-lo direto para a sala de Wumpus! Isso não importa muito agora, mas em um jogo real, seria um jogo instantâneo. Precisamos consertar isso.

Etapa 5: adicionar uma lista de salas

Adicionar uma lista de salas
Adicionar uma lista de salas

Primeiro, vamos criar uma lista de salas para facilitar o gerenciamento das salas. Ao declarar esse array, podemos usá-lo para definir nossos valores $ player e $ wumpus sem repetir o código. Ele também tem outra vantagem que exploraremos a seguir.

O teste com este código deve se comportar exatamente como antes.

Etapa 6: Eliminar salas

Eliminando salas
Eliminando salas

Eu adicionei uma única linha de código ao código anterior (destacado).

Os arrays no Sugarcube têm uma função incorporada que permite excluir elementos deles pelo nome. Nesse caso, assim que atribuirmos um quarto a $ wumpus, podemos excluí-lo de nossa lista de $ quartos. Esta função é complicada, no entanto. Não funcionará a menos que a saída da função seja atribuída ou usada de alguma forma. Para cuidar disso, criei a variável temporária _temp.

No Sugarcube, as variáveis temporárias começam com um sublinhado (_) em vez de um dólar ($). Eles são úteis porque são excluídos assim que a passagem é executada, então você não precisa se preocupar com nomes de variáveis sobrepostos.

Estou excluindo $ player room da $ roomlist também, como uma coisa natural.

Etapa 7: Teste

Testando
Testando
Testando
Testando

Embora pudéssemos executar o código como está agora, esse não seria um teste muito completo. Se executarmos o código e descobrirmos que $ player e $ wumpus estão atribuídos a salas diferentes, não sabemos se é porque o código funciona ou se é apenas um acaso. Claro, poderíamos executar o código muitas vezes e supor que, se ele nunca atribuir a ambos a mesma sala, nunca o fará, mas isso vai levar uma eternidade e ainda não é uma garantia 100% de que isso nunca vai acontecer.

Em vez disso, precisamos de uma maneira de verificar.

Eu adicionei três linhas ao topo de nossa passagem de introdução que nos permitirá ver os valores de nossas variáveis $ wumpus, $ player e $ roomlist. Por causa da maneira como configuramos nosso código, sabemos que a sala $ wumpus e a $ player room devem ser eliminadas da $ roomlist.

Quando executamos este código, podemos verificar se é esse o caso.

Etapa 8: estranhezas com cubos de açúcar e objetos

Estranhezas com cubos de açúcar e objetos
Estranhezas com cubos de açúcar e objetos
Estranhezas com cubos de açúcar e objetos
Estranhezas com cubos de açúcar e objetos
Estranhezas com cubos de açúcar e objetos
Estranhezas com cubos de açúcar e objetos

Objetos de cubo de açúcar são um pouco estranhos. Deixe-me demonstrar isso.

Enquanto estava construindo este projeto originalmente, eu queria salvar minha $ roomlist em uma variável $ saveroom antes de começar a excluir quartos dela. Achei que seria útil mais tarde.

Quando recebi algum comportamento estranho deste código, adicionei outra linha à minha página de introdução para permitir que eu olhasse minha variável $ saveroom (segunda imagem).

Fiquei chocado ao descobrir que os elementos que eu havia excluído de $ roomlist também haviam sido excluídos da minha lista salva! Você pode ver isso em ação na terceira foto.

Isso ocorre porque quando você copia um array como este, você não está realmente dizendo ao Twine para copiar o array, você está dizendo ao Twine que essas duas variáveis são o mesmo array. Quando você faz algo no array usando uma variável, ele muda o mesmo array que a outra variável está olhando!

Podemos consertar isso com a função clone ().

Etapa 9: a função Clone ()

A função Clone ()
A função Clone ()
A função Clone ()
A função Clone ()

Você pode ler sobre a função clone () na página de documentação do Sugarcube.

Uma cópia "superficial" é o que estávamos fazendo antes. Em vez de fazer uma cópia completa de todo o array, ele apenas assume que sua variável está trabalhando com o mesmo array. Em vez de uma cópia superficial, clone () faz uma cópia "profunda", que se comporta como você esperaria. Cada elemento da matriz é copiado em uma nova matriz e é totalmente separado do original.

Se testarmos esse novo código, descobriremos que funciona conforme o esperado.

Claro, não importa se você mantém $ lista de quartos ou não. Para os propósitos do meu projeto, eu não vou. Isso tudo foi apenas para demonstrar cópias profundas vs. rasas.

Etapa 10: Por enquanto é isso

Por enquanto é isso!
Por enquanto é isso!

Adicionamos um código que permite que nosso jogador comece em uma sala aleatória. Além disso, eliminamos um bug em que o jogador começava na mesma sala que o Wumpus.

Aprendemos como criar links a partir de variáveis e como a cópia de array é tratada pelo Sugarcube.

As coisas estão acelerando, mas estamos apenas começando!

Caçada feliz!

Recomendado: