Clonando personagens no Scratch

Clonando personagens no Scratch
Imagem de destaque #cover

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:

Banner da Escola de Programação: Matricula-se na escola de Programação. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

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