Projeto 5 - Flor em Ação
Neste projeto, vamos desenvolver um jogo em que o ator principal, a Flor, se movimenta para esquerda e para direita com ajuda de botões, este ator deve esquivar do fogo para não perder vida e coletar a água para marcar pontos.
A mecânica do jogo é baseada em pegar o máximo de pontos possíveis coletando as gotas de água, porém o jogador deve estar atento ao fogo porque o ator Flor terá somente 3 vidas, ou seja, o jogo acaba quando a Flor encostar no fogo pela terceira vez.
A versão que vamos construir é composta por vários atores, a flor, o fogo, a água, dois atores setas (esquerda e direita) e três atores coração (um para cada vida). Veremos que o código dos atores que se repetem serão bem próximos, tendo somente pequenas mudanças. Neste projeto aprenderemos a usar novas funções, os blocos Sempre, Organize e Quando na Borda.
Do ponto de vista de programação, o bloco Sempre corresponde ao laço “while”, mas no caso do Sempre, ele cria um loop infinito que executa continuamente os comandos que estão dentro dele. Já o bloco Organize serve para escolhermos qual ator aparece na frente ou atrás, por fim, o bloco Quando na Borda executa seus comandos quando o ator encostar em uma das bordas da tela.
Blocos Utilizados
O Ator Flor
Começaremos com o código que controla o movimento do ator flor, composto pelos quatro primeiros blocos da imagem (temos 2 blocos Quando Receber que serão acionados por blocos Transmita que serão criados em outros atores), portanto quando o ator receber “esquerda” irá se mover para esquerda e quando receber “direita” irá se mover para a direita. Além disso, para que ele não consiga sair da tela, faremos com que ele seja movido para a direita caso encoste na borda esquerda e ser movido para esquerda caso encoste na borda direita.
Para que tenha uma pequena “animação” quando a flor perder vida, faremos com que, quando a flor encostar no fogo, ela pisque. Podemos fazer isso utilizando o bloco Quando Encostar a flor no fogo mostraremos a flor com 40% da opacidade e depois voltaremos ao normal mostrando 100%. A posição inicial deste ator será na parte central da tela.
Os Atores Seta
O código das setas será basicamente igual, utilizando um bloco Transmita para fazer a flor se movimentar. Também faremos uma animação para parecer que o ator realmente é um botão sendo apertado. Seguindo essa linha de raciocínio, faremos com que o botão sempre esteja acima da flor com o bloco Organize estando ligado a um bloco Quando Play.
Para o código da seta esquerda colocaremos um bloco Quando Tocar no ator, ele perderá opacidade (para parecer que está sendo apertado) com o bloco Mostre 50%, logo após transmitirá “esquerda” para a flor se movimentar e esperará o movimento acabar para o botão deixar de ser apertado, ou seja, colocamos um bloco Espere num tempo bem curto (0,1 s) e em seguida o bloco Mostre 100%, para garantir que o botão sempre fique na frente da flor, utilizaremos o bloco Organize para que a seta “fique na frente da” flor.
Para a seta direita teremos basicamente o mesmo código, porém ela transmitirá direita em vez de esquerda, as posições iniciais das setas serão nas laterais da tela.
O Ator Gota
No ator Gota, iniciaremos a variável pontos, que contará quantas gotas o ator Flor pegou, colocando um bloco Quando Play e definindo a variável pontos como 0. Para que os pontos aumentem a cada gota coletada, faremos um bloco Quando Encostar para que quando a gota encoste na flor, ela desapareça com o bloco Esconda e aumente os pontos em 1 com o bloco Mude Variável.
Em relação a movimentação da gota, dentro de um bloco Quando Play, colocaremos um bloco Sempre para que o movimento sempre aconteça, então, dentro do loop Sempre, colocaremos um bloco Esconda para que a gota possa se mexer sem o jogador ver, utilizando um bloco Vá Para com o Y: 180 (topo da tela) e um valor aleatório no X entre 10 (lado esquerdo da tela) e 310 (lado direito da tela), logo após, mostraremos a gota com o bloco Mostre e ela cairá com o bloco Mova para baixo, depois de cair o loop recomeçará com ela escondendo novamente.
(Os valores para X e Y no comando Vá Para tem a ver com o tamanho que foi definido para a tela do Octostudio: 320x180, sendo que o ponto (0,0) é o canto inferior esquerdo.)
O Ator Fogo
O código do ator Fogo é formado pela parte que detecta que ele entrou em contato com a flor, logo a flor deve perder uma vida e pela parte que aleatoriza seu comportamento e localização. Primeiramente iniciaremos a variável vida, junto do bloco Quando Play, definindo-a inicialmente como 3. Porém, não queremos que a variável fique visível, visto que marcaremos as vidas com os atores Coração, logo, utilizamos o bloco Mostre Variável desativado. Para a segunda parte basta colocarmos um bloco Quando Encostar com um bloco Esconda para o fogo sumir e um Mude Variável para diminuir 1 da variável vida.
Para sua movimentação, dentro de um bloco Quando Play, colocaremos um bloco Sempre para que o movimento sempre aconteça, e dentro desse loop colocaremos um bloco Esconda para que o fogo possa se mexer sem o jogador ver, então, dentro do loop Sempre, colocaremos um temporizador Aleatório para não conseguirmos perver o comportamento do fogo e ele fique diferente do comportamento da gota, ou seja, colocaremos um bloco Espere com um valor aleatório entre 1 e 3 segundos, depois um bloco Vá Para com o Y: 180 (topo da tela) e um valor aleatório no X entre 10 e 310, logo após mostraremos o fogo com o bloco Mostre e ele cairá com o bloco Mova para baixo, depois de cair esconderemos ele novamente.
Os Atores Coração
Utilizaremos um código parecido para cada um dos 3 atores coração, cada um representando uma das vidas. O bloco Quando Play será utilizado para começar o loop do bloco Sempre que checará todo instante se a flor perdeu alguma vida, se a flor não perdeu vida, todos corações estarão visíveis, se só tiver 2 vidas então 2 corações estarão visíveis e assim por diante, então colocaremos dentro do loop sempre um bloco condicional Se para checar no primeiro coração se a vida é menor que 3, no segundo coração se a vida é menor que 2 e no terceiro coração se a vida é menor que 1, caso isso aconteça o coração deve desaparecer com o comando Esconda. Também colocaremos no último coração algo que encerre o jogo, porque a flor perdeu todas suas vidas, então colocaremos o bloco Vibre e Pare tudo.
A posição inicial destes atores será na parte superior direita da tela, para que fique visível a quantidade de vidas da flor, sendo que a primeira vida deve ser o coração da esquerda e a última vida sendo o coração mais à direita.
Para o Futuro
- Implemente sons quando o ator colidir ou pontuar. (Toque o Som)
- Faça que a pontuação seja mostrada na tela ao final do jogo. (Diga)
- Adicione um limite de tempo ao jogo. (Variável) (Se)
- Faça com que apareça mais fogos/gotas na tela.
- Faça com que a Flor consiga se mover para cima e para baixo e que venha fogo de mais direções.