Tutorial: Programando no Twine – Parte 3 – Uso de Funções

Mais uma continuação do nosso tutorial de programando com o Twine.

Estudamos no último sobre macros de condição e brincamos com seus vários usos, além de conhecer operadores relacionais e lógicos.

Hoje vamos conhecer algumas funções que o Twine já tem prontas para só usarmos.

Vamos nessa.

Desafio do Último Tutorial

Pedi um desafio a vocês no último tutorial: adaptar o problema da madeira e dinheiro, usando o operador OU, não o E como estava sendo. Veja a solução:

Tutorial_Twine_Prog_P3_01

Nesse caso, quando uma das condições forem verdadeiras, ou as duas forem, significa que ele não pode construir a casa. Agora, se nenhuma for verdadeira, ele tem a quantidade de cada recurso suficiente para construir a casa e cai no else.

Perceberam que a construção lógica mudou, mas o efeito de validar a compra é o mesmo do anterior? Então não há uma regra. Vai de como você desenvolve a sua lógica. 😉

Vamos ao tema do tutorial de hoje.

 

 

Funções em Twine

Função já é algo que está implementado no Twine para você. O que você faz é apenas usar o recurso para uma determinada finalidade que ela foi construída.

As funções são sempre usadas dentro de links de passagens ([[ ]]) ou de macros (<< >>), ok? Senão não há efeito. Veremos na prática essas aplicações delas.

Não encontrei nenhuma possibilidade de criar funções como visto em programação, mas vou olhar com mais atenção. Em JavaScript é possível, mas digo pelo Twine mesmo.

Mas vamos conhecer as mais básicas aqui:

 

  • either (valor1, valor2…): ela vai escolher um valor aleatório que você colocar ali dentro e sortear. A cada execução da história, nesse trecho aplicado, pode mudar o valor, pois um novo é sorteado;
  • dadosrandom(valor_inicial, valor_final) ou random (valor_final): gera números aleatórios dentro de um intervalo de números ou até o valor final. Caso queira números entre 0 e 100, é necessário usar a sintaxe Math.random(). Esse último caso bom para números em percentual (0 a 100%). Aí, basta multiplicar Math.random()*100 para tê-lo dessa forma;
  • previous(): função que te dá como retorno o valor da última passagem passada. Útil para fazer voltas sem usar nome de passagem em links, por exemplo, ou usar para mencionar no texto;
  • visited(string, string…): conta quantas vezes você foi em uma passagem. No caso de mais passagens para contar, ele faz a contagem de visitas de todas. Por exemplo, se visitou 2 vezes uma passagem e 3 vezes a outra, ele contará 2, pois teve 2 visitas em cada uma delas. É interessante usar para saber se um jogador passou por uma ou mais passagens específicas na sua história, independente de uma, duas ou mais;
  • visitedTag(string, string…): mesmo princípio do visited(), mas agora para tags aplicadas na passagem;
  • turns(): dá o número de movimentos que o leitor/jogador já fez em sua história. A cada clique em link para outra passagem, ele vai contar para você;
  • passage(): retorna o nome da passagem onde essa função é oferecida;
  • tags(): retorna um vetor com todas as tags que estão aplicadas nessa passagem. Assim, você pode buscar da seguinte forma: tags().indexOf(“segredo”), caso a tag a ser buscada é “segredo”. Se encontrar, retorna verdadeiro. Senão, falso.
  • caixa_dialogoconfirm(string): lança uma caixa de confirmação na tela. Se apertar Ok, verdadeiro. Senão, falso. Boa para confirmar ações do jogador;
  • prompt(string,string): para mostrar uma caixa de diálogo. Útil para pegar dados do jogador;
  • alert(string): mostra uma caixa de alerta ao jogador;
  • open(string): serve para abrir URLS na história.

 

Tem funções aqui que voltaremos em outra parte do tutorial para aprofundar mais. Outras não abordei aqui, pois são pouco usadas ou necessitam de conhecimentos específicos que ainda não passei.

Acesso a documentação com a lista e exemplos em FUNCTION.

Vamos usar algumas na prática agora.

 

Exemplo de uso Prático

Vamos usar aqui um contexto de sorteio de um número para ganhar um prêmio.

Na primeira tela, usei a função either() para variar o prêmio: galinha ou bolo ou pepino.

Tutorial_Twine_Prog_P3_02

Resultado dessa parte:

Tutorial_Twine_Prog_P3_03

Já na segunda parte, usei a função previous() para voltar à tela anterior de prêmio. Assim, o jogador altera o prêmio a cada volta e você vê a aleatoriedade da função.

Tutorial_Twine_Prog_P3_04

Resultado dessa parte:

Tutorial_Twine_Prog_P3_05

Na última parte, vem o mais interessante que é o sorteio. Só que antes, ele pergunta, na caixa de confirmação, se você quer mesmo realizá-lo. Se apertar OK, será feito. Senão, o contrário. E fiz com temática Peppa Pig para vocês a caixa de confirmação. Haha 😀

Tutorial_Twine_Prog_P3_06

No código ficou da seguinte forma. Primeiro, imprimi o título da passagem com a função passage().

Depois, sorteei o número entre 1 e 15 e ele ficou registrado na variável $numero.

A chamada de função confirm() fez aquela pergunta de confirmação antes de realizar o sorteio. A variável $resposta recebe true (verdadeiro) se o jogador clicou em OK. Senão, false (falso).

Exibi o valor sorteado e depois usei a função visited() para contar quantas vezes o jogador entra na passagem “Sortear Número”. Assim, ele saberá quantas vezes já tentou um sorteio.

Por fim, faço a validação. Se o jogador quis fazer o sorteio e o número sorteado foi 5, ele ganha o sorteio. Senão, dou uma mensagem de lamentação e forneço o link para a própria passagem. Assim, ele pode tentar outro sorteio novamente.

Tutorial_Twine_Prog_P3_07

Como ficou na prática. Situação em que perde no sorteio:

Tutorial_Twine_Prog_P3_08

Também veja o resultado de quando ele ganha:

Tutorial_Twine_Prog_P3_09

Tranquilo, né? Teste e veja como fica tudo isso.

 

 

Vimos nesse tutorial a como usar funções prontas do próprio Twine.

Use sua criatividade e aplique em diversos contextos.

No próximo tutorial, vamos explorar um pouco sobre vetores, os mesmos da programação e mesma aplicabilidade.

Abraços e até mais.

Fabiano Naspolini de Oliveira

Fabiano Naspolini de Oliveira

Fabiano Naspolini de Oliveira (Editor-Chefe) – Formado em Análise e Desenvolvimento de Sistemas, Pós-Graduado em Docência para Educação Profissional, MBA em Game Design e Mestrado em Tecnologias da Informação e Comunicação. Foi redator do portal Nintendo Blast, professor de cursos técnicos e Game Designer/Sócio-Fundador do estúdio Céu Games por 6 anos. Atualmente, é professor de jogos digitais e escritor.

Send this to a friend