Tutorial: Programando no Twine – Parte 7 – Estruturas de Repetição

Oi, pessoal!

No nosso último tutorial estudamos macros interativas, além de alguns itens para permitir ao usuário entrada de dados.

Hoje vamos explorar o assunto de estruturas de repetição: tanto na forma rudimentar de simulá-la, quanto na forma macro no “for”, oferecida pelo layout SugarCane.

Esse é o penúltimo tutorial da série. Seria o último, mas ainda vou ensinar para vocês como inserir músicas. 😉

Estruturas de Repetição no Twine

repeticao_estruturaPara quem já programa, usar estruturas de repetição ajuda basicamente em comandos muito repetitivos, como o próprio nome sugere.

Imagine um exemplo bem simples: você precisa dar um print 100 vezes de uma mensagem. Você fará 100 comandos <<print (mensagem)>>? Isso dá muito trabalho. No entanto, com uma estrutura de repetição, você faz apenas um print e isso indica que aquele comando precisa se repetir 100 vezes.

O código fica mais enxuto e menos trabalhoso para o programador.

Vamos utilizar alguns exemplos para entender melhor na prática. Iremos ver um modo mais rudimentar de simular repetição (nem todos os layouts Twine tem uma macro para isso), mas também a macro <<for>> contida no SugarCane. Esse foi o layout base que usamos praticamente em todos os tutoriais Twine e ele, de fato, é o melhor oferecido por default.

Vamos primeiro aprender do jeito mais complicado.

 

Simulando uma Repetição no Twine

Nós na verdade já fizemos uma espécie de repetição nos tutoriais anteriores. Basta analisar, por exemplo, o modo batalha que fizemos nesse tutorial.

Existe uma repetição do tipo “Enquanto nenhum dos dois morrerem, continue a batalha, chamando o display da Batalha”. Ele irá ficar chamando a tela de luta, mostrando energia, permitindo novos dados até que um deles sucumba ao chão (ou os dois). Assim, permite-se o fim da repetição. Vocês verão que o princípio é basicamente isso.

Primeiramente, vou criar um exemplo genérico para que entendam o uso.

Toda a repetição inicializa com um valor, tem um critério de parada e um passo que vai levar até o critério de parada ser falso.

No nosso caso, na primeira passagem (start) inicializei com zero as variáveis $cont_while, que são para controlar o while, e $cont_for, para o for.

Depois, chamos as passagens que fazem o “while” e “for”, propriamente ditos, por meio da macro <<display>>.

Tutorial_Twine_Prog_P7_02

A seguir, criamos a passagem do while. Se o $cont_while for menor que 5, ele executa os comandos dentro do if. Ou seja, uma forma de mandar a mensagem “Oi !”. O set ali é para aumentar em 1 o valor de $cont_while. Logo, começa com zero, depois 1, 2… até ser 5. Perceba que chamo a passagem do while novamente via <<display>>. Quando irá parar? Quando $cont_while for igual a 5 e não será mais menor que 5. Dessa forma, dá falso no <<if>> e não o executa mais, terminando tudo.

No resultado final, terá que mostrar cinco vezes a mensagem “Oi! ”.

Tutorial_Twine_Prog_P7_03

O mesmo princípio é aplicado a passagem do for.  Ele verifica se o $cont_for é menor ou igual a 5. Se for, mostra o valor de $cont_for, adiciona um traço “ – “ e muda o valor dele depois, acrescendo 1. Quando acaba? Quando o $cont_for chega ao valor 6, pois não executará mais nada no if.

Nesse caso, mostrará os número de 0 a 5, separados por traço “0 – 1 – 2 – 3 – 4 – 5 –“

Tutorial_Twine_Prog_P7_04

Veja o resultado final da execução:

Tutorial_Twine_Prog_P7_05

Entendido? Vamos agora usando a macro <<for>> do SugarCane e com esse mesmo exemplo aplicado. O “Oi” servirá só para explicar o assunto.

 

Repetição Usando a Macro <<For>> no SugarCane

Primeiramente, vou repassar a referência da documentação sobre a macro for. Segue o acesso: For – SugarCane.

Vamos a sintaxe (tem duas formas de uso):

<<for (expressão condicional)>>
<<for (início); (expressão condicional); (passo a ser seguido na repetição)>>

Um exemplo simples de uso seria a forma de mostrar decrescendo a vida de um jogador. Aqui o for assume uma forma como se fosse um while. Setei o valor de $vida igual a 5. Depois usei o for. Enquanto a $vida for maior que zero, continue a exibir o seu valor, descontando 1. Ao descontar esse 1, a cada interação, uma hora chega em zero e o for vai parar, pois a condição se tornará falsa. Nesse caso, mostrará as vidas de 5 a 1. Perceba que a ideia é a mesma dos anteriores que vimos, mas está mais simples de entender.

Na segunda parte, serão mostrados os números de 1 a 10. Ele tem como início $contador = 1. A condição para continuar a repetir é enquanto o $contador for menor ou igual a 10. Enquanto for, o passo será de 1 em 1, ou seja $i++ ou $i=$i+1. A mesma coisa para as duas formas.

Segue o desenvolvimento do código:

Tutorial_Twine_Prog_P7_06

Segue o resultado final:

Tutorial_Twine_Prog_P7_07

Perceba também que não precisamos, nesse caso, de uma passagem específica para simular a repetição, pois já tem uma macro criada para isso.

Esse exemplo também foi bem simples para demonstrar uso.

Vamos agora a um caso prático de verdade?

 

Exemplo Prático – Jogo da Forca

jogo_forca_exemploVamos criar um jogo da forca no Twine? É bem tranquilo. Nele, usaremos repetição e outros termos.

Aqui não fiz a previsão de acentos, caso a palavra tenha isso, mas, com essa base, dá para colocar imagens, criar mais coisas, arrumar esses acentos e deixar bem interessante esse game.

Depois esse jogo servirá como base para adicionarmos música a ele no próximo tutorial.

Primeiramente, vamos observar uma visão global de como organizei o jogo. Perceba que criei módulos para separar algumas rotinas do jogo. Assim, fica mais fácil de alterar/modificar/entender o nosso game.

Tutorial_Twine_Prog_P7_08

Agora, vamos a cada passagem para entender o que fiz.

Na primeira passagem, start, chamo uma passagem “setandoInicioJogo” onde coloco variáveis iniciais e seus valores. Uma mensagem de boas vindas e link para jogar.

Tutorial_Twine_Prog_P7_09

Explorando a “setandoInicioJogo”, crio uma série de variáveis descritas a seguir:

  • $chances = Número de chances para errar a letra que a palavra não possua. Ele tem 5 chances no nosso jogo;
  • $palavras = Vetor com palavras para serem sorteadas. Será o nosso banco de palavras para o jogo da forca. Tem formas melhores de fazer isso com arquivos e banco de dados, mas é só um exemplo e teria que ter um tutorial só para explicar isso;
  • $palavra_jogo = sorteia uma das palavras. A palavra sorteada vai à forca. Usei a função Array.random() para sortear no vetor qual palavra seria. Zero para a primeira até 4, a última palavra;
  • $tamanho_palavra = pega o tamanho da palavra sorteada. Apliquei .length para saber o tamanho da palavra;
  • $palavra_forca = vetor que mostrará ao jogador a palavra se revelando. Inicia com underline (_), conforme o for contido ali;
  • $letra_chutada = Letra que o Jogador chutará. Começa com @ para indicar que é primeira rodada e o jogador não perder chances na verificação ao ir para [[Jogar]].

Caso tenha dúvidas na parte de vetores, já trabalhamos o tema nos tutoriais. Revise-o e volte aqui depois. 🙂

Tutorial_Twine_Prog_P7_10

Perceba que também coloquei um uso de for para deixar a $palavra_forca inicializada com “_”. Assim, vou exibir para o jogador com underlines a palavra. Senão não é forca.

Como vou saber se ele acertou? Pela $palavra_jogo, pois o tamanho e posição desse vetor e $palavra_forca são exatamente iguais.

Indo agora na passagem “Jogar”, temos vários displays que chamo ali e ela é o que centraliza tudo em nosso game. Chamo um display que avalia a letra que o jogador clicou ($letra_chutada). Na primeira vez, ele avaliará @ e não fará nada.

Depois, chamo outro que mostra o HUD com as chances que o jogador ainda tem, além da palavra a ser revelada na forca.

Por último, faço uma verificação: se o vetor de $palavra_forca ainda tiver “_” e as chances forem maiores que zero, o jogo continua com ele chutando letras. Claro, se ele ainda tem chances, deve continuar a jogar e, caso a palavra ainda não esteja totalmente revelada, também. Caso uma dessas condições deixem de ser verdadeiras, cairá no <<else>> e fim de jogo (tanto quando ganha ou perde).

Tutorial_Twine_Prog_P7_11

Perceba que existe um display dentro do <<if>> chamando “mostrarAlfabeto”. Essa passagem mostra as letrinhas para clicar e, conforme o clique do jogador, o valor da variável $letra_chutada vai mudar para a letra que o jogador escolheu chutar.

Nesse sentido, vamos ver os outros displays que “Jogar” usa. Começarei com “mostrarAlfabeto”. Ele mostra os links com cada letra e, conforme a escolha, muda o valor da variável $letra_chutada para o valor respectivo. Tem como fazer isso com repetição e tabela ASCII. Não fiz aqui para não complicar demais, mas saiba que tem como fazer em poucas linhas essa exibição do alfabeto. Também tem como fazer [[A->Jogar][$letra_chutada=”a”]], por exemplo. Vai do gosto do freguês.

Tutorial_Twine_Prog_P7_12

Já na passagem “avaliaLetra”, ela vai pegar o valor de $letra_chutada e comparar com cada célula do vetor $palavra_jogo. Caso encontre a letra chutada em um lugar do vetor, significa que a palavra do jogo tem essa letra e já vamos marcar no vetor $palavra_forca. Dessa forma, o vetor $palavra_forca vai ser atualizado para revelar a letra que ele escolheu. Veja a imagem ilustrativa sobre o processo:

letra_forca_chutada_Twine

Ao encontrar a letra chutada, a variável $tem_letra muda de valor para verdadeiro. Essa variável vai servir para ver se o jogador chutou certo a letra (true) ou errado (falso). Se chutou certo, nada acontece, mas observe o próximo <<if>>. Caso ele chutou errado, ele vai perder uma chance. Depois, zero de novo $tem_letra para false, assim recebendo um novo chute do jogador.

Tutorial_Twine_Prog_P7_13

Por último, a passagem “mostrarHUD”. Ela mostra as chances que o jogador ainda tem e a palavra a ser revelada no jogo da forca.

Tutorial_Twine_Prog_P7_14

Quer a melhor forma de ver isso acontecendo? Brinque com o jogo aqui: Jogo da Forca – Fábrica de Jogos.

Usei algumas funções de vetores que você pode não conhecer. Confira essas e outras mais aqui.

 

 

Aprendemos nesse tutorial a usar repetições no Twine. Vai facilitar e muito a sua vida, acredite. 😉

No nosso último tutorial de Twine, aprenderemos a inserir e manipular músicas nesse software. Vamos fazer aquela trilha sonora e efeitos legais no seu game narrativo.

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