Tutorial: Programando no Twine – Parte 2 – Condicionais, Operadores Relacionais e Lógicos

Olá, povo

Iniciamos os trabalhos de programação no Twine no tutorial passado. Conhecemos conceitos de macro, variáveis e brincamos com os operadores aritméticos.

Agora vamos explorar a parte de condicionais e seus operadores de uso.

Aos poucos, vamos incrementando e aprendendo mais ferramentas para deixar nosso game/narrativa mais interativo.

Desafio do Último Tutorial

Deixei dois desafios para vocês. O primeiro consistia em não deixar espaços em branco na história quando se usava uma macro ali. A solução é usar a macro <<nobr>> e <<endnobr>>. Tudo que estiver ali dentro dos dois, vai ficar sem linhas em branco.

Veja a solução na prática sendo aplicada. Usei duas vezes em trechos diferentes, pois as macros que coloquei dentro estavam deixando esse espaço em branco indesejável.

O resultado fica show. Teste e veja. 😉

Tutorial_Twine_Prog_P2_01

O segundo desafio era fazer com que aparecesse HUD de vidas, dinheiro e chaves em todas as passagens.

Primeiro, crio uma passagem separada, só para mostrar o HUD, como esta abaixo:

Tutorial_Twine_Prog_P2_02

Depois, só usar a macro <<display (nome da passagem que está o HUD)>> que apresenta todo o texto de outra passagem inteirinho. Pronto. Onde você usar, vai aparecer o HUD. Feito e reaproveitável para tudo. 😉

Tutorial_Twine_Prog_P2_03

Mas vamos ao assunto do tutorial de hoje.

 

Condicionais em Twine

Ao se deparar com situações que envolvam uma situação específica para ocorrer, levando a vários caminhos possíveis, você está diante de uma condição.

Para quem já mexe com programação, é o famoso Se…, Se… Senão… e estruturas aninhadas com vários se… senão e por aí vai.

A macro para isto segue a sintaxe abaixo:

<<if (expressão) >> Texto <<endif>>
<<if (expressão)>> Texto <<else>> Texto <<endif>>
<<if (expressão)>> Text <<elseif (expressão)>> Texto … <<endif>>

Na documentação Twine está na seção <<if>>.

Vamos a um exemplo prático então para ficar mais fácil de entender. Imagine que o jogador tem que decidir qual das chaves que possui quer tentar abrir a porta azul: chave da cor azul, vermelha ou verde. Veja a passagem que criei chamada “Passagem Azul” para isso:

Tutorial_Twine_Prog_P2_04

Perceba que usei um nome diferente para cada passagem, mas que todas levam a passagem “Abrindo Porta”. Afinal, será lá que farei uma verificação para ver qual chave ele tentou usar para abrir a porta azul. Lembra-se que, antes, usávamos uma passagem para cada opção. Agora não precisa mais. Basta uma que trata todas as opções de escolha do jogador. 😉

Só cuidado que, essa versão Twine, dá um erro onde mostra o fluxo da história. Ele fará links para passagens com nomes estranhos. Apague essas passagens e deixe somente a duas passagens em questão. No meu caso, “Porta Azul” e “Abrindo a Porta”, essa última onde usarei as condições. Elas ficarão sem o elo (seta apontando), mas, se executar, verá que funcionará normal. Isso é um bug que já foi notificado para que corrijam em nova versão do Twine 2. Vamos aguardar. Veja como fica no fluxo:

Tutorial_Twine_Prog_P2_05

Agora vamos trabalhar na passagem “Abrindo Porta” para validar as escolhas de chaves do jogador. No caso, vou fazer primeiro para verificar se é azul. Se for a chave azul escolhida, abre a porta. Senão, não mostrará nada para ele.

Tutorial_Twine_Prog_P2_06

Na execução, verá que, somente ao escolher a chave azul, você verá a mensagem. Nas outras não. E se eu quiser deixar uma mensagem nas outras? Aí será necessário usar as condições senão <<else>>.

Vou fazer primeiro validando se a chave é azul. Se for, digo que abriu a porta. Se não for, digo que não abriu a porta. O que muda? Somente a passagem “Abrindo Porta”. Veja aqui:

Tutorial_Twine_Prog_P2_07

Nesse caso, ele primeiro verifica se a chave escolhida foi a azul. Caso seja, ele executa o comando entre o <<if>> e <<else>>. Afinal, poderiam ter mais comandos ali dentro.

Caso não seja a chave azul (else, caso contrário), ele vai executar os comandos entre o <<else>> e <<endif>>.

Perceba também que usei uma tag “nobr” na postagem. Senão, daria vários espaços para cada macro que usei. E não quero isso. Já vimos sobre isso em TAGS. Dá uma olhada lá para relembrar. 🙂

Vamos agora deixar ainda mais robusto. Eu vou dar uma mensagem personalizada para cada chave que ele escolher. Dessa forma, vou ter que usar a estrutura aninhada. Veja como fica:

Tutorial_Twine_Prog_P2_08

Nessa situação, primeiro vejo se é azul. Se for, digo que é dessa cor. Senão, só pode ser vermelha ou verde. Logo, verifico se é vermelha. Se for, exibo que é dessa cor. Senão, só pode ser verde (a única opção que sobrou).

A diferença dessa estrutura é que ele avalia mais opções, no caso de ter 3 ou mais alternativas de escolha e mensagens/funções diferentes para cada uma delas. Tranquilo, né? Só ir adicionando <<elseif>> e vai colocando mais coisas. Em Twine, não achei estrutura tipo switch (escolha) da programação tradicional. Então, o jeito é usar o que vimos aqui.

Perceba também que usamos na comparação <<if $chave is “azul”>>. O is é um operador de comparação para ver se a variável chave é igual ao valor “azul”.

Logo, vamos conhecer os operadores que podemos brincar aqui então.

 

Operadores Relacionais e Lógicos

Como agora estamos comparando, relacionando variáveis e valores, vale a pena estudarmos estes operadores.

Segue a tabela com exemplos de uso de cada um deles:

Tutorial_Twine_Prog_P2_09

Um dos relacionais já usamos no exemplo das chaves. Agora, vamos usar outro exemplo com relacionais.

Dinheiro e Compra de Item – Imagine que quero verificar se o dinheiro do jogador é menor que 300, por exemplo, para impedir que compre um item que custa 300. Afinal, não teria dinheiro para comprá-lo. Se for, diga que não pode comprar o item. Se não for, compre o item.

O código de cada passagem ficaria assim:

Tutorial_Twine_Prog_P2_10

Perceba que coloquei mais de um comando quando há a compra do item, ou seja, o dinheiro é maior ou igual a 300. Desconto o valor do item do dinheiro do jogador (300), exibo uma mensagem de compra e depois mostro o dinheiro como ficou.

 

Dinheiro e Madeira para Construir uma Casa – Outro exemplo seria: preciso verificar se o dinheiro dele é maior ou igual a 300 e a madeira maior ou igual a 200. No nosso fictício exemplo, ele só pode construir uma casa com 300 de dinheiro e 200 de madeira. Nesse caso, temos duas condições a serem testadas: o dinheiro E a madeira. As duas condições precisam serem verdadeiras. Logo, são necessários operadores lógicos para ligar as condições.

Operadores lógicos usamos para testar mais condições a um mesmo <<if>>. Para cada um, existe um uso específico.

O código ficaria assim:

Tutorial_Twine_Prog_P2_11

No caso do and, basta que uma delas seja falsa para impedir a compra, pois ele precisa dos dois recursos naquela quantidade. Se usasse or (OU), teria que ter apenas uma das duas condições verdadeiras, ou seja, apenas um dos recursos na quantidade correta. Aí, ele poderia comprar tendo 300 de dinheiro ou 200 de madeira. Estaria errado.

Uma tabela-verdade de valores lógicos ajuda bastante, nesse sentido, para entender cada operador lógico. Veja mais sobre eles aqui.

Todos os operadores aqui também constam na documentação na etapa EXPRESSION.

Fique tranquilo que, se não está familiarizado com programação, vamos usá-los mais pelos tutoriais Twine. Mas recomendo dar uma estudada legal nos operadores trabalhados aqui.

 

 

Desafio para o Próximo Tutorial

Tente adaptar o segundo problema (da madeira e dinheiro para construir a casa), mas agora usando o operador or (OU), não mais o E, fazendo a mesma coisa.

Faça uma analogia com os exemplos daqui, adapte, tente fazer e vemos a solução no próximo tutorial.

 

 

Vimos nesse tutorial as macros condicionais, além dos operadores relacionais e lógicos. Afinal, eles seriam úteis agora para tratarmos condições.

Mais uma vez estamos conhecendo recursos para deixarmos nosso jogo/narrativa mais interessante.

No próximo tutorial, vamos conhecer algumas funções que o Twine já tem prontas. Basta usar e criar mais recursos bacanas. Uma delas é uma função para gerar números aleatórios, muito útil, por exemplo, para simular a aleatoriedade de um rolar de dado.

Até mais e botem em prática. ;D

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