Você está na página 1de 100

Caelum Sumário

Sumário

1 Atores, adversários, cenário e música 1


1.1 Introdução 1
1.2 Minha própria nave 1
1.3 Criando um inimigo 8
1.4 Planetas e gráficos 12
1.5 Compartilhando o nosso jogo 16

2 Planetas, colisões e efeitos sonoros 18


2.1 Planetas e inimigos para sempre 18
2.2 Animando o inimigo 21
2.3 Planetas e parallax 23
2.4 Detectando a colisão com o inimigo 28
2.5 Explosões 30

3 Melhorando a animação da nave 34


3.1 Melhorando a animação da nave 34
3.2 Mais inimigos 37

4 Explosões e tela final 39


4.1 Tela de Game Over 39
4.2 Explosão 41
4.3 Conclusão 44
4.4 Próximo curso 45

5 Energia e clones 46
5.1 Introdução 46
5.2 Táticas de jogo 46
5.3 Efeitos 49
5.4 Criando clones 52

6 Colisão da nave com a energia 55


6.1 Detectando a colisão 55
Sumário Caelum

6.2 Variáveis 60

7 Adicionando um novo objetivo e reconhecendo antigos problemas 63


7.1 Revivendo o copy and paste 63
7.2 Clonando inimigos 64

8 Criando o tiro 70
8.1 Criando o tiro 70
8.2 Detectando colisões rápidas 74
8.3 Implementando a explosão do inimigo 76

9 Energia e pontos 84
9.1 Adicionando energia 84
9.2 Trabalhando com comentários 86
9.3 Conhecendo blocos customizados 93
9.4 Conclusão 96

Versão: 21.1.21
CAPÍTULO 1

ATORES, ADVERSÁRIOS, CENÁRIO E


MÚSICA

1.1 INTRODUÇÃO
Nesse nosso primeiro curso de criatividade computacional, vamos aprender a como criar o nosso
próprio jogo.

Durante a criação de jogos, veremos diversas coisas. Como lidar com os gráficos, com a
programação, com a animação dos nossos atores e sprites, como buscar sprites interessantes, como
podemos utilizar sons, músicas e diversas outras coisas.

O resultado da primeira parte desse curso é um jogo onde controlaremos uma nave. Utilizamos do
efeito paralaxe para que nos dê a sensação que estamos navegando pelo espaço, com planetas vindo em
nossa direção em diferentes distâncias. Teremos outras coisas interessantes como a aleatoriedade dos
planetas e dos nossos inimigos, a animação de movimento da nossa e das naves inimigas, a animação de
fogo da turbina dos inimigos, animação de explosão, detecção de colisões e claro, o Game Over. Tudo
isso de uma forma interativa com o usuário final.

Após concluir esse curso, em uma segunda parte, continuaremos com o jogo, porém com mais
funcionalidades. Teremos a energia que capturamos para podermos disparar e destruir os inimigos, e a
colisão da nossa nave com a energia.

Começaremos o jogo do zero aprendendo todas essas funcionalidades e como disponibilizarpara


nossos colegas jogarem também. E aí, está pronto para começar?

1.2 MINHA PRÓPRIA NAVE


Agora vamos acessar o site do Scratch e fazer o login para criarmos o nosso primeiro projeto. Não se
preocupe, caso não possua cadastro no site, haverá uma explicação detalhada nos exercícios. A página
está em inglês, então selecionamos a opção Sign in, colocamos o usuário e senha e clicamos no botão
Sign in logo abaixo.

Agora que já estamos logados, clicamos na opção Create (criar) para criar um projeto novo. Dentro
da tela de projeto, podemos alterar o idioma na opção com símbolo de um planeta e selecionando
Português Brasileiro.

1 ATORES, ADVERSÁRIOS, CENÁRIO E MÚSICA 1


Figura 1.1: seleção de idioma

Um jogo possui diversos atores, como em um filme. Pode ser uma nave, um planeta e diversas coisas
que trabalham como atores. E esses atores estão funcionando em um palco, como o espaço. Em um
filme, por exemplo, temos uma princesa e um príncipe em um pano de fundo que é o castelo. Ou seja,
existem os personagens que executam seus papéis dentro de um cenário, e no jogo é a mesma coisa:
teremos os nossos atores.

No momento, nosso projeto veio com um gato como ator padrão, mas não teremos gatos em nosso
jogo, então vamos apagá-lo. Na seção "Atores", clique com o botão direito do mouse sobre o ícone do
gato e depois em "apagar".

Figura 1.2: apagando o gato

Poderemos adicionar um outro ator, um que faça mais sentido com o tema do jogo. Na seção "Novo
ator", clique no ícone de "Escolher ator da biblioteca".

Figura 1.3: biblioteca de atores

Agora dentro da biblioteca de atores, selecione a opção "Tema > Espaço", e escolha a nave
Spaceship. Pronto, temos um novo ator em cena.

Dando ordens ao ator


Vamos fazer um teste apertando o botão de ação, do qual o símbolo é a bandeira verde em cima da

2 1.2 MINHA PRÓPRIA NAVE


cena. Nada aconteceu? Fique calmo, esquecemos que para um ator fazer alguma ação, precisamos dar
para ele um script. Script nada mais é que uma sequência de instruções.

Queremos fazer a nave se mover. Na aba de Scripts, dentro de "Movimento", temos a opção de
comando mova ... passos , que vem com o valor padrão 10 . Vamos arrastar o mova 10 passos
para a direita, que é a área onde os scripts serão executados.

Figura 1.4: mova 10 passos

Mas ainda assim, ao apertarmos ação, nossa nave não se move, o que deve estar errado? É porque o
comando mova ... passos é apenas um bloco solto. Precisamos avisar para ele executar os comandos
somente quando fizermos o evento de apertar o botão de ação. Na aba Scripts temos os "Eventos", e
dentro destes temos a opção de comando quando clicar em "ação" . Nesse caso, em vez de usar a
palavra "ação", no comando foi usado o simbolo da bandeira verde.

Vamos arrastar o quando clicar em "ação" para área de execução de scripts. Olhando
atentamente, notamos que os comandos possuem pequenos conectores que podem ser encaixados a
outros comandos. Vamos encaixá-lo em cima do comando mova 10 passos .

Figura 1.5: ao clicar em ação

Apertando o botão de ação a nossa nave se move 10 passos para direita. Repare que podemos trocar
os valores de dentro do comando, vamos testar colocando o valor de 100. Nossa nave vai se mover 100
passos para direita, e se colocarmos o valor 0, a nossa nave vai se mover 0 passos para a direita.

E como eu faço para andar para a esquerda? Para todos os valores que usamos nos testes, a nave
andou para a direita, até mesmo o número 0, ou seja, a nave andou 0 passos para a direita. E o que
acontece se colocarmos números negativos? Se colocarmos, por exemplo, o valor de -10, a nossa nave vai
andar 10 passos para a esquerda.

Percebemos que valores positivos fazem com que nosso ator se mova para a sua direção padrão, e
valores negativos nosso ator se move na direção contrária. Podemos ver as direções padrão dos atores
clicando no ícone de informação que fica nos atores, e em "direção" uma linha apontando o lado em que
o ator se move.

1.2 MINHA PRÓPRIA NAVE 3


Figura 1.6: informações do ator

É um pouco estranho usarmos passos para mover, afinal nosso ator é uma nave que pode se mover
em diversas direções diferentes. Poderíamos, em vez de "passos", usar nomes como "esquerda - direita"
para movimentos horizontais e "cima - baixo" para movimentos verticais. Caso quisermos andar 10
passos para a esquerda, adicionamos o valor -10 ao "esquerda - direita".

Mas usar "esquerda - direita" é um pouco estranho, a nossa sorte é que já existe uma nomenclatura
padrão para os eixos horizontais e verticais. O eixo horizontal nós o chamamos de X, e o eixo vertical de
Y.

Vamos remover o mova ... passos arrastando para a área de seleção de comandos. Agora na
seção de "Movimento", selecionamos o comando adicione ... a x . O resultado é o mesmo, se
colocarmos valores positivos ele anda para direita, e valores negativos para a esquerda.

Figura 1.7: adicione 10 a x

Para fazer a nave se mover para cima, basta trocarmos o comando adicione ... a x por
adicione ... a y . Mas cuidado, no caso do nosso Y valores positivos faz com que a nave se
movimente para cima, e valores negativos para baixo. Podemos fazer um teste rápido colocando o valor
de -10 para ver a nave se movimentando para baixo.

Figura 1.8: adicione -10 a y

Não se preocupe pois utilizaremos bastante essa ideia de movimento, se tornando bem natural. Mas
vale lembrar que vamos trabalhar com dois tipos de movimentos, horizontal que é no sentido esquerda-
direita, e vertical que é no sentido cima-baixo.

Aparência do palco
A nave está em um palco que é um fundo branco, o que não se parecesse em nada com o espaço. Se

4 1.2 MINHA PRÓPRIA NAVE


fizermos uma pesquisa rápida no Google, vemos que o espaço é preto e com vários pontos de luz que são
as estrelas. Precisamos colocar um fundo que faça mais sentido para a nossa nave.

Do lado esquerdo da seção "Atores", temos uma seção "Novo pano de fundo". Podemos selecionar
um novo fundo pela rota "Escolher pano de fundo da biblioteca > Tema > Espaço > Stars"

Figura 1.9: novo pano de fundo

Repare que na área onde executamos os scripts apareceram mais abas, tanto pro ator quanto pro
palco. Essas abas são os modos de trabalho. No momento vamos trabalhar com a aba de Scripts.

Rotacionando a nave
A nossa nave está apontada para cima, e em nosso jogo ela voará para a direita. Precisamos mudar a
direção da nave. Para a nave ficar apontada para a direita, precisamos mudar a direção dela em 90°
(graus).

Vamos nas informações do nosso ator. Se olharmos o campo "direção", vemos que a nave já está em
90°, então vamos adicionar mais 90° que no total ficará 180°. Para mudar a angulação da nave é só clicar
e segurar no traço que fica em frente ao campo e arrastar para o valor desejado.

Figura 1.10: informações da nave com 180 graus

Antes de começar o jogo, eu gostaria que o nosso ator fosse capaz de mostrar uma mensagem na tela,
por exemplo, "Go go go!". Para isso vamos em "Scripts > Aparência" e selecionamos o comando diga
... por ... segundos . Depois de alterar a mensagem padrão para "Go go go!" e o tempo para 2
segundos, podemos conectá-lo entre o quando clicar em "ação" e adicione -10 a y . Assim
antes da nave fazer seu primeiro movimento ele mostrará a mensagem.

1.2 MINHA PRÓPRIA NAVE 5


Figura 1.11: diga gogogo por 2 segundos

Estamos melhorando o nosso jogo, mas ainda temos alguns problemas, como o tamanho da nave,
que no caso está ocupando um bom espaço do palco. Podemos mudar o tamanho de nossa nave com o
comando mude o tamanho para ... % que vem com o valor padrão de 100, e que está em "Scripts >
Aparência". E como queremos mudar o tamanho logo que clicarmos em "ação", então vamos colocá-lo
logo abaixo do comando quando clicar em "ação" .

Mas como saberemos que tamanho colocar? Por exemplo, as pessoas e objetos possuem tamanhos
diferentes, então fica muito difícil você definir um valor de tamanho. Então para facilitar esse tipo de
situação, na programação definimos que todo mundo possui o tamanho de 100. Então se eu quero
diminuir o tamanho da nave, que é 100, para a metade, eu coloco o valor de 50. A nave terá agora o
tamanho 50 do valor original 100. A nave ainda não está no valor apropriado, então vamos mudar o
valor para 30, ou seja 30 de 100. Isso significa que a nave tem 30% (por cento) do valor original.

Figura 1.12: mude o tamanho para 30%

Utilizando o teclado
No momento após imprimir a mensagem, a nossa nave se move -10 no eixo Y. Está bem sem graça,
seria mais interessante se tivéssemos um evento que permitisse usar o comando adicione -10 a y no
teclado, assim teríamos mais controle da nave. Mas existe esse evento? Sim, em "Scripts > Eventos" existe
o comando quando a tecla ... for pressionada . Alteramos o valor da tecla no comando para
"Seta para baixo" e reconectamos o comando adicione -10 a y no novo evento. A mesma coisa
pode ser feita para a tecla "Seta para cima", assim teremos o controle da nave pelo teclado.

6 1.2 MINHA PRÓPRIA NAVE


Figura 1.13: quando a tecla seta para baixo for pressionada e quando a tecla seta para cima for pressionada

Para o movimento da nave ficar mais natural, os valores adicionados no eixo Y devem ter a mesma
proporção do eixo X. Por exemplo, se o valor de movimento para cima é 10, então para baixo deve ter
-10.

Definindo posição inicial


Outro problema que precisamos resolver é a posição inicial da nossa nave quando o jogo começa. A
tela onde fica nosso palco trabalha com coordenadas. O centro da tela possui valor 0 no eixo Y e 0 no
valor eixo X. Se você acessar as informações do nosso ator, poderá ver a posição em que ele se encontra
no momento por meio dos valores contidos em X e Y.

Figura 1.14: coordenadas do ator

Então, decidimos que começaremos o nosso jogo na posição X com valor -195 e Y com valor 0. Em
"Script > Movimento" tem o comando vá para x: ... y: ... , que já vem preenchido com os
valores da coordenada atual do seu ator. Agora é só colocar os valores de X como -195 e Y como 0 e
associá-lo ao evento quando clicar em "ação" .

Como queremos posicionar a nave depois de alterar o seu tamanho vamos colocar o comando vá
para x: -195 y: 0 após o mude o tamanho para 30% .

1.2 MINHA PRÓPRIA NAVE 7


Figura 1.15: código com o comando vá para x -195 y 0

Vimos como criar o nosso ator, e com ele, rotacionar, movimentar, posicionar, falar mensagens e
reagir às nossas teclas. Vimos também como criar o nosso palco e definir o pano de fundo.

1.3 CRIANDO UM INIMIGO


Continuando o nosso jogo, criaremos um inimigo, que é um novo ator. Então vamos em "Escolher
ator da biblioteca > Tema > Espaço" e vamos escolher uma outra Spaceship.

Ajustamos o tamanho do inimigo para 30% da mesma forma que fizemos com o nosso outro ator,
utilizando o comando mude o tamanho para ... % com o valor de 30% e conectando ao evento
quando clicar em "ação" .

Figura 1.16: mude o tamanho para 30%

Caso queira executar apenas o bloco de instruções para ajustar o tamanho do ator inimigo, você
pode dar dois cliques com o mouse em cima do primeiro comando do bloco ao invés de apertar o botão
de ação que executa todos os blocos. Também funciona caso queira executar um comando isolado.

Nosso inimigo esta apontado para cima e queremos ele apontado para a esquerda, vamos fazer o
mesmo procedimento da nave anterior, e colocar a nave com 0° (graus)

Figura 1.17: nave ajustada em 0 graus

8 1.3 CRIANDO UM INIMIGO


O nosso inimigo está com as mesmas cores de nossa nave. Vamos alterar a cor em "Scripts >
Aparência" utilizando o comando mude o efeito ... para ... utilizando o efeito cor e o valor 15.
O valor pode ser alterado para alguma cor de sua prefêrencia.

Figura 1.18: mude o efeito cor para 15

Agora, vamos posicionar o nosso inimigo no centro do canto direito, para que toda vez que
apertarmos "ação" ele retorne à posição inicial. Em "Scripts > Movimento" usamos o comando já
conhecido vá para x: ... y: ... .

Figura 1.19: vá para x 205 y 0

O comando já vem preenchido com a posição atual do inimigo, em nosso caso vamos colocar o valor
de X como 205 e o valor de Y como 0.

Figura 1.20: posição da nave inimiga

Movimento dos inimigos


Fizemos algumas configurações iniciais do inimigo, mas o problema agora é que a nave inimiga não
anda, isso não terá muita graça em nosso jogo.

Vamos fazer com que o inimigo se mova para a esquerda usando o comando adicione ... a x
que está em "Script > Movimento", e colocamos o valor de -10 ao X. Agora conectamos em baixo dos
outros comandos.

Figura 1.21: adicione -10 a x

1.3 CRIANDO UM INIMIGO 9


O inimigo andou muito pouco, queremos que ele repita esse passo mais vezes. Para evitar ficar
puxando o mesmo comando e alterando o valor, podemos clicar em cima do comando com o botão
direito do mouse e selecionar a opção duplicar.

Figura 1.22: duplicar comando

Agora podemos repetir o comando oito vezes.

Figura 1.23: adiciona -10 a x repetido 8 vezes

Quando executamos, não recebemos o resultado esperado, além do problema que repetimos muitas
vezes o mesmo comando, o que não é bom.

Para esses casos existem comandos específicos. Em "Scripts > Controle" temos o comando repita
... vezes . Nesse comando podemos inserir o valor que queremos que ele repita e dentro dele o
comando que deve ser repetido, que é o caso do adicione -10 a x . Vamos adicionar, por exemplo, o
valor 40 para que ele ande até o lado esquerdo.

Figura 1.24: repita 40 vezes

Repare que o inimigo deve sempre ir até o lado esquerdo, então ao invés de usarmos o repita ...
vezes , na mesma seção de controle temos o comando sempre , que vai repetir infinitamente.

10 1.3 CRIANDO UM INIMIGO


Figura 1.25: sempre

O inimigo está se movimentado da forma esperada, mas seria melhor se fosse um pouco mais
devagar, que após adicionar -10 ao X, ele esperasse um tempo antes de adicionar -10 novamente. Na
mesma seção de "Controle" temos o comando espere ... seg . Podemos colocar um valor de tempo,
como por exemplo, 1 segundo e conectá-lo após o adicione -10 a x .

Figura 1.26: espere 1 seg

Ficou bem lento com 1 segundo. Vamos mudar o valor para 0.2 segundo.

Figura 1.27: espere 0.2 segundos

Colocando som
Já trabalhamos com o ator principal, ator secundário e o palco. Mas falta colocar uma música para
ambientar melhor o nosso jogo.

Quem vai tocar a música? A música será tocada no pano de fundo, então o a música será colocada no
palco. Selecionamos o palco, e na aba "Sons" vamos em "Escolher som da biblioteca > Repetições
Musicais" e selecionamos a música Techno e apertamos "OK".

1.3 CRIANDO UM INIMIGO 11


Figura 1.28: escolher som da biblioteca

Queremos que a música comece quando o jogo iniciar. Em "Eventos" selecionamos o comando
quando clicar em "ação" . Agora em "Som" usamos o comando toque o som ... colocamos o
som techno e conectamos ao comando de ação.

Figura 1.29: toque o som techno

Tocou apenas uma vez. Já sabemos o que fazer para que a música sempre continue tocando, basta
usar o comando de controle sempre .

Figura 1.30: sempre + toque o som techno

Aconteceu algo errado, a música não está tocando. Isso aconteceu porque o comando sempre fica
repetindo a música tão rápido que ela nunca consegue ser reproduzida até o final. Podemos evitar isso
trocando o comando toque o som ... pelo toque o som ... até o fim .

Figura 1.31: toque o som techno até o fim

Agora o jogo está funcionando como o esperado.

1.4 PLANETAS E GRÁFICOS


Vamos colocar mais elementos em nosso jogo para deixá-lo com um cara mais profissional.

Atores auxiliares

12 1.4 PLANETAS E GRÁFICOS


O que queremos fazer agora é colocar um novo ator, mas dessa vez ele não será um inimigo,
colocaremos um planeta para aumentar a sensação de estarmos navegando no espaço.

Então vamos em "Novo ator > Biblioteca de atores > Tema > Espaço", selecionamos o Planet2 e
clicamos em "OK".

O planeta não está no tamanho adequado, vamos ajustá-lo da mesma maneira que fizemos com os
outros atores. Selecionamos o planeta e em "Scripts > Evento" pegamos o quando clicar em "ação" ,
depois em "Scripts > Aparência" pegamos o mude o tamanho para ... % . Colocaremos o tamanho de
40% e conectamos os dois comandos.

Figura 1.32: mude o tamanho para 40%

Também queremos que o planeta se movimente para a esquerda ao clicar no botão de ação, assim
como fizemos em nosso inimigo. Precisamos de um laço de repetição que sempre execute a instrução de
andar para a esquerda.

Em "Scripts > Controle" usamos o comando sempre para repetir as instruções. Agora em "Scripts >
Movimento" utilizamos o adicione ... a x com o valor de -3, afinal queremos que ele ande para a
esquerda, e colocando o comando dentro do sempre . Em "Scripts > Controle" vamos utilizar o espere
... seg , como o valor de 1 segundo, para que o movimento não fique acelerado.

Figura 1.33: laço de repetição movimentando para a esquerda

Repare que se pararmos o jogo e executarmos novamente, o planeta não retorna para sua posição
inicial, esquecemos de definir no script. Então vamos em "Scripts > Movimento" e usamos o comando
vá para x: ... y: ... , lembrando que você pode posicioná-lo manualmente, que o comando vem
preenchido com a posição atual do planeta. No nosso caso ele ficará na posição X: 216 e Y: 131. Agora
só conectar o comando entre o mude o tamanho para 40% e o laço sempre .

1.4 PLANETAS E GRÁFICOS 13


Figura 1.34: vá para x 216 y 131

Agora sim, tudo funcionando. Mas se prestarmos mais atenção ao movimento do planeta, parece que
ele tem pequenas travadas, é como se ele saltasse ao invés de deslizar. Para evitar esse problema
trocamos o laço sempre e todos os comandos que estão dentro por um mais eficiente, em "Scripts >
Movimento" temos o comando deslize por ... seg até x: ... y: ... onde passamos o tempo
em segundos, e as posições finais do eixo X e do eixo Y. Podemos testar, o tempo com o valor de 1
segundo, o X como valor de -207 e o Y mantém o valor da posição inicial de 131, afinal o movimento é
apenas no eixo horizontal.

Figura 1.35: planeta - deslize por 1 seg até x -207 y 131

O movimento ficou bem melhor, mas 1 segundo é bem rápido, então vamos alterar o tempo para 40
segundos.

Figura 1.36: planeta - deslize por 40 seg até x -207 y 131

Faremos o mesmo para o inimigo, vamos trocar o laço sempre e todo seu conteúdo pelo deslize
por ... seg até x: ... y: ... . Para o valor do tempo colocaremos 5 segundos para não ficar tão
rápido, o X terá o valor de -255 e o Y mantém o valor de 0 para que o inimigo ande apenas
horizontalmente.

Figura 1.37: inimigo - deslize por 5 seg até x -255 y 0

14 1.4 PLANETAS E GRÁFICOS


Melhorando os gráficos do jogo
Nosso jogo está bem legal, mas ainda podemos melhorar substituindo as imagens das naves e dos
planetas por algumas que são mais bem trabalhadas do que as da biblioteca, ou por imagens de sua
preferência.

Vamos começar substituindo o planeta. Na área de "Novo ator" selecionamos "Carregar ator a partir
de arquivo".

Figura 1.38: Carregar ator a partir de arquivo

Vá ao diretório onde contém a imagem que deseja substituir, selecione e clique em "OK".

Vale salientar, o Scratch possui um bug que pode falhar o carregamento da imagem, necessitando
repetir o processo.

Agora que criamos um novo ator planeta, precisamos copiar todo o conteúdo do planeta anterior
para o novo. Basta segurar o bloco de script que deseja copiar e arrastar até o ícone do novo planeta.

Figura 1.39: copiando bloco de código para outro ator

Pronto, agora o novo planeta contém o mesmo script. O antigo não é mais necessário, então
podemos excluí-lo clicando com o botão direito do mouse e selecionando a opção "apagar".

Figura 1.40: excluindo planeta antigo

A mesma coisa pode ser feita para as naves. Caso seja necessário, você pode alterar a rotação e o valor
do tamanho dos atores da mesma forma que já aprendemos, ajustando melhor ao jogo.

1.4 PLANETAS E GRÁFICOS 15


1.5 COMPARTILHANDO O NOSSO JOGO
Vamos aprender a compartilhar o nosso jogo, para que outras pessoas possam jogá-lo.

O primeiro passo é colocar um nome mais interessante. Colocaremos "Alura Space Starter". Em cima
da tela do jogo há um campo onde podemos renomear o projeto.

Figura 1.41: troca de nome

É muito recomendado que antes de fechar o navegador, você salve o seu projeto. O Scratch salva
automaticamente em diversas situações, porém isso não é garantido e você pode acabar perdendo tudo o
que fez. Para salvar o projeto vá em "Arquivo > Salvar agora".

Figura 1.42: salvar projeto

Com o projeto salvo, podemos clicar em compartilhar.

Figura 1.43: botão compartilhar

Uma nova página será carregada. Nela você pode mandar para seus amigos, para que eles também
possam jogar. Caso seu amigo queira trabalhar nesse projeto, ele pode clicar em See inside (Ver interior)
e toda estrutura do projeto será mostrada.

Figura 1.44: see inside

Mas não se preocupe! Caso seu amigo faça alguma alteração, ela não se aplicará ao seu projeto, mas
sim a uma cópia dele.

Outro detalhe interessante é a área de instruções onde você pode colocar as regras do jogo, em

16 1.5 COMPARTILHANDO O NOSSO JOGO


Instructions.

Figura 1.45: instruções do jogo

E em Notes and Credits (Notas e créditos) você pode colocar as informações de quem trabalhou,
quem colaborou, a versão do projeto e assim por diante.

Figura 1.46: notas e creditos

As alterações serão salvas e você poderá enviar o link da página para qualquer pessoa.

Da mesma forma que seu projeto foi compartilhado, você pode ir em Explore (Explorar) e acessar
muitos projetos que também foram compartilhados. São de diversos tipos como jogos, músicas e
animações.

Você também pode acessar os projetos e fazer um Remix, ou seja, trabalhar em cima e criar suas
próprias alterações.

1.5 COMPARTILHANDO O NOSSO JOGO 17


CAPÍTULO 2

PLANETAS, COLISÕES E EFEITOS


SONOROS

2.1 PLANETAS E INIMIGOS PARA SEMPRE


Antes de continuarmos, para diminuir a chance de perdermos o nosso projeto, podemos fazer uma
cópia de segurança dele em "Arquivo > Salvar como cópia".

Figura 2.1: salvar como copia

Escondendo planetas e inimigos


Precisamos corrigir alguns problemas em nosso jogo. Quando a nave inimiga ou o planeta chegam
ao lado esquerdo, eles ficam travados, o ideal seria que desaparecessem da tela.

Vamos tentar resolver primeiro com o inimigo. Em "Script > Aparência" existe o comando
esconda . Vamos conectá-lo abaixo do deslize por ... seg até x: ... y: ... .

Figura 2.2: esconda

Funcionou, mas, testando mais uma vez, parece que o inimigo sumiu de vez. Isso acontece porque
quando rodamos o jogo, a ação de esconder o inimigo fica memorizada em nosso ator. Podemos ver nas
informações:

18 2 PLANETAS, COLISÕES E EFEITOS SONOROS


Figura 2.3: infomações do inimigo opção mostrar desmarcada

Então, toda vez que o jogo iniciar precisamos mostrar o ator. Em "Script > Aparência" tem o
comando mostre , e como queremos que seja executado assim que o jogo iniciar, vamos conectá-lo em
baixo do quando clicar em "ação" :

Figura 2.4: inimigo - mostre

Agora funcionou. Precisamos fazer a mesma coisa com o nosso planeta. Com as configurações que
fizemos antes, o comando deslize por ... seg até x: ... y: ... o X tem o valor de -207, o que
faz com que o planeta suma antes de andar o máximo possível para a esquerda. Vamos alterar o valor de
X para -255.

Figura 2.5: planeta - mostre

Camadas dos atores


Ao executarmos o jogo, podemos perceber que quando o planeta e a nossa nave principal estão na
mesma área, o planeta fica na frente, cobrindo a nave. Em um filme por exemplo, temos o plano da
frente, onde ficam os atores principais, e no plano de trás temos os atores figurantes, os quais só
incrementam a cena.

Queremos que a nave fique na frente de todos os outros atores e objetos do jogo, afinal ela é o ator
principal. Podemos selecioná-la e em "Scripts > Aparência" usar o comando vá para a frente , dessa
forma quando apertamos o botão de ação, a nave já passará para a camada da frente.

2.1 PLANETAS E INIMIGOS PARA SEMPRE 19


Figura 2.6: vá para a frente

Inimigos e planetas infinitos


Quando o inimigo e o planeta chegam a esquerda, eles simplesmente desaparecem. Para deixar mais
interessante, poderiamos fazer com que eles sempre voltassem a reaparecer do lado direito e deslizassem
novamente para a esquerda.

Já sabemos como trabalhar com laços de repetição, então faremos com a nave inimiga primeiro.
Vamos em "Scripts > Controle" usamos o laço sempre e colocamos dentro os comandos vá para x:
... y: ... , deslize por ... seg até x: ... y: ... e o esconda :

Figura 2.7: sempre

A nave não reapareceu. Esquecemos do comando mostre , que só é ativado ao apertar o botão de
ação. O inimigo precisa primeiro voltar à posição inicial e depois ser mostrado novamente, só depois
disso ele pode deslizar e se esconder.

Figura 2.8: corrigindo o sempre da nave

Façamos o mesmo procedimento para o planeta.

20 2.1 PLANETAS E INIMIGOS PARA SEMPRE


Figura 2.9: comando sempre no planeta

Perfeito, agora os inimigos e o planetas são infinitos.

2.2 ANIMANDO O INIMIGO


Deixamos o nosso jogo um pouco mais desfiador agora que temos inimigos "infinitos". Vamos dar
uma atenção maior às animações do nosso inimigo.

Animando o inimigo
A imagem usada no nosso inimigo possui duas chamas que saem das turbinas da nave, mas essas
chamas ficam paradas. Precisamos melhorar o efeito de animação desse inimigo.

A melhor maneira de fazer um efeito de animação é alternar entre imagens diferentes. Por exemplo,
a nave inimiga terá duas imagens, uma com as turbinas com fogo fraco e outra com fogo forte, ao
alternar entre as imagens, gera-se a sensação de que o fogo está em movimento.

Para adicionar uma segunda imagem ao inimigo existente, selecione-o e vá em "Fantasias > Carregar
traje a partir de arquivo", agora só selecionar a imagem do seu computador e clicar em "Open".

Figura 2.10: nova fantasia

Agora que o inimigo possui uma nova fantasia, façamos um script que sempre alterne entre as
fantasias. Usamos o nosso já conhecido laço sempre que está em "Scripts > Controle".

Figura 2.11: sempre

Mas o que colocaremos dentro do laço para trocar de fantasia? Em "Scripts > Aparência" temos o
comando próxima fantasia .

2.2 ANIMANDO O INIMIGO 21


Figura 2.12: próxima fantasia

Se executarmos apenas esse bloco com o clique duplo em cima do sempre vemos que o fogo está
trocando rápido demais. Vamos em "Scripts > Controle" usar o comando espere ... seg colocando o
valor de 0.05 segundos, e conectamos dentro do sempre , logo abaixo do próxima fantasia .

Figura 2.13: espere 0.05 seg

Ficou bem melhor, mas onde conectamos o nosso laço sempre ? Podemos fazer uma teste e
conectar o novo laço em baixo do comando esconda do outro bloco.

Figura 2.14: laço dentro de laço

Não funcionou, porque após esconder o inimigo o script entrou em um novo laço que sempre será
executado, impedindo de voltar para as instruções de ir para à posição inicial, mostrar e deslizar.

Precisamos que e novo laço seja executado quando iniciarmos o jogo, simultaneamente aos outros
blocos do script. Então vamos em "Script > Evento" e usamos novamente o evento quando clicar em
"ação" .

22 2.2 ANIMANDO O INIMIGO


Figura 2.15: quando clicar em ação + laço sempre

Agora as duas instruções estão sendo executadas simultaneamente. Essa instruções é o que
chamamos, em programação, de Threads. Em nosso jogo, temos varias Threads sendo executas, como
por exemplo, a nossa nave, o inimigo, o planeta e a música.

Em casos de computadores que possuem apenas um processador, eles executam um pouco de cada
instrução dando a impressão de que estão sendo executadas ao mesmo tempo. Já em computadores com
vários processadores, as execuções podem ser feitas ao mesmo tempo de verdade.

2.3 PLANETAS E PARALLAX


O nosso jogo está bem legal, mas temos apenas um planeta. Vamos adicionar outro para ambientar
melhor o cenário.

Diversos planetas
Da mesma forma que podemos duplicar blocos de scripts, podemos duplicar os atores. Como
queremos duplicar o planeta, clicamos em cima dele com o botão direito e selecionamos "duplicar".

Figura 2.16: duplicar ator

Se executarmos o jogo, os dois planetas vão começar com o tamanho e posição iguais, além de
deslizar para a esquerda. Precisamos mudar a posição inicial do segundo planeta, no comando vá para
x: ... y: ... vamos alterar o valor de Y para -55.

2.3 PLANETAS E PARALLAX 23


Figura 2.17: bloco do segundo planeta

O segundo planeta está andando na diagonal, isso porque no comando deslize por ... seg até
x: ... y: ... o valor de Y está como 131, vamos troca-lo para -55 também.

Figura 2.18: bloco do segundo planeta corrigido

O dois planetas são iguais, podemos trocar a fantasia do segundo planeta assim como fizemos com o
inimigo. Vamos colocar uma nova fantasia e alterar o tamanho do planeta no comando mude o
tamanho para ... % para 8%.

Figura 2.19: mude o tamanho para 8%

Os planetas ainda estão deslizando na mesma velocidade. Como o segundo planeta simula estar a
uma distância maior de nossa nave em relação ao primeiro, precisamos diminuir a velocidade, já que
objetos mais distantes demoram mais para desaparecer do campo de visão. No comando deslize por
... seg até x: ... y: ... vamos alterar o tempo para 75 segundos.

24 2.3 PLANETAS E PARALLAX


Figura 2.20: deslize por 75 seg até x: -272 y: -55

Números aleátorios
Nosso script faz com que um planeta que chegue ao lado esquerdo reapareça do lado direito. Mas o
que não fica tão legal, é o fato de ele reaparecer do lado direito com a mesma velocidade fixa da
passagem anterior.

Começaremos fazendo com o segundo planeta. Podemos fazer com que, a cada passada, a
velocidade do planeta seja diferente. Em "Scripts > Operadores" temos o operador número aleatório
entre ... e ... . Esse operador trabalha com uma numeração minima e máxima, assim toda vez que
for executado, ele seleciona um número aleatório desse intervalo definido. Vamos colocar o valor
mínimo de 60 e o máximo de 90.

Figura 2.21: numero aleatorio entre 60 e 90

Mas onde colocamos esse operador? Dentro do valor de tempo do comando deslizar por ...
seg até x: ... e y: ... .

Figura 2.22: segundo planeta com comando deslizar com o operador com intervalo 60 e 90

Vamos fazer a mesma coisa para o primeiro planeta, mas como ele está mais próximo da nave, o
intervalo vai ser de 30 e 50.

2.3 PLANETAS E PARALLAX 25


Figura 2.23: primeiro planeta com comando deslizar com o operador com intervalo 30 e 50

Existe mais um ator com velocidade fixa, o nosso inimigo. Também vamos alterar a sua velocidade,
mas o intervalo será entre 3 e 7.

Figura 2.24: inimigo com comando deslizar com o operador com intervalo 3 e 7

Efeito parallax
Podemos adicionar novas fantasias aos planetas e usar o recurso de trocas de fantasia. Assim, quando
eles reaparecerem no lado direito, dará a sensação de que estamos passando por planetas diferentes.

Vamos fazer um teste com o primeiro planeta. Para trocar de fantasia apenas quando o planeta
reaparecer do lado direito, vamos em "Scripts > Aparência", pegamos o comando próxima fantasia e
conectando dentro do laço de repetição, em baixo do esconda .

Figura 2.25: primeiro planeta - proxima fantasia

Ficou bem legal. Repetimos o mesmo processo para o segundo planeta.

26 2.3 PLANETAS E PARALLAX


Figura 2.26: segundo planeta - proxima fantasia

Nosso jogo está cada vez mais vivo, pois o cenário age de forma diferente. Vamos enriquecer ainda
mais colocando números aleatórios no tamanho dos planetas, afinal ficar passando por planetas com
tamanhos iguais é muita coincidência.

Em nosso primeiro planeta que está mais próximo da nave, colocamos os números aleatórios entre
15 e 25 a adicionamos no comando mude o tamanho para ... % .

Figura 2.27: primeiro planeta - mude o tamanho com numeros aleatorios

Mas parece que o tamanho não está mudando a cada passada. Isso porque estamos alterando o
tamanho quando clicamos no botão de ação, precisamos colocar o comando dentro do laço sempre
para que sempre altere o tamanho.

Figura 2.28: primeiro planeta - mude o tamanho com numeros aleatorios dentro do laço

Façamos o mesmo para o segundo planeta, como ele está mais distante colocamos o tamanho com os
valores entre 4 e 12.

2.3 PLANETAS E PARALLAX 27


Figura 2.29: segundo planeta - mude o tamanho com numeros aleatorios

Esse efeito que está acontecendo em nosso jogo, que dá a sensação de que temos planetas distantes
por se movimentarem devagar, e planetas mais próximos se movimentando mais rápido, é chamado de
efeito Parallax (Paralaxe).

2.4 DETECTANDO A COLISÃO COM O INIMIGO


O jogo esta ficando cada vez mais divertido, porém ainda não existe nenhuma situação em que nossa
nave possa colidir com o inimigo. Vamos trabalhar agora com detecção de colisões.

Detectando colisões com o inimigo


Como uma colisão acontece? Uma colisão só ocorre quando dois elementos encostam um no outro,
independente da parte. Por exemplo, caso as asas do inimigo encostem em nossa nave, nós temos uma
colisão.

Nós só percebemos que tivemos uma colisão porque usamos os nossos sentidos. Mas, e no caso dos
atores do nosso jogo? Os atores possuem sensores.

Podemos testar a colisão usando nosso inimigo, fazendo com que o inimigo fale se está colidindo.
Em "Scripts > Aparência", pegamos o comando diga ... , e conectamos em baixo do espere ...
seg do bloco de troca de fantasia.

Figura 2.30: inimigo - diga

Agora em "Scripts > Sensores" pegamos o comando tocando em ... ? colocando o valor como a
nave do jogador. Agora conectamos dentro do comando diga ... .

28 2.4 DETECTANDO A COLISÃO COM O INIMIGO


Figura 2.31: inimigo - tocando em nave_jogador

Repare que o inimigo inicia com o balão escrito false (falso), isso quer dizer que ele não está
colidindo com a nossa nave.

Figura 2.32: nave sem colisão - false

Se deixarmos que a nossa nave encoste no inimigo, o balão muda seu valor para true (verdadeiro),
pois o sensor vai detectar a colisão. É verdade (true) que ela está colidindo.

Figura 2.33: nave com colisão - true

Controlando a situação
Conseguimos uma forma de detectar a colisão com o nosso inimigo. Porém, em vez de ficarmos
recebendo a mensagem de true ou false toda hora, vamos fazer com que o inimigo diga "Peguei você!"
apenas quando ele conseguir colidir com a nossa nave.

Vamos precisar ter algum controle da situação para que a frase seja dita apenas se houver colisão.
Logo vamos em "Scripts > Controle", onde teremos o comando se ... então .

Figura 2.34: se entao

O comando se ... entao só executa as linhas de dentro apenas se a condição for verdadeira, em
nosso caso true. Vamos colocar o tocando em ... ? que retorna true ou false, como condição para o
controle:

2.4 DETECTANDO A COLISÃO COM O INIMIGO 29


Figura 2.35: controle se + tocando em

Agora dentro do se ... então , colocamos o comando diga ... por ... segundos com a
frase "Peguei você!" e o valor de 2 segundos.

Figura 2.36: diga peguei voce por 2 segundos

E conectamos o controle se ... então em baixo do espere ... seg novamente.

Figura 2.37: se então dentro sempre

Agora a nave "diz" a frase apenas quando acontece uma colisão.

Figura 2.38: nave colidindo

2.5 EXPLOSÕES

Explosão
Fizemos com que o inimigo detecte se houve alguma colisão com a nossa nave. Agora, em vez de o
inimigo falar "Peguei você!", poderíamos colocar um som de explosão.

Selecionando o inimigo e acessando a aba "Sons", vemos que o ator já possui um som padrão. Porém,
o som padrão do ator não se parece em nada com uma explosão.

Caso você não seja um músico ou não possua ferramentas necessárias para criar sons, não se
preocupe, existem diversos lugares na internet onde podemos pegar sons para trabalharmos.

30 2.5 EXPLOSÕES
Um lugar bacana onde podemos pegar sons gratuitamente e utilizar em nossos projetos é o
Freesound.

O som que queremos pode ser encontrado escrevendo "explosion cydon" no campo de pesquisa.

Figura 2.39: explosion cydon

No site Freesound é necessário possuir um cadastro para baixar o som.

Após ter feito o download e com o inimigo selecionado, vamos em "Sons > Carregar som a partir de
arquivo", e selecionamos o som que acabamos de baixar.

Lembrando que o Scratch possui um bug que impede o carregamento dos arquivos, caso aconteça, é
só repetir o processo.

Agora sim temos um som que representa uma explosão. Repare que no inicio do áudio possui um
trecho silencioso.

Figura 2.40: parte silenciosa

Podemos removê-lo selecionando o trecho silencioso, depois clicando em "Editar > Recortar".

Figura 2.41: recortando som

Caso ache interessante, você pode aplicar alguns efeitos clicando em "Efeitos".

2.5 EXPLOSÕES 31
Agora vamos para "Scripts > Som", pegamos o comando toque o som ... colocando o som
"explosion cydon" que baixamos, e conectamos dentro do bloco se ... então .

Figura 2.42: toque o som

Podemos remover o comando diga ... por ... segundos com a frase "Peguei você!".

Agora o som está estranho, repetindo várias vezes. Já resolvemos esse problema antes com a música
do jogo, temos que trocar o comando para toque o som ... até o fim .

Figura 2.43: toque o som até o fim

Precisamos lembrar que no caso de sons, ele precisa ser tocado até o fim.

Prestando bem atenção, notamos que em algumas passadas do inimigo o som da explosão não toca.
Isso acontece porque o final do som é muito longo e com partes silenciosas. Vamos remover o trecho
desnecessário do áudio da mesma forma que fizemos antes.

Sprites
Assim como o Freesound, existem outros sites onde podemos pegar coisas interessantes para o nosso
jogo. A primeira dica é o site Kenney. O Kenney é um site onde podemos pegar sprites para usarmos de
fantasias em nossos atores, e o melhor é que tudo pode ser usado livremente.

Outra dica interessante é o site Sprite Resources que contém sprites de jogos de jogos famosos, como
por exemplo, o Mario Kart.

32 2.5 EXPLOSÕES
Mas atenção, os sprites disponíveis no Kenney são de licença livre, o que significa que podemos
utilizá-los de qualquer forma, já os do Sprites Resources, as licenças das imagens são de propriedade
da empresa do jogo, o que só nos permite criarmos projetos pessoais, o que não permite ser
comercializado ou compartilhado com outras pessoas.

2.5 EXPLOSÕES 33
CAPÍTULO 3

MELHORANDO A ANIMAÇÃO DA NAVE

3.1 MELHORANDO A ANIMAÇÃO DA NAVE


Vamos fazer uma cópia do nosso projeto em "Arquivo > Salvar como cópia".

Melhorando a animação da nave


Quando movimentamos a nossa nave notamos que o movimento não está nada natural, ocorrem
pequenas travadas.

Isso acontece por conta do comportamento da digitação do computador. Quando pressionamos e


seguramos uma tecla o valor é digitado, e só depois de um certo tempo que o valor começa a ser
repetido.

E ao usarmos o comando quando a tecla ... for pressionada o comportamento é o mesmo


de um digitação tradicional. Em um jogo não podemos ter esse tempo de espera.

Precisamos de uma maneira para detectar se um tecla está pressionada. Para detectar usaremos
sensores assim como fizemos para as colisões. Os sensores são condições que nos retornam verdadeiro
ou falso.

Em "Scripts > Sensores" temos a condição tecla ... pressionada? que podemos alterar o valor
padrão para "Seta para cima". Para executar scripts apenas se a tecla for pressionada usamos o controle
se ... então . Agora colocamos dentro do se ... então o que queremos que seja executado, que
no caso é adicione ... a y com o valor de 10 para que a nave suba.

Figura 3.1: se tecla seta para cima pressionada

Queremos que seja executado quando clicarmos em ação, então vamos usar o evento quando
clicar em "ação" .

34 3 MELHORANDO A ANIMAÇÃO DA NAVE


Figura 3.2: quando clicar em ação

Porém ainda não funciona. O motivo de não funcionar é que os blocos são executados em ordem,
então quando pressionamos o botão de ação o bloco é executado apenas uma vez. Vamos ter que usar
um laço de repetição sempre para que constantemente verifique se a tecla está pressionada.

Figura 3.3: laço sempre

A mesma coisa deve ser feita para a tecla "Seta para baixo". Agora conectamos dentro do laço de
repetição.

Figura 3.4: se tecla seta para baixo pressionada

Na forma antiga, o script esperava ser notificado caso a tecla fosse pressionada para depois agir. Esta
nova forma de esperar sempre verificando se algo está acontecendo é conhecida como Busy Wait. O
busy wait gasta mais energia dos dispositivos por sempre estar processando a verificação, o que não é um
problema em nosso projeto.

3.2 MAIS INIMIGOS

Posições aleatórias
O inimigo está sem graça, temos apenas um e ele sempre aparece fixo na mesma posição. Se
colocarmos a nossa nave em um posição diferente do eixo Y que o inimigo desliza nós nunca
perderíamos o jogo.

3.1 MELHORANDO A ANIMAÇÃO DA NAVE 35


Para aumentar o desafio do jogo, podemos fazer com que o inimigo apareça em posições aleatórias
do eixo Y. Temos que encontrar o limite mínimo e máximo do Y movendo o mouse pela tela do jogo, na
parte de baixo da tela a posição atual do mouse nos eixos X e Y será mostrada.

Figura 3.5: posição do mouse no eixo x e y

Para facilitar a encontrar o valor mínimo e máximo do eixo Y, nós podemos acessar "Escolher pano
de fundo da biblioteca > Categoria > Outro" e selecionar o pano de fundo chamado de "xy-grid". O pano
de fundo xy-grid nada mais é do que uma plano cartesiano onde podemos ver o valor mínimo que é -180
e o máximo que é 180.

Agora que vimos os valores, podemos trocar para o pano de fundo das estrelas novamente acessando
a aba "Panos de fundo".

Figura 3.6: panos de fundo

Após selecionar o inimigo, acessamos "Scripts > Operadores" e pegamos o operador números
aleatórios entre ... e ... colocando os valores de -180 e 180, agora conectamos o operador no
valor de Y no comando vá para x: ... y: ... .

Figura 3.7: vá para x 203 y aleatorio

O inimigo está aparecendo em posições diferentes do eixo Y, mas agora ele está deslizando sempre
em direção ao centro. No comando deslize por ... seg até x: ... y: ... deixamos explícito

36 3.1 MELHORANDO A ANIMAÇÃO DA NAVE


que era pro inimigo deslizar com o valor 7 no eixo Y.

Se a posição inicial do eixo Y do inimigo foi gerado aleatoriamente, como vamos fazer para que ele
deslize usando o mesmo valor gerado? Em "Scripts > Movimento" temos o posição y que nos retorna
o valor atual de Y. Por exemplo, o inimigo foi para a posição inicial e o valor do gerado para o eixo Y é
de -140, o posição y vai nos retornar o valor atual que o inimigo está, que no caso é -140.

Vamos alterar o valor de Y do comando deslize por ... seg até x: ... y: ... colocando o
posição y no lugar.

Figura 3.8: deslize por segundos aleatorios seg até x -255 y posição de y

Mais inimigos
Nosso inimigo está aparecendo de lugares diferentes do jeito que queríamos. Mas um único inimigo
é muito pouco, vamos duplicá-lo da mesma forma que fizemos com o planeta.

Temos dois inimigos. Para deixar melhor, vamos ajustar os valores do eixo X da posição inicial e da
posição final após os inimigos deslizarem.

Usando o pano de fundo xy-grid vemos que o valor mínimo de X é -240 e o máximo é 240. No
comando vá para x: ... y: ... vamos colocar o valor de X como 240, já no comando deslize
por ... seg até x: ... y: ... colocamos o X como -240.

Figura 3.9: comandos ajustados com os novos valores de x

Como o valor do tempo para percorrer a tela e a posição no eixo Y é aleatória, os inimigos aparecem
com velocidades e posições diferentes.

3.2 MAIS INIMIGOS 37


38 3.2 MAIS INIMIGOS
CAPÍTULO 4

EXPLOSÕES E TELA FINAL

4.1 TELA DE GAME OVER


O jogo ainda não possui fim. Precisamos mostrar uma tela de GAME OVER quando ocorrer uma
colisão entre a nave e os inimigos.

A tela de Game Over também é um ator assim como os outros elementos. Vamos criar um novo ator,
mas dessa vez selecionando a opção "Pintar novo ator".

Figura 4.1: pintar novo ator

Um editor será aberto com várias opções que podemos utilizar. Escreveremos a palavra "GAME
OVER" utilizando a opção "Texto".

Figura 4.2: opção texto

Para escrever basta selecionar a opção "Texto", escolher a cor de preferência e clicar no painel para
que possa digitar o texto.

O ator Game Over não possui nenhum script, podemos criar um para deixá-lo maior usando o
evento quando clicar em "ação" junto com o mude o tamanho para ... % . Para aumentar o
tamanho original colocaremos um número maior que 100, no caso um bom tamanho seria 200.

4 EXPLOSÕES E TELA FINAL 39


Figura 4.3: quando clicar em ação + mude o tamanho para 200%

Troca de mensagens
Agora a mensagem fica fixa na tela, sendo necessário escondê-la para que só apareça no momento da
colisão. Em "Scripts > Aparência" pegamos o esconda e colocamos antes de aumentar o tamanho.

Figura 4.4: esconda

A mensagem será mostrada junto com o som de explosão do inimigo. Se colocarmos o comando
mostre no script do inimigo iria funcionar? Não, porque cada script pertence exclusivamente a um
ator.

Os inimigos precisam enviar uma mensagem para o ator Game Over avisando que ocorreu uma
colisão. Em "Script > Eventos" temos o evento envie ... a todos .

Figura 4.5: envie mensagem a todos

Podemos alterar o valor padrão do evento selecionando "Nova mensagem...".

Figura 4.6: nova mensagem

Uma janela aparecerá com um campo para colocarmos o nome da mensagem, por exemplo,
"gameover".

Figura 4.7: nome da mensagem gameover

40 4.1 TELA DE GAME OVER


Como queremos enviar a mensagem apenas quando houver colisão, então conectamos antes do
comando toque o som ... até o fim .

Figura 4.8: envie gameover a todos + toque o som

Selecione o ator Game Over e vamos em "Script > Evento" e pegamos o quando receber ... e
deixamos o valor como "gameover", depois em "Scripts > Aparência" pegamos o comando mostre
conectando ao evento.

Figura 4.9: quando receber gameover + mostre

Não podemos esquecer de colocar o evento envie ... a todos no segundo inimigo para que os
dois possam enviar a mensagem "gameover". Fazer cópia de código é uma má prática por dar margem a
erros, mas não se preocupe que aprenderemos práticas melhores.

4.2 EXPLOSÃO
Quando ocorre colisão, o inimigo envia uma mensagem "gameover" para que o ator Game Over saiba
a hora de agir. Falta implementarmos a reação de explosão da nave principal.

O inimigo está usando o evento envie ... a todos , o que significa que a nave principal também
consegue receber a mensagem "gameover".

Podemos testar o recebimento da mensagem. Em "Scripts > Evento", pegamos o quando receber
... usando a mensagem "gameover", depois em "Scripts > Aparência" usamos o comando diga ...
com a frase "Explodi". Agora é só conectar o evento ao comando e executar o jogo.

Figura 4.10: quando receber gameover + diga explodi

Ficaria mais interessante se a nave possuísse uma animação de explosão após receber a mensagem.

4.2 EXPLOSÃO 41
Podemos acessar o site Kenney para fazer o download dos sprites de explosão.

No total, serão 9 sprites numerados de 0 a 8. É comum que na computação os elementos comecem a


contagem a partir do número 0.

Com os sprites de explosão em seu computador, selecionamos a nave principal e acessamos


"Fantasias > Nova fantasia > Carregar traje a partir de arquivo" para carregar as 9 imagens.

Figura 4.11: Carregar traje a partir de arquivo

Para uma melhor animação, é importante que as fantasias sejam ordenadas corretamente,
começando do 0 até o 8. As fantasias podem ser ajustadas arrastando com o mouse caso sejam
carregadas fora de ordem.

Em vez de usar o comando diga ... , podemos usar o comando mude para a fantasia ...
colocando a fantasia de número 0.

Figura 4.12: mude para a fantasia explosion00

Funcionou. Se executarmos o jogo novamente, a nave permanece com a fantasia de explosão. Assim
que o jogo começar, temos que alterar para a fantasia original da nave. Vamos usar o comando mude
para a fantasia ... com a fantasia "nave_jogador" e conecta-lo antes do comando vá para
frente .

Figura 4.13: mude para a fantasia nave_jogador

Vamos trabalhar na animação da explosão. Ela é feita com a troca das fantasias. A fantasia será
trocada 9 vezes,então em "Scripts > Controle" podemos usar o laço repita ... vezes para não repetir
código.

42 4.2 EXPLOSÃO
Figura 4.14: repita 9 vezes

Para a troca da fantasia vamos em "Scripts > Aparência" e usamos o comando próxima fantasia .

Figura 4.15: dentro do laço - proxima fantasia

A animação está muito rápida, podemos ir em "Scripts > Controle" e usar o comando espere ...
seg com o valor de 0.1 segundos.

Figura 4.16: dentro do laço - espere 0.1 seg

O tamanho da fantasia da explosão está muito grande para a nave. Em "Scripts > Aparência"
podemos usar o mude o tamanho para ... % com o valor de 30%.

Figura 4.17: mude o tamanho para 30 %

Parando o jogo
Mesmo após a explosão da nave o jogo continua sendo executado. Em "Scripts > Controle" podemos
usar o controle pare ... .

Figura 4.18: comando pare

O pare ... possui algumas opções de valores onde podemos interromper um ou mais scripts do

4.2 EXPLOSÃO 43
ator, mas também possui uma opção onde interrompe todos os scripts incluindo de outros atores.

Usaremos então o pare ... com o valor "todos" conectado após o laço repita ... vezes .

Figura 4.19: pare todos

Podemos colocar um espere ... seg antes do pare ... para que o som da explosão seja
executado por completo.

Figura 4.20: espere 0.3 seg

Agora sim, temos uma verdadeira tela de Game Over.

4.3 CONCLUSÃO
Durante o curso criamos o jogo Alura Defender onde navegamos pelo espaço desviando dos
inimigos. Durante o processo de criação, aprendemos diversas funcionalidades que aplicamos ao jogo.
Vimos que a nave e os inimigos são nossos atores interagindo em um palco.

Colocamos música no jogo utilizando laços de repetição para que ela sempre continue sendo
executada. Aplicamos sons nos inimigos para representar uma explosão.

Manipulamos a nave por meio de interações com o teclado de duas formas diferentes, a primeira
utilizando o evento que espera uma tecla ser pressionada, e a segunda que utiliza sensores para sempre
verificar se a tecla foi pressionada.

Também aprendemos sobre o efeito paralaxe. Criamos elementos de cenário que se movimentam
em velocidades distintas nos dando a sensação de que alguns atores estão mais perto e outros mais
distantes.

Utilizamos da aleatoriedade tanto nos inimigos quanto nos planetas para que a cada passada eles

44 4.3 CONCLUSÃO
possam agir de forma diferente.

Trabalhamos com animações em nossos atores, onde trocamos as fantasias para gerar a sensação de
movimento e até explosões.

Criamos o nosso próprio sprite onde utilizamos na tela de Game Over. Sprites podem ser criados
como desenhos ou textos.

4.4 PRÓXIMO CURSO


No próximo curso vamos dar continuidade com o jogo criando mais funcionalidades.

Adicionaremos a energia que deverá ser acumulada para conseguirmos disparar nos inimigos e
também criaremos o sprite da animação do disparo, a qual nós mesmos vamos desenhar.

Detectaremos as colisões entre o disparo e a nave inimiga e a nossa nave com a energia.

Aprenderemos formas de contar os pontos de energia e os pontos ganhos ao destruir os inimigos.

Pensamento
A lição mais importante que aprendemos neste curso foi a forma de pensarmos. Problemas grandes
nós quebramos em diversos passos mais simples de resolver.

Independente da sua preferência por programação, animação, ilustração, em todas as áreas


precisamos de raciocínio lógico para encontrar a melhor forma de estruturarmos os nossos projetos.

4.4 PRÓXIMO CURSO 45


CAPÍTULO 5

ENERGIA E CLONES

5.1 INTRODUÇÃO
Você que fez o curso Scrach 1: Programando seu jogo 2D já tem um jogo montado. E nessa segunda
parte, continuaremos a trabalhar com ele.

Na primeira parte do curso, vimos como criar a nave do jogador, criar inimigos, aprendemos sobre o
efeito paralaxe, animamos os atores, detectamos colisões e colocamos sons e música. Também
discutimos sobre programação, animação e até mesmo a história que queremos passar.

É recomendável que você faça a primeira parte do curso, pois usaremos todo o conhecimento
adquirido para prosseguir na segunda parte. Caso já possua conhecimento sobre o Scratch e lógica de
programação, nada te impede de prosseguir.

Nesta segunda parte criaremos novas funcionalidades. Teremos a energia que a nave principal
acumula, os disparos que destroem os inimigos, os contadores de energia e pontuação, e faremos com
que o jogo trabalhe de forma mais inteligente.

Bom curso!

5.2 TÁTICAS DE JOGO


O nosso jogo possui um objetivo bem simples, que é fugir das naves inimigas. Mas em diversos jogos
temos mais de um objetivo com o intuito de desafiar o jogador, e isso é o que vamos fazer.

Um dos novos desafios que queremos colocar em prática é o ganho de pontos. Os pontos podem ser
ganhos de várias formas, por exemplo destruindo os inimigos ou pegando itens.

Como o nosso objetivo no momento é apenas desviar dos inimigos, aproveitaremos para
implementar o desafio de pegar itens que valem pontos. Assim o jogador terá diferentes motivações para
movimentar a nave.

Energia
Mas qual item podemos acrescentar? Imaginando uma história para o nosso jogo, a nave poderia
pegar energia para aumentar o seu poder. O jogador pode ir acumulando pontos a medida que acumula

46 5 ENERGIA E CLONES
essa energia.

Vamos pecisar adicionar um novo ator, algo que represente o conceito de energia, como por
exemplo, um raio. Indo em "Novo ator > Escolher ator da biblioteca > Categoria > Coisas" encontramos
o sprite "Lightning".

O novo ator é grande demais para as proporções do jogo. Podemos ajustar seu tamanho da forma
que já aprendemos, usando o evento quando clicar em "ação" conectado ao comando de aparência
mude o tamanho para ... % com valor de 20%.

Figura 5.1: quando clicar em ação conectado com mude o tamanho para 20%

Assim como fizemos com os inimigos, a energia também deve andar da direita para a esquerda da
tela. Poderiamos copiar o script do ator, mas vale a pena fazermos novamente para praticamos a lógica.

Primeiramente vamos posicionar a energia no lado direito utilizando o comando de movimento vá


para x: ... y: ... colocando o valor máximo para o eixo X que é 240.

Figura 5.2: vá para x 240 y 7

Mas no eixo Y, a energia precia aparecer em posições aleatórias, então usamos o operador número
aleatório entre ... e ... . Lembrando que podemos usar o pano de fundo xy-grid para
identificarmos o valor mínimo e máximo de Y. Colocamos no operador o valor mínimo de -180 e
máximo de 180.

Figura 5.3: vá para x 240 y numero aleatorio entre -180 e 180

A energia irá deslizar para a esquerda usando o comando de movimento deslize por ... seg
até x ... y: ... com valor de 1 segundo, X com -240, mas queremos que o Y permaneça com o seu
valor atual, então usamos o comando posição de y .

5.2 TÁTICAS DE JOGO 47


Figura 5.4: deslize por 1 segundo x-240 y posição de y

Também precisamos esconder a energia quando ela chegar do lado esquerdo. Podemos utilizar o
comando de aparência esconda .

Figura 5.5: esconda

Não podemos esquecer que as intruções de posição, deslizar e esconder precisam ser sempre
repetidas. Podemos usar o comando de controle sempre .

Figura 5.6: sempre

A energia esconde, mas não aparece novamente. Isso porque esquecemos de usar o comando de
aparência mostre . Vale lembrar que a energia só deve ser mostrada após voltar à posição inicial com o
comando vá para x: ... y: ... .

Figura 5.7: mostre

Agora funcionou. A velocidade com que a energia desliza ainda está um pouco estranha, podemos
usar o operador de números aleatórios para dar características diferentes a cada passada. No número

48 5.2 TÁTICAS DE JOGO


aleatório entre ... e ... podemos colocar o primeiro valor como 2 e o segundo como 7, agora
conectamos no valor dos segundos do comando deslize por ... seg até x ... y: ... .

Figura 5.8: deslize com numero aleatorio

Para deixar mais interessante, podemos duplicar o ator de energia.

Figura 5.9: duplicar

Assim cada energia começará em posições e velocidades aleatórias.

5.3 EFEITOS
No momento a energia é um sprite estático, sem muita expressão no jogo. Uma maneira interessante
para dar mais vida ao ator é aplicar algum efeito a ele.

Podemos, por exemplo, mudar a cor da energia usando o comando de aparência mude o efeito
... para ... colocando o parâmetro de efeito como "cor" e o valor de 20. Podemos executá-lo
clicando duas vezes sobre o comando.

Figura 5.10: mude o efeito cor para 20

A cor ficou esverdeada. Trocar de cor não é algo muito interessante nesse caso. Podemos tentar
outro efeito, por exemplo, o brilho. Utilizando o mesmo comando mude o efeito ... para ... ,
agora colocaremos o efeito como "brilho" e o valor como 50.

Figura 5.11: mude o efeito brilho para 50

5.3 EFEITOS 49
Agora ficou bem legal. Podemos melhorar o efeito do brilho fazendo ele alternar entre os valores,
colocando um comando com 50 e outro com 0.

Figura 5.12: dois comandos de mudar efeito

Foi muito rápido, quase imperceptível. Podemos colocar o comando de controle espere ... seg
com o valor de 0.15 após cada mudança de brilho.

Figura 5.13: comando espere após cada comando de mudança de efeito

Para visualizar melhor o efeito, vamos cobrir o script usando um laço de repetição repita ...
vezes com o valor de 10.

Figura 5.14: repita 10 vezes

Assim como fizemos ao brilho, poderíamos criar um efeito de mudança de tamanho, dando a
impressão de que a energia está pulsando. Dentro de um outro laço repita ... vezes com valor de
10, colocamos dois comandos de aparência mude o tamanho para ... % , o primeiro com valor de
22% e o segundo 20%. Após cada instrução de mudança de tamanho colocamos o comando de controle
espere ... seg também com o valor de 0.15.

Figura 5.15: laço repita com comandos de mudança de tamanhos e espere

Ficou bem interessante o efeito do brilho junto com o tamanho. Para evitar scripts desnecessários
podemos colocar o comando que aumenta o tamanho embaixo do comando que gera o brilho, e o
comando que volta ao tamanho original embaixo do comando que retira o brilho.

50 5.3 EFEITOS
Figura 5.16: comando de mudança de tamanho dentro do laço do brilho

O laço repetir 10 vezes não é o mais adequado para essa situação, já que o script precisa sempre ser
executado. Trocamos o laço repita ... vezes pelo sempre .

Figura 5.17: script com o laço sempre

Onde podemos conectar o laço sempre ? Repare que o próprio sempre não tem conectores na parte
de baixo, justamente porque ele sempre fica sendo executado. Vamos utilizar outro evento quando
clicar em "ação" .

Figura 5.18: quando clicar em ação conectado ao laço sempre

Problemas na duplicação
Conseguimos aplicar um efeito bem legal no ator que representa a energia. Mas tem um detalhe,
temos dois atores que são energia.

Podemos copiar o bloco de script onde aplicamos o efeito no outro ator, mas isso resolveria o nosso
problema? Em um primeiro momento sim, mas isso gera uma grande dificuldade de manutenção.

Por exemplo, se tivéssemos vários atores que fazem a mesma função, e precisarmos alterar uma
determinada características deles, isso nos geraria um trabalho enorme pelo fato de ter que alterar em

5.3 EFEITOS 51
todos. Também existe o problema de você esquecer de alterar em um ator, ou colocar alguma
informação errada.

Note o grande problema que copiar código pode gerar. Quando trabalhamos com computação, fazer
o Copy and Paste (copiar e colar) é algo perigoso e que deve ser evitado.

5.4 CRIANDO CLONES


A primeira coisa que precisamos fazer para evitar a duplicidade é apagar o outro ator de energia.
Basta clicar com o botão direito do mouse em cima do ator e selecionar "apagar".

Figura 5.19: apagar ator

Não queremos ter apenas um ator de energia, queremos outro que seja idêntico ao primeiro, como
se fosse um clone. E clonar é justamente o que vamos fazer. Podemos usar o comando de controle crie
clone de ... com o valor "este ator".

Figura 5.20: crie clone de este ator

O ator deve ser clonado quando começar o jogo, então vamos conectar o crie clone de ... a um
evento quando clicar em "ação" .

Figura 5.21: quando clicar em ação conectado ao crie clone de este ator

Estamos conseguindo clonar, porém o clone não está deslizando da mesma forma que o ator
original. Isso acontece porque quando iniciamos o jogo, o ator original já existe, mas o clone só é criado
quando o script do ator original é executado.

O que precisamos fazer é que o script do ator original rodasse também para o clone. Existe o
comando de controle quando eu começar como clone que podemos colocar no lugar do quando
clicar em "ação" . Vamos fazer um teste no bloco que gera o movimento.

52 5.4 CRIANDO CLONES


Figura 5.22: quando eu começar como clone + bloco do movimento

Aparentemente funcionou. Enquanto o ator original estava brilhando, o clone estava deslizando para
a esquerda. Podemos colocar o quando eu começar como clone também no bloco que cria o efeito
do brilho.

Figura 5.23: quando eu começar como clone + bloco do brilho

Agora não funcionou como esperado. O clone brilhou e deslizou enquanto o original ficou parado.
O quando eu começar como clone funciona apenas em clones. Mas como vamos fazer para ter dois
atores executando o script? Simples, vamos criar outro clone.

Figura 5.24: criando dois clones

Agora temos dois atores clones executando o script, e o que fazemos com o original? Não precisamos
trabalhar com o original, então podemos arrastá-lo para algum canto e usar o comando de aparência
esconda após os comandos de clonagem.

Figura 5.25: esconda

5.4 CRIANDO CLONES 53


Agora temos dois clones executando o script. Caso quiséssemos mais um, basta utilizar mais um
comando crie clone de ... .

Figura 5.26: criando três clones

Podemos deixar o bloco que cria os clones mais enxuto, utilizando um laço de repetição repita
... vezes com o valor de 3, com o comando crie clone de ... dentro do laço. Agora é só
conectar o esconda embaixo do laço.

Figura 5.27: bloco que cria clones usando laço

Agora nosso script está escrito uma única vez e sendo aplicada a três clones diferentes. Se
precisarmos alterar alguma coisa em relação ao ator de energia, mudamos apenas em um único lugar.

54 5.4 CRIANDO CLONES


CAPÍTULO 6

COLISÃO DA NAVE COM A ENERGIA

6.1 DETECTANDO A COLISÃO


A energia já está funcionando da forma como queríamos. Agora precisamos de algum jeito para fazer a
nave detectar quando tocar a energia.

Nós já fizemos uma detecção de colisão com inimigo, que era basicamente um comando de controle
se ... então utilizando um sensor tocando em ... ? .

Vamos criar o script para detectar colisões na nave do jogador. Pegamos o sensor tocando em ...
? com o valor "Lightning" e colocamos como condição do controle se ... então .

Figura 6.1: se tocando em Lightning então

O nome do ator de energia é "Lightning", uma palavra que não é comum em nosso idioma. Podemos
alterar o nome do ator acessando suas informações.

Figura 6.2: informações do ator

Ao alterar o nome, o valor do comando tocando em ... ? deve ser alterado automaticamente.

Agora precisamos que a nave sempre verifique se está ocorrendo a colisão. Podemos colocar o bloco
dentro do laço sempre que verifica se as teclas de movimento da nave foram pressionadas.

6 COLISÃO DA NAVE COM A ENERGIA 55


Figura 6.3: bloco de detectar colisões dentro do laço sempre

Vamos testar colocando o comando de aparência diga ... com a frase "Encostei" dentro do se
... então .

Figura 6.4: dentro do controle se - diga Encostei

Quando ocorrer a colisão devemos esconder a energia para mostrar que ela foi capturada pela nave.
Mas se colocarmos o comando esconda no script da nave, ela é quem vai ser ocultada.

A energia deve ser avisada de que a colisão ocorreu, fazemos isso enviado mensagens. Vamos usar o
evento envie ... a todos criando uma nova mensagem com o valor "capturei a energia", e
colocando dentro do se ... então .

Figura 6.5: envie capturei a energia a todos

56 6.1 DETECTANDO A COLISÃO


Agora a energia pode receber a mensagem utilizando o evento quando receber ... também com
o valor "capturei a energia", e se esconder conectando ao esconda .

Figura 6.6: quando receber capturei a energia + esconda

Até funcionou, mas todos os clones de energia estão sendo escondidos. A mensagem da nave é
enviada para todos, então os três clones estão recebendo. Não conseguiremos trabalhar com a troca de
mensagem.

Quem deve saber quando se esconder é a energia. Ela deve verificar se ocorreu colisões. No script da
energia, utilizamos o sensor tocando em ... ? com o valor "nave_jogador" e colocamos como
condição do se ... então . Esse bloco precisa ser sempre verificado, então colocaremos o bloco se
... então dentro de algum laço sempre já existente, por exemplo, o bloco que gera o brilho.

Figura 6.7: bloco se então dentro do laço sempre

Funcionou como esperado, porém, quem for mais atento, deve ter notado que a energia não
reaparece instantaneamente. Isso ocorre porque ela continua deslizando até o final da tela para depois
reaparecer do lado esquerdo.

Para interromper o fluxo do script é necessário destruirmos o clone. Podemos usar o comando de
controle apague este clone .

6.1 DETECTANDO A COLISÃO 57


Figura 6.8: apague este clone

Não podemos esquecer de criar um novo antes de apagar o clone para que eles sempre voltem da
posição inicial.

Figura 6.9: criando e apagando clones

Blocos com muitas informações


Estamos correndo o risco de não conseguirmos capturar a energia. O script que verifica a colisão só é
executado após todo o script do brilho. Caso a colisão ocorra no momento de execução do brilho, a
verificação não será executada, gerando um risco enorme de não conseguir capturar a energia.

Vamos colocar cada função em seu próprio bloco. Pegamos outro laço de repetição sempre e
colocamos o bloco de verificação dentro.

Figura 6.10: laço sempre com o bloco de verificação

58 6.1 DETECTANDO A COLISÃO


Agora conectamos a um evento quando começar como clone .

Figura 6.11: quando comerçar como clone + verificação de colisão

Cada bloco executa a sua função ao mesmo tempo, sem a necessidade de esperar outro script ser
executado. É importante ressaltar que sempre executar a verificação utiliza mais processamento do
computador, o que em alguns casos pode gerar lentidão.

Efeito de som
Para deixar um pouco mais interessante, podemos colocar algum efeito sonoro na energia. Por
padrão temos o som "Pop", mas este é bem sem graça. Podemos pegar os sons no site Kenney.

Após baixar o pacote, basta ir em "Sons > Novo som > Carregar a partir de arquivo", agora é só
acessar o diretório do som e selecioná-lo, no nosso caso selecionamos o som powerUp8, e clicar em
"Open".

O som vem com o inicio silencioso, mas é possível removê-lo selecionando a parte silenciosa com o
mouse, clicando em editar e recortar.

Figura 6.12: recortar

O som deve ser tocado após a energia ser escondida. Vamos utilizar o comando de som toque o
som ... logo após o esconda .

6.1 DETECTANDO A COLISÃO 59


Figura 6.13: toque o som powerUp8

O efeito do som ficou muito baixo. Na verdade é a música que está alta demais. Selecionamos o
palco, e na aba sons podemos abaixar o volume da música.

Assim como fizemos com o som da energia, é necessário selecionar toda a faixa de áudio da música,
depois em "Efeitos > Suavizar".

Figura 6.14: suavizar

Agora o volume da música e do efeito sonoro estão mais equilibrados.

6.2 VARIÁVEIS
Utilizamos recursos sonoros para informar a um jogador quando uma energia foi capturada. Nosso
objetivo é criar um recurso visual para mostrar que estamos acumulando pontos dessas energias.

Supondo que cada energia vale 1 ponto e a contagem inicia com 0, a cada energia capturada, é
somado 1 ponto ao valor da contagem. Precisamos, de alguma forma, armazenar essa informação do
valor da contagem, mas que não seja fixo, já que o valor é variável, ou seja, é alterado.

O nome dos objetos que armazenam valores é justamente Variáveis. Podemos criar uma variável em
"Scripts > Variáveis" e clicar em "Criar uma variável".

Figura 6.15: criar nova variável

60 6.2 VARIÁVEIS
Agora a questão é: no script de qual ator devemos criar a variável? Uma variável pode existir de duas
formas, apenas para um ator ou para todos. Quando ela é criada para apenas um ator, somente ele terá
as informações de suas variáveis e também não saberá as informações das variáveis dos outros atores.
Quando a variável é criada para todos, qualquer ator saberá as informações da variável.

No nosso caso, os pontos devem valer para o jogo todo. Então a melhor forma de criar a variável de
pontuação é no script do palco.

Com o palco selecionado, criamos uma nova variável e colocamos o nome de "pontos".

Figura 6.16: variável pontos

Calculando os pontos
Repare que no palco a única opção de criação é "Para todos os atores". Agora acessando o script dos
atores e clicando em "Variáveis", temos acesso a variável pontos.

Os pontos serão adicionados quando ocorrer a colisão entre a nave e a energia. No script da energia
usamos o comando de variável adicione a ... .... com o nome da variável "pontos" e o valor de 1.

Figura 6.17: adicione a pontos 1

Agora só conectar após o comando esconda do bloco de colisão.

Figura 6.18: bloco colisão + adicione a pontos 1

Executando o jogo, vemos que a contagem dos pontos está funcionando. Mas se rodarmos o jogo
novamente notamos que os pontos não estão sendo zerados. Podemos zerar a pontuação quando o jogo

6.2 VARIÁVEIS 61
iniciar usando comando de variável mude ... para ... .

Figura 6.19: mude pontos para 0

Não é regra, mas como a variável pontos é global, é comum colocarmos os valores iniciais no palco.
No script do palco pegamos o evento quando clicar em "ação" e conectamos ao mude ... para
... com o valor do nome de "pontos" e o valor numérico de 0.

Figura 6.20: quando clicar em ação + mude pontos para 0

Podemos criar quantas variáveis quisermos, com o limite sendo a memória do computador. Outro
detalhe é que podemos esconder as variáveis desmarcando a opção que fica ao lado do nome da variável
em "Scripts > Variáreis".

Figura 6.21: ocultar variavel

Agora temos dois objetivos: fugir dos inimigos e capturar os pontos de energia.

62 6.2 VARIÁVEIS
CAPÍTULO 7

ADICIONANDO UM NOVO OBJETIVO E


RECONHECENDO ANTIGOS PROBLEMAS

7.1 REVIVENDO O COPY AND PASTE


Nosso próximo passo é adicionar um novo objetivo no jogo. Além de desviar dos inimigos e capturar
energia, queremos destruir os inimigos.

Temos ainda o problema de que os inimigos são copiados, e não clonados como fizemos com a
energia. Se alterarmos algo em um inimigo, também temos que alterar no outro. Para demonstrar a
vantagem de trabalhar sem cópias, podemos alterar a frequência em que a energia aparece.

Como a energia está dando pontos ao jogador, ela não pode ser um elemento muito frequente no
jogo. Podemos colocar um comando de controle espere ... seg com o tempo de 3 segundos antes
do mude o tamanho para ... % .

Figura 7.1: espere 3 segundos

Após os 3 segundos, as energias surgem ao mesmo tempo. Vamos colocar um operador números
aleatórios entre ... e ... colocando o valor minimo 2 e o maximo de 4.

Figura 7.2: numeros aletorios entre 2 e 4

7 ADICIONANDO UM NOVO OBJETIVO E RECONHECENDO ANTIGOS PROBLEMAS 63


Agora ficou bem mais interessantes, as energias não estão frequentes mas manteve a fluidez do jogo.
E o melhor de tudo é que fizemos alterações em apenas um lugar.

7.2 CLONANDO INIMIGOS


Estamos copiando o inimigo, vamos modificar para trabalhar com clones, assim como fizemos com
as energias. Nosso primeiro passo é remover o segundo inimigo clicando com o botão direito do mouse
e selecionando "apagar".

Figura 7.3: apagando inimigo

Outro detalhe é o nome do inimigo restante. Podemos alterá-lo para que o nome faça mais sentido
ao significado do ator, por exemplo, o nome de "inimigo". Para modificar o nome, basta acessar as
informações do ator e digitar o novo nome no campo.

Figura 7.4: informações do ator

Agora o que queremos fazer é clonar o inimigo duas vezes. Conectaremos o evento quando clicar
em "ação" ao laço de repetição repita ... vezes com o valor 2, e dentro do laço colocaremos o
comando de controle crie clone de ... com o valor "este ator".

Figura 7.5: quando clicar em ação + laço repita com o comando crie clone

Trocamos o evento quando clicar em "ação" por quando eu começar como clone do bloco
que troca a fantasia do ator.

64 7.2 CLONANDO INIMIGOS


Figura 7.6: quando eu começar como clone + bloco de troca de fantasia

Também não podemos esquecer de trocar o evento quando clicar em "ação" por quando eu
começar como clone do bloco de movimento.

Figura 7.7: quando eu começar como clone + bloco de movimento

Estamos com três inimigos na tela, esquecemos de esconder o ator original. Adicionamos o comando
de aparência esconda após o laço de repetição que cria os clones.

Figura 7.8: esconda

Com o inimigo clonado, qualquer alteração do script funcionará para todos os clones.

Clonando planetas
Além do inimigo e da energia, os planetas também são copiados. Mas diferente do inimigo que era
uma cópia idêntica, os planetas possuem posições fixas no eixo X e diferentes no eixo Y. Outro ponto
que vale ressaltar é que os planetas possuem tamanhos próprios e deslizam em velocidades diferentes.

Existem formas bem complexas de trabalharmos com clones mas mantendo cada clone com suas
própria características, mas não faz muito sentido abordarmos essa forma já que o intuito é simplificar o
nosso jogo.

7.2 CLONANDO INIMIGOS 65


Outra forma é manter os planetas como cópias, assim toda vez que alterarmos o script em um ator
temos a obrigação de alterarmos no outro, caso desejarmos as mesmas funcionalidades para ambos. Isso
prejudica futuras manutenções no jogo, além de ser uma má prática.

A forma mais simples é trabalharmos com apenas uma faixa de tamanho e uma faixa velocidade.
Perderemos um pouco as funcionalidades do jogo mas manteremos o script de uma forma fácil de ser
trabalhado.

O primeiro passo é excluir o segundo planeta clicando com o botão direito e em "apagar".

Agora dentro do script do nosso único planeta, vamos começar alterando o comando mude o
tamanho para ... % trocando o valores do operador número aleatório entre ... e ... para
mínimo 4 e máximo 25.

Figura 7.9: mude o tamanho para numero aleatorio entre 4 e 25 %

Agora no comando vá para x: ... y: ... vamos colocar apenas no Y o operador número
aleatório entre ... e ... com o valor mínimo -180 e máximo de 180.

Figura 7.10: vá para x 216 y numero aleatorio entre -180 e 180

No comando que faz o planeta deslizar, alteramos o operador número aleatório entre ... e
... para valor mínimo 30 e máximo 90. Não podemos esquecer de alterar o valor de Y do comando
deslize por ... seg até x: ... y: ... utilizando o comando de movimento posição de y .

66 7.2 CLONANDO INIMIGOS


Figura 7.11: deslize por número aleatório entre 30 e 90 seg até x: -255 y: posição de y

Alteramos o comando evento quando clicar em "ação" pelo quando eu começar como
clone .

Figura 7.12: quando eu começar como clone + bloco do planeta

Com tudo preparado podemos clonar nosso planeta. Pegamos o evento quando clicar em
"ação" e conectamos a um laço repita ... vezes com o valor de 2. Dentro do laço colocamos o
comando de controle crie clone de ... com o valor "este ator". Não podemos esquecer de utilizar o
comando de aparência esconda após o laço para que esconda o ator original.

Figura 7.13: bloco de clonagem do ator planeta

Para deixar o jogo um pouco mais dinâmico, podemos trocar os valores do operador número
aleatório entre ... e ... que está dentro do comando deslize por ... seg até x: ... y:
... para mínimo 20 e máximo 70.

7.2 CLONANDO INIMIGOS 67


Figura 7.14: número aleatório entre 20 e 70

Apesar de todas as mudanças o jogo se mantém bem natural. O único detalhe que incomoda é a
questão da fantasia. Os clones estão usando a mesma fantasia, dando a impressão de que é sempre o
mesmo planeta.

Para trocar de fantasia foi utilizado o comando próxima fantasia . O que queremos na verdade é
utilizar uma fantasia a aleatória. Podemos usar um laço repita ... vezes com o valor sendo o
operador número aleatório entre ... e ... de valor mínimo 1 e máximo 10, e dentro do laço
colocamos o comando próxima fantasia . Assim o comando próxima fantasia é rodado uma
quantidade de vezes diferentes para cada clone.

Figura 7.15: repita numero aleatório entre 1 e 10 vezes + próxima fantasia

Agora conectamos o laço antes do comando mude o tamanho para ... % , para que as fantasias
sejam carregadas no inicio do jogo.

Figura 7.16: bloco com o laço de troca de fantasia antes do comando mude o tamanho

Funcionou, mas será que fizemos da melhor forma? Não. Estamos fazendo os planetas trocarem de
fantasia várias vezes. O ideal seria escolhermos um número aleatório e pegarmos a fantasia que
representasse esse número.

68 7.2 CLONANDO INIMIGOS


No total temos 19 fantasias. O primeiro passo é acessar a aba "Fantasias" do planeta e alterar os
nomes de cada fantasias para números começando de 1 até 19, tomando o cuidado de não repetir os
números.

Figura 7.17: campo de nome da fantasia

Com todos os nomes devidamente alterados, podemos remover o laço que fazia a troca de fantasias.
Agora podemos utilizar o comando de aparência mude para fantasia ... colocando o operador
número aleatório entre ... e ... onde escolhemos o nome da fantasia. No operador colocamos o
valor mínimo 1 e máximo 19.

Figura 7.18: mude para a fantasia número aleatório entre 1 e 19

Colocamos o novo comando antes do comando mude o tamanho para ... % .

Figura 7.19: bloco + mude para a fantasia número aleatório entre 1 e 19

Além de mais enxuto, o script é mais direto, evitando processamentos desnecessários.

Vimos que é vantajoso utilizar clones em atores que faziam a mesma função, como o inimigo e a
energia. No caso do planeta há vantagens e desvantagens, sendo necessário analisarmos e modificarmos
o código para que seja melhor tanto para o jogo quanto para nós que programamos. Essa modificação de
código chamamos de refatoração.

7.2 CLONANDO INIMIGOS 69


CAPÍTULO 8

CRIANDO O TIRO

8.1 CRIANDO O TIRO


No momento, nossa nave tem o objetivo de escapar dos inimigos, mas chegou a hora de agir ativamente
contra eles. O que podemos fazer é atirar um laser contra os inimigos.

Vamos criar um novo ator para representar o laser, em vez de usar um sprite já pronto vamos
desenhá-lo em "Novo ator > Pintar novo ator".

Figura 8.1: pintar novo ator

Para representar um laser, vamos desenhar um retângulo com a cor laranja para dar mais destaque
no pano de fundo. Começamos selecionando o formato retângulo no menu de opções.

Figura 8.2: opção de retangulo

Na parte inferior, escolha a cor e a opção de retângulo preenchido para que o interior também seja
pintado.

70 8 CRIANDO O TIRO
Figura 8.3: retângulo preenchido

Com o retângulo selecionado, basta usar o mouse para desenhar no editor. Caso o desenho do laser
fique grande demais, é só apagar o desenho e usar a opção de zoom para facilitar em desenhos pequenos.

Figura 8.4: opção de zoom

Pronto, ator está criado. Lembrando que é possível trocar o nome do ator para um que faça mais
sentido, bastando acessar suas informações.

Figura 8.5: infromações do laser

O laser não deve ficar o tempo todo na tela, apenas quando é atirado. Nas informações do ator
podemos escondê-lo desmarcando a opção "mostrar".

Figura 8.6: opção mostrar

É sempre uma boa prática esconder pelo script para garantir que ele realmente estará escondido. No
script do ator, pegamos o evento quando clicar em "ação" e conectamos ao comando de aparência
esconda .

Figura 8.7: quando clicar em ação + esconda

A nave do jogador vai atirar o laser quando a tecla "espaço" for pressionado. Podemos verificar se a
tecla "espaço" foi pressionada da mesma forma que verificamos as teclas de "seta" que usamos para

8.1 CRIANDO O TIRO 71


movimentar a nave. No script da nave usamos o comando de controle se ... então usando como
condição o sensor tecla ... pressionada? e conectando dentro do laço sempre que verifica as
teclas.

Figura 8.8: laço sempre + se tecla espaço pressionada? então

O que fazer quando a tecla espaço for pressionada? Para a nave se comunicar com o laser existem
duas maneiras, a primeira é enviar mensagens e a segunda é criar um clone. Vamos pegar o comando de
controle crie clone de ... com o valor "laser".

Figura 8.9: crie clone de laser

Se rodarmos o jogo, o laser não aparece. Isso porque precisamos no script do laser usar o comando
de aparência mostre conectado ao comando de controle quando eu começar como clone .

Figura 8.10: quando eu começar como clone

Executando o jogo novamente, ao pressionar "espaço" o laser aparece em uma posição que não faz
muito sentido. O laser precisa aparecer na mesma posição que a nave está, afinal o tiro está saindo da
nave.

72 8.1 CRIANDO O TIRO


Mas como podemos pegar a posição de outro ator? Existem vários tipos de sensores, e o ... de
... você pode especificar o que você quer, por exemplo, as posições ou o tamanho e indicar de qual
ator.

Figura 8.11: posição x de nave_jogador + posição y de nave_jogador

Executando o jogo, o laser pode aparecer em um local bem diferente da posição da nave. Se
analisarmos a fantasia do laser, a cruz que indica o centro do desenho não está centralizado com o laser.

Para centralizar, é só escolher a opção de "Especificar centro" e clicar no meio do laser.

Figura 8.12: especificar centro

IMPORTANTE: o Scratch possui um bug no editor de fantasias. Quando centralizar a cruz com o laser,
é necessário selecionar o pincel antes de clicar fora do editor, para que o Scratch não falhe na
centralização do sprite.

Com o sprite centralizado corretamente, o laser vai ficar embaixo da nave quando executarmos. A
posição de centro da nave é exatamente no meio, e não no bico.

Da mesma forma que fizemos com o laser, podemos fazer com a nave e indicar que o centro do sprite
é o bico da nave. Lembre de sempre selecionar o pincel antes de clicar fora do editor.

A nave ficou um pouco escondida agora que trocamos a posição de centro.

Figura 8.13: nave escondida

Para corrigir, é só colocar o valor de X como -150 do comando vá para x: ... y: ... .

Figura 8.14: vá para x 150 y 0

8.1 CRIANDO O TIRO 73


Agora o laser vai aparecer exatamente no bico da nave. É importante entender que nem sempre o
centro do sprite precisa ser o meio do desenho, e sim o que se encaixar melhor a situação do jogo.

8.2 DETECTANDO COLISÕES RÁPIDAS


Com o tiro ajustado, temos que fazê-lo se deslocar para direita. Nós já aprendemos como fazer um
ator se deslocar, utilizamos o comando de movimento deslize por ... seg até x: ... y: ... .
Deixamos o comando com valor de 1 segundo, o X com 240 para que ele deslize até o limite do eixo
horizontal, e o Y utilizamos a posição y para que ele mantenha o valor atual. Conectamos após o
comando vá para x: ... y: ...

Figura 8.15: deslize por 1 segundo até x 240 y posição de y

O tiro está funcionando, mas falta esconder o laser quando ele chegar a sua posição final. Após o
deslize por ... seg até x: ... y: ... colocamos o comando de aparência esconda .

Figura 8.16: esconda

A velocidade do tiro está um pouco lenta, vamos alterar o tempo do comando deslize por ...
seg até x: ... y: ... para 0.5 segundos.

Figura 8.17: deslize por 0.5 segundo até x 240 y posição de y

O tiro está funcionando como queríamos. Repare que usamos o comando vá para x: ... y:
... para que o laser saiba ir para a posição da nave. Ir para a posição de um ator é algo tão comum que
já existe o comando de movimento vá para ... que faz essa função, basta colocarmos o valor como
"nave_jogador".

74 8.2 DETECTANDO COLISÕES RÁPIDAS


Figura 8.18: vá para nave_jogador

Com o tiro funcionando, podemos trabalhar na explosão do inimigo. Mas antes de explodir, é
necessário detectarmos a colisão do inimigo com o laser. Assim como fizemos para verificar a colisão da
nave com o inimigo, podemos utilizar o comando de controle se ... então com a condição sendo o
sensor tocando em ... ? com o valor "laser".

Figura 8.19: se tocando em laser? então

Para sinalizar que a explosão ocorreu, podemos tocar o som de explosão que já utilizamos na colisão
com a nave. Dentro do se ... então colocamos o comando de som toque o som ... até o fim
colocando o som "explosion".

Figura 8.20: se tocando em laser? então + toque o som

Agora colocamos o bloco dentro do laço sempre para que sempre seja verificado.

Figura 8.21: laço sempre + se tocando em laser? então

A verificação não está funcionando muito bem, pelo fato de que o laço sempre , que faz as
verificações, está cuidando de muitas funções. É possível que quando o laser colidir com o inimigo a
verificação dessa colisão não esteja sendo executada no momento. Para evitar essa situação, podemos

8.2 DETECTANDO COLISÕES RÁPIDAS 75


colocar o bloco de verificação da colisão entre o laser e o inimigo em um novo bloco.

Pegamos o comando de controle quando eu começar como clone e conectamos um laço


sempre . Dentro do laço, colocamos o bloco se ... então que verificar a colisão do laser com o
inimigo.

Figura 8.22: quando eu começar como clone + sempre + se tocando em laser? então + toque o som *explosion* até o fim

Temos uma maior precisão com o tiro. Se atirarmos mais de uma vez em um mesmo inimigo, apenas
o primeiro tem a colisão detectada por conta do script ficar travado até o som terminar de ser
reproduzido. Mas como o inimigo só vai explodir uma vez então podemos deixar como está.

Podemos finalmente trabalhar na animação de explosão do inimigo. O primeiro passo é subir as


imagens de explosão em "Fantasias > Carregar traje a partir de arquivo".

Figura 8.23: carregar traje a partir de arquivo

Para que a animação tenha um efeito melhor, as imagens devem ficar em ordem iniciando no 0 e
indo até 8.

Executando o jogo os inimigos já iniciam explodindo. O que causa esse problema é que o bloco que
usamos para trocar os sprites do inimigo com fogo alto e baixo, é também aquele por onde passam os
sprites de explosão.

8.3 IMPLEMENTANDO A EXPLOSÃO DO INIMIGO


O inimigo está explodindo mesmo que não ocorra colisão. O script que implementamos faz com que
o inimigo sempre altere para a próxima fantasia, inclusive as de explosões.

Já que no momento não faz sentido, podemos remover o próxima fantasia para refatorarmos o
script.

76 8.3 IMPLEMENTANDO A EXPLOSÃO DO INIMIGO


Figura 8.24: bloco sem o comando proxima fantasia

O primeiro passo é garantir que o inimigo inicie com a fantasia de nave inimiga. Pegamos o
comando mude para fantasia ... colocando o valor "alien_01 (1)", e conectamos antes do laço
sempre .

Figura 8.25: comando mude para fantasia antes do laço sempre

Agora usamos o próxima fantasia dentro do sempre . Porém tal abordagem não irá adiantar
muito, já que ainda passará pelas fantasias de explosão.

Para alternarmos entre as fantasias sem usar a de explosão, temos que verificar se a fantasia que
estiver usando for a de explosão, então trocamos para a fantasia "alien_01 (1)" novamente.

Podemos fazer isso por meio da numeração das fantasias. A numeração pode ser encontrada na aba
"Fantasias", ao lado do ícone dos sprites.

Figura 8.26: numero das fantasias

8.3 IMPLEMENTANDO A EXPLOSÃO DO INIMIGO 77


As fantasias de explosão começam a partir do numero 3. Dessa forma, se a fantasia for igual a 3,
devemos mudar para a fantasia "alien_01 (1)". Mas como podemos comparar? Utilizando o operador
... = ... , com o primeiro parâmetro sendo o comando de aparência nº da fantasia , e o segundo
sendo o número 3.

Figura 8.27: nº da fantasia = 3

Colocamos o operador de igualdade como condição no comando se ... então .

Figura 8.28: se nº da fantasia = 3 então

E, dentro do se ... então , colocamos o comando de aparência mude para fantasia ... com
o valor "alien_01 (1)".

Figura 8.29: se então + mude para a fantasia

Podemos agora conectar todo o bloco se ... então após o comando próxima fantasia .

Figura 8.30: próxima fantasia + se então

Fucionou, porém se o computador for um pouco lento, antes de trocar para a fantasia "alien_01 (1)"
será mostrado a fantasia de explosão.

O ideal é que o inimigo não use a fantasia da explosão. Nesse caso, se o número da fantasia for igual
a 1, ele muda para a fantasia "alien_02 (1)", caso contrário, mude para a fantasia "alien_01 (1)".

78 8.3 IMPLEMENTANDO A EXPLOSÃO DO INIMIGO


O comando de controle se ... então, senão atende a nossa necessidade.

Figura 8.31: se então, senão

Colocamos como condição o operador ... = ... com o primeiro parâmetro sendo o comando
nº da fantasia , e o segundo sendo o número 1. Dentro do espaço do "então" é o que queremos que
aconteça caso a condição seja verdadeira, no caso queremos o comando mude para fantasia ...
com o valor "alien_02 (1)". Se a condição for falsa, colocamos no espaço do "senão" o comando mude
para fantasia ... com o valor "alien_01 (1)". Agora é só remover os comandos se ...então e o
próxima fantasia , e conectar o novo bloco no lugar.

Figura 8.32: se então, senão com as condições

Conseguimos ajustar a troca de fantasia, agora podemos trabalhar na animação de explosão. Quando
o laser colidir, a primeira instrução é trocar para a fantasia de explosão, vamos adicionar o comando de
aparência mude para a fantasia ... com valor de "explosion00" antes do comando toque o som
... até o fim .

Figura 8.33: mude para a fantasia explosion00

Para gerar a animação, vamos precisar passar por todas as fantasias, podemos conectar após o
comando toque o som ... até o fim , um laço de repetição repita ... vezes com o valor de 8,

8.3 IMPLEMENTANDO A EXPLOSÃO DO INIMIGO 79


já que são 9 fantasias no total. Dentro do laço colocamos o comando próxima fantasia .

Figura 8.34: repita 8 vezes + próxima fantasia

Além da explosão estar muito rápida, no final a fantasia da nave inimiga é usada novamente. É
importante lembrar que quando usamos os comandos de controle quando eu começar como clone
os bloco são executados simultaneamente. Enquanto o bloco da explosão está sendo executado, o que
alterna entre as fantasias da nave inimiga também está. Precisamos encerrar os outros scripts desse ator
usando o comando pare ... com o valor "outros scripts do ator", e conectando antes da troca de
fantasia.

Figura 8.35: pare outros scripts do ator

O problema foi resolvido, mas a animação está acontecendo atrasada porque usamos o comando
toque o som ... até o fim . Vamos trocar pelo comando toque o som ... , que não trava a
execução.

Figura 8.36: toque o som

80 8.3 IMPLEMENTANDO A EXPLOSÃO DO INIMIGO


Para sincronizar melhor o som com a animação, podemos colocar o comando de controle espere
... seg com valor de 0.1 segundos antes do comando próxima fantasia .

Figura 8.37: espere 0.1 seg

O sprite é desproporcional ao tamanho da nave, podemos conectar o comando mude o tamanho


para ... % com o valor de 30, antes de mudar a fantasia. Outro detalhe importante é esconder o
inimigo destruído, então colocamos o comando esconda após o laço repita ... vezes .

Figura 8.38: mude o tamanho para 30% + bloco + esconda

O problema é que agora não surgem mais inimigos, é necessário criar novos clones após o inimigo
ser escondido. Colocamos o comando crie clone de ... com o valor "este ator" após o comando
esconda .

8.3 IMPLEMENTANDO A EXPLOSÃO DO INIMIGO 81


Figura 8.39: crie clone de este ator

O que acontece com o atores que são escondidos? Permanecem na tela. A medida que o jogo é
executado, são criados mais clones, e se não eliminarmos os clones que não estão em uso, a memória do
computador será cada vez mais consumida. Podemos evitar esse problema usando o comando apague
este clone após o comando crie clone de ... .

Figura 8.40: apague este clone

Um detalhe que podemos adicionar é um som para o laser. Selecionando a nave principal, podemos
ir em "Sons > Novo som > Escolher som da biblioteca".

Figura 8.41: escolher som da biblioteca

Na biblioteca, podemos ir na seção "Eletrônicos" e escolher o efeito de som chamado "laser2". No


script da nave, colocamos o comando toque o som ... com valor de "laser2" e conectamos após o
comando que cria o clone do laser.

82 8.3 IMPLEMENTANDO A EXPLOSÃO DO INIMIGO


Figura 8.42: toque o som lase2

Temos o tiro do laser e a explosão das naves inimigas funcionado.

8.3 IMPLEMENTANDO A EXPLOSÃO DO INIMIGO 83


CAPÍTULO 9

ENERGIA E PONTOS

9.1 ADICIONANDO ENERGIA


Usando as técnicas aprendidas até agora, podemos deixar o jogo um pouco mais emocionante. No
momento, podemos atirar infinitamente, destruir todos os inimigos que surgirem e coletar todos os
pontos, sem perder o jogo.

Para dar mais desafio ao jogo, podemos mudar a abordagem em alguns aspectos. Em vez de dar
pontos, a energia poderia ser utilizada no tiro. Assim o jogador só poderia atirar quando pegasse
energia.

Vamos renomear a variável pontos que colocamos no palco, colocando o nome de energia . Para
renomear basta selecionar o palco e clicar em "Variáveis", depois clicando com o botão direito do mouse
em cima da variável selecionamos "renomear variável".

Figura 9.1: renomeando variável

No campo, escreva "energia" e clique em "OK".

Figura 9.2: campo energia

No script da nave do jogador vamos comparar se possuímos energia. Usando o comando de controle
se ... então , podemos usar como condição o operador ... > ... com o primeiro parâmetro a
variável energia e o segundo o valor 0.

Figura 9.3: se energia > 0

84 9 ENERGIA E PONTOS
Assim ele só vai executar o que estiver dentro do se ... então se a variável energia for maior
que 0. Colocaremos o se ... então sobre os comandos crie clone de ... e toque o som .

Figura 9.4: se energia > 0 então + crie clone de "laser" + toque o som "laser2"

Ao atirar o laser, a energia deve ser gasta. Antes do crie clone de ... podemos usar o comando
de variável adicione a ... ... com o parâmetro "energia" e o valor -1.

Figura 9.5: adicione a energia -1

Deixamos o jogo bem mais desafiador agora que obrigamos os jogadores a pegarem energia para
destruir os inimigos. Porém perdemos a pontuação.

Os pontos podem ser ganhos destruindo os inimigos, com cada inimigo valendo 10 pontos. Vamos
criar uma nova variável pontos colocando para todos os atores.

9.1 ADICIONANDO ENERGIA 85


Figura 9.6: variável pontos

Agora no script do inimigo colocamos o comando adicione a ... ... com o parâmetro "pontos"
e o valor 10, dentro do bloco onde verificamos a colisão do laser com o inimigo.

Figura 9.7: adicione a pontos 10

Não podemos esquecer de zerar o valor da variável pontos no inicio do jogo. Selecionamos o palco e
utilizamos o comando de variável mude ... para ... com o parâmetro "pontos" e o valor 0.

Figura 9.8: mude pontos para 0

Para o jogador não ficar sem nenhuma ação no começo do jogo, podemos colocar o valor inicial da
energia como 3 para o jogo iniciar com tiros.

9.2 TRABALHANDO COM COMENTÁRIOS


A medida que criamos novas funcionalidades em nosso jogo, o script aumenta de tamanho. Alguns

86 9.2 TRABALHANDO COM COMENTÁRIOS


blocos ficam tão grandes que podem se tornar confusos e difíceis de entender.

Por esse motivo existe o recurso de adicionar comentários. Para adicionar um comentário, é só
clicar com o botão direito do mouse e selecionar "Adicionar comentário".

Figura 9.9: adicionar comentário

Vamos começar adicionado comentários nos blocos da nave principal. O primeiro bloco é o que
verifica se as teclas "Seta para cima", "Seta para baixo" e "Espaço" estão pressionadas. Podemos adicionar
o comentário:

Reage ao teclado, permitindo que a nave navegue ou atire.

Figura 9.10: comentário bloco de verificação de teclas

Você pode diminuir o tamanho da caixa de comentário, além de arrastar para mudar a posição. Um
cuidado deve ser tomado ao mudar a caixa de comentário de posição, podendo perder a ligação do
comentário com o bloco.

Os comentários podem ser adicionados também em qualquer pedaço do script. O pedaço do código
que verifica se a "energia" é maior que 0, tem a função de tentar atirar. Seria interessante adicionar o
comentário:

9.2 TRABALHANDO COM COMENTÁRIOS 87


Tenta atirar.

Figura 9.11: script de verificação para atirar

O segundo bloco é o que coloca a nave na frente dos outros atores e muda o tamanho para 50%. Esse
bloco faz as configurações iniciais da nave. Podemos colocar o comentário:

Inicializa a nave.

Figura 9.12: comentário do bloco que inicializa a nave

O bloco restante tem a função de explodir a nave e encerrar o jogo. O comentário poderia ser:

Destrói a nave e encerra o jogo.

Figura 9.13: comentário do bloco que destrói a nave

No palco temos um bloco apenas que zera as variáveis e toca a música do jogo. Podemos comentar:

88 9.2 TRABALHANDO COM COMENTÁRIOS


Inicializa as variáveis e toca a música do jogo.

Figura 9.14: comentário do bloco do palco

O inimigo possui diversos blocos. Podemos começar pelo bloco com o comando pare ... com
valor "outros scripts do ator". A função deste bloco é destruir o inimigo. Comentamos:

Destrói o inimigo.

Figura 9.15: comentário do bloco que destrói o inimigo

O bloco onde os clones inimigos são criados, podemos comentar:

Cria os inimigos.

9.2 TRABALHANDO COM COMENTÁRIOS 89


Figura 9.16: comentário do bloco que cria os clones inimigos

O inimigo tem o bloco que faz o movimento de deslizar para a esquerda, comentamos:

Move o inimigo atual.

Figura 9.17: comentário do bloco que move inimigos

No bloco restante, temos duas funções sendo feitas. A primeira cria a animação da turbina da nave
inimiga, e a segunda detecta a colisão. Vamos adicionar os comentários:

Animação da turbina da nave inimiga.

Detecta colisão.

Figura 9.18: comentário do bloco que anima a turbina e detecta colisão dos inimigos

90 9.2 TRABALHANDO COM COMENTÁRIOS


No planeta temos dois blocos. O primeiro a ser comentado é o que cria os clones. Podemos
adicionar o comentário:

Cria planetas.

Figura 9.19: comentário do bloco que cria clones dos planetas

O segundo bloco é o que faz os planetas andarem para a esquerda:

Faz os planetas andarem.

Figura 9.20: comentário do bloco que movimenta os planetas

No ator Game Over os blocos são bem pequenos e fáceis de serem entendidos, não sendo necessários
adicionarmos comentários.

A energia possui vários blocos. O que atacaremos primeiro é o bloco que cria os clones da energia:

Cria energias.

9.2 TRABALHANDO COM COMENTÁRIOS 91


Figura 9.21: comentário do bloco que cria as energias

O bloco com os comandos de mudança de efeito de brilho, podemos comentar:

Efeito de pisca-pisca.

Figura 9.22: comentário do bloco do efeito de brilho

O bloco com a instrução de deslizar tem a função de fazer a energia navegar. Vamos comentar:

Faz a energia navegar.

Figura 9.23: comentário do bloco de navegação da energia

O bloco restante é onde detectamos a colisão da nave do jogador com a energia. Podemos comentar:

Detecta colisão para a captura da energia.

92 9.2 TRABALHANDO COM COMENTÁRIOS


Figura 9.24: comentário do bloco de captura da energia

Restando agora o ator laser. Apenas o bloco quando eu começar como clone necessita de
comentário. Sua função é fazer o laser navegar na tela. Vamos comentar:

Navega na tela.

Figura 9.25: comentário do bloco de navegação na tela

Os comentários são muito úteis para entender e auxiliar na manutenção do script. Porém não devem
ser usados de maneira exagerada, apenas quando o bloco se tornou algo complexo ou com diferentes
funções.

9.3 CONHECENDO BLOCOS CUSTOMIZADOS


O código vai crescendo e ficando cada vez mais complexo à medida que adicionamos
funcionalidades. Se o código necessita de comentários para ser entendido é porque ele pode estar muito
mal organizado.

Uma abordagem que podemos usar é refatorar o código para facilitar o entendimento. O Scratch
oferece um recurso interessante que é a customização de blocos.

Vamos começar analisando os blocos da nave do jogador. O bloco, em que as verificações das teclas
são feitas, possui uma função extra que é tentar atirar, e é esse pedaço que vamos extrair.

Em "Scripts > Mais Blocos" temos a opção de "Criar um bloco". Colocamos um nome que faça
sentido a função do bloco, por exemplo, "tenta atirar".

9.3 CONHECENDO BLOCOS CUSTOMIZADOS 93


Figura 9.26: colocando nome no bloco customizado

Um novo ícone de bloco chamado "defina tenta atirar" irá aparecer no campo do script. Podemos
remover o pedaço do bloco anterior e conectá-lo no novo ícone.

Figura 9.27: tenta atirar + bloco de verificação se energia maior que 0

Agora no bloco anterior podemos puxar o comando tenta atirar e conectá-lo no se ...
então que verifica a tecla "Espaço".

Figura 9.28: se então + tenta atirar

Fizemos o nosso primeiro bloco customizado. A nave do jogador não tem nenhum outro bloco que
realmente necessite a refatoração, mas sinta-se livre para refatorar caso julgue necessário. O comentário
não é mais necessário, já que o novo bloco está bem explícito sua função.

O bloco customizado não é visível a outros atores, apenas o que criou é quem pode visualizar o
bloco.

No inimigo temos o bloco que destrói. Podemos refatorar todo o conteúdo do comando de controle
se ... então . Criamos um novo bloco customizado com o nome de "destroi a si mesmo".

94 9.3 CONHECENDO BLOCOS CUSTOMIZADOS


Figura 9.29: destroi a si mesmo

Colocamos o comando destroi a si mesmo dentro do se ... então .

Figura 9.30: se então + destroi a si mesmo

Outro ponto interessante de refatorarmos é o próprio comando se ... então que verifica a
colisão com o laser. Podemos trocá-lo por outro comando de controle espere até ... colocando o
sensor tocando em ... com valor de "laser" como parâmetro. Agora só conectá-lo antes do destroi
a si mesmo .

Figura 9.31: espere até tocando em laser + destroi a si mesmo

Quantas vezes o inimigo pode se autodestruir? Apenas uma, então não é necessário usar o laço
sempre , podemos removê-lo.

Figura 9.32: sem laço sempre

Podemos refatorar ainda mais os comandos do bloco destroi a si mesmo . Vamos criar um novo

9.3 CONHECENDO BLOCOS CUSTOMIZADOS 95


bloco chamado "mostra a explosão visualmente" e colocar todos os comandos relacionados a animação
de explosão, como os comandos mude o tamanho ... % , mude a fantasia para ... , repita ...
vezes e todo seu conteúdo e o comando esconda .

Figura 9.33: bloco - mostra a explosão visualmente

Com o novo bloco, utilizamos o comando mostra a explosão visualmente após o comando
toque o som ... .

Figura 9.34: toque o som + mostra a explosão visualmente

Também podemos refatorar o script que gera a animação do fogo da turbina. Vamos criar um novo
bloco chamado "anima o foguinho" e extrair o se ... então, senão e o espere ... seg
conectando ao novo bloco e removendo o comentário que não é mais necessário.

Figura 9.35: anima o foguinho

Dentro do laço sempre , colocamos no lugar do código extraído o comando anima o foguinho , e
conectando após o comando o comando se ... então que verifica a colisão com a nave do jogador.

9.4 CONCLUSÃO

96 9.4 CONCLUSÃO
Neste curso vimos muitas funcionalidades do Scratch. Mas também questionamos diversos pontos
da animação, ilustração e programação.

Criamos e utilizamos blocos cada vez mais complexos, também extraímos funcionalidades em blocos
customizados e simplificamos os atores. Organizamos melhor as nossas idéias, para que ficasse mais fácil
de darmos manutenção ao nosso jogo.

Você tem total liberdade de criar e avançar da forma que desejar com o jogo. Pode dar novas
funcionalidades para os inimigos e nave do jogador, colocar mais desafios, e assim por diante.

Você poderia, por exemplo, criar uma animação de introdução. Nessa animação seria contada a
história, motivando o jogador a se envolver com o jogo.

Se tiver interesse em continuar aprendendo sobre o Scratch, a Alura Start é o caminho.

9.4 CONCLUSÃO 97

Você também pode gostar