Clonando personagens no Scratch

Clonando personagens no Scratch
Imagem de destaque

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-203e203`:

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.

Yuri Matheus
Yuri Matheus

Yuri é desenvolvedor e instrutor. É estudante de Sistemas de Informação na FIAP e formado como Técnico em Informática no Senac SP. O seu foco é nas plataformas Java e Python e em outras áreas como Arquitetura de Software e Machine Learning. Yuri também atua como editor de conteúdo no blog da Alura, onde escreve, principalmente, sobre Redes, Docker, Linux, Java e Python.

Veja outros artigos sobre Programação