Clonando personagens no Scratch
Estou desenvolvendo um jogo em Scratch de batalhas em espaçonaves. Para batalhar precisamos de inimigos, então vamos criar esse nosso inimigo.
Esse nosso inimigo, assim como o nosso personagem no jogo, é um ator, portanto, vamos falar para o Scratch criar nosso novo ator:
Como nosso jogo se passa no espaço, vamos escolher uma nave para ser nosso oponente. O Scratch já disponibiliza um monte de imagens para usarmos nos nossos atores:
Mas essa nave não está bem no estilo que gostaria… Vamos falar para o Scratch mudar a fantasia desse nosso ator. Eu já tenho aqui uma outra fantasia (sprite) da nave inimiga, vamos falar para o nosso ator vesti-la:
Se nosso ator ficar parado na tela, o jogo vai ficar muito chato, logo, vamos fazer ele se movimentar pela tela para deixar o jogo um pouco mais dinâmico. Ou seja, vamos falar para o nosso ator mover uns 10
passos:
Nossa nave já está se movimentando, porém o seu movimento está um pouco estranho, não? Temos que ficar clicando na bandeira verde para a nave se movimentar. Além disso, ela começa no meio da tela. O legal seria se a nave começasse em uma ponta da nossa tela e deslizasse até a outra parte. E continuasse essa ação enquanto o jogo não termina.
No Scratch, nós podemos passar a posição de um elemento tanto no eixo horizontal (x
), quanto no eixo vertical (y
). Vamos falar para o nosso ator que, assim que o jogo começar, ele vá para a nossa o centro direito da tela. No meu caso, essas são as posições 0
para x
e -260
para y
Legal, nosso ator já está começando sempre no mesmo lugar da tela, mas ainda temos que falar para ele deslizar dessa ponta da tela até a outra:
Nosso ator está um pouco grande para o tamanho da nossa tela, vamos falar para o Scratch mudar o tamanho do nosso ator para a metade assim que o jogo começar, antes mesmo de mudar a posição:
Nosso ator já está andando, ou melhor, voando de um canto ao outro da tela, mas ainda temos aquele problema de que quando chega ao final, a nave fica parada. O que deve acontecer é: quando o ator chegar no final da tela ele desaparece e volta ao começo.
Ou seja, nosso ator deve se esconder e só aparecer quando ele voltar ao começo da tela:
Bacana! Mas, agora o nosso inimigo está desaparecendo e não aparece de novo. Veja que depois do bloco esconda
não existe mais nenhuma instrução, ou seja, o comportamento do nosso ator termina ali.
Mas não queremos que o comportamento do nosso ator termine ali, queremos que ele sempre
execute esses comandos:
O nosso inimigo já está tendo o comportamento que desejamos. Mas ele sempre está aparecendo no mesmo lugar, desse jeito fica fácil para o jogador fugir dele. E se o nosso inimigo sempre aparecesse em uma posição diferente?
Isto é, continuasse a aparecer em baixo da tela (eixo y
), mas aparecesse em posição horizontal diferente (eixo x
)?
Logo, queremos que a nave apareça em um local aleatório no eixo x, no meu caso, esse número deve ser entre
-203e
203`:
Legal, nossa nave está sempre começando em uma posição aleatória, mas ela está sempre indo para a mesma direção. Isso pode fazer o jogador achar o jogo muito difícil, ou muito fácil, então, vamos falar para a nave começar em um lugar aleatório mas manter a sua posição x
:
Agora nosso inimigo já tem um comportamento definido para o nosso jogo. Nosso jogo tem apenas um inimigo, mas e se quiséssemos adicionar outro? Teremos que criar um outro ator e colocar nele os mesmos atributos e comportamentos deste que já criamos?
E se quiséssemos alterar algum comportamento do nosso inimigo, teremos que alterar em cada ator esse comportamento? Talvez com dois inimigos isso não possa ser um problema tão grande, mas e colocarmos cinco, dez, cem inimigos? Teremos que alterar um por um?
A guerra dos clones
Nós queremos criar um outro ator que tem as mesmas características do nosso inimigo. Ou seja, eles vestirão a mesma fantasia, terão os mesmos comportamentos e atributos, nós queremos um clone!
Vamos falar para o Scratch que quando o jogo começar, ele crie um clone para a gente da nossa nave inimiga:
Nosso clone foi criado, mas ele ainda não está fazendo nada. Temos que dizer ao nosso clone o que ele vai fazer. Então, vamos falar para o clone que quando ele for criado ele vai ter o comportamento do nosso ator principal.
Humm… nosso clone não está fazendo nada, veja que nosso clone é uma cópia do ator principal, mas ele pode ter características e comportamento próprio. Então, nós temos que dizer para o nosso clone realizar as mesmas ações do nosso ator principal.
Mas se nós simplesmente copiarmos as características e comportamentos do nosso ator principal no clone vamos voltar ao mesmo problema que estamos tentando resolver, o código será duplicado.
O lado bom dos clones é que as características que passamos para um são propagadas aos demais. Isto é, um clone sempre é igual a outro clone. Portanto, o que nós podemos fazer é colocar todas as características e comportamento do nosso ator nos clones.
Dessa forma, sempre que criarmos um clone, ele já terá tudo que precisa no nosso jogo. Vamos falar para o nosso ator que quando o jogo começar ele crie os clones. Enquanto isso, quando os clones forem criados eles terão o comportamento da nossa nave inimiga.
Agora nós podemos criar quantos clones quisermos que ele sempre terão os mesmos comportamentos. Mas agora nossa nave principal, aquela que não é clone, está sem comportamento.
Bem, como são os nossos clones que tem o comportamento, nós podemos falar para ela se esconder depois que os clones forem criados:
Para saber mais
Já temos um comportamento dos inimigos no nosso jogo, mas ainda precisamos criar o nosso protagonista e outros elementos para deixar nosso jogo mais divertido e dinâmico.
O Scratch é uma ferramenta muito utilizada para aprender lógica de programação, criar animações, aprender sobre matemática e física e muitas outras coisas.
Essa ferramenta é tão usada que aqui na Alura temos uma plataforma com vários cursos sobre o Scratch.
Na AluraStart, temos diversos cursos sobre o Scratch, neles, você aprenderá como fazer um jogo de espaçonaves, como esse nosso jogo, como criar um jogo de cobrança de pênaltis, como criar um robô que adivinha seu nome e muito mais.