Escolar Documentos
Profissional Documentos
Cultura Documentos
Sumário
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.2 Variáveis 60
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
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.
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.
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".
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".
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.
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.
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 .
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.
É 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.
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.
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
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"
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.
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.
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.
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.
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.
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% .
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.
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" .
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)
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: ... .
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.
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.
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.
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.
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 .
Ficou bem lento com 1 segundo. Vamos mudar o valor para 0.2 segundo.
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".
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.
Tocou apenas uma vez. Já sabemos o que fazer para que a música sempre continue tocando, basta
usar o comando de controle sempre .
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 .
Atores auxiliares
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.
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.
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 .
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.
O movimento ficou bem melhor, mas 1 segundo é bem rápido, então vamos alterar o tempo para 40
segundos.
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.
Vamos começar substituindo o planeta. Na área de "Novo ator" selecionamos "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.
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".
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.
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.
É 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".
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.
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
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.
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.
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: ... .
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:
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" :
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.
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.
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 :
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.
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".
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".
Mas o que colocaremos dentro do laço para trocar de fantasia? Em "Scripts > Aparência" temos o
comando 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 .
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.
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" .
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.
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".
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.
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.
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%.
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.
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.
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.
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 .
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 ... % .
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.
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).
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.
Agora em "Scripts > Sensores" pegamos o comando tocando em ... ? colocando o valor como a
nave do jogador. Agora conectamos dentro do comando diga ... .
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.
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.
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 .
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:
Agora dentro do se ... então , colocamos o comando diga ... por ... segundos com a
frase "Peguei você!" e o valor de 2 segundos.
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.
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.
Podemos removê-lo selecionando o trecho silencioso, depois clicando em "Editar > Recortar".
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 .
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 .
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
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.
Queremos que seja executado quando clicarmos em ação, então vamos usar o evento 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.
A mesma coisa deve ser feita para a tecla "Seta para baixo". Agora conectamos dentro do laço de
repetição.
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.
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.
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".
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: ... .
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
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.
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.
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".
Um editor será aberto com várias opções que podemos utilizar. Escreveremos a palavra "GAME
OVER" utilizando a 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.
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.
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 .
Uma janela aparecerá com um campo para colocarmos o nome da mensagem, por exemplo,
"gameover".
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.
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.
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.
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.
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 .
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 .
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.
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%.
Parando o jogo
Mesmo após a explosão da nave o jogo continua sendo executado. Em "Scripts > Controle" podemos
usar o controle 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 .
Podemos colocar um espere ... seg antes do pare ... para que o som da explosão seja
executado por completo.
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.
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.
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.
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!
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.
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.
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 .
Também precisamos esconder a energia quando ela chegar do lado esquerdo. Podemos utilizar o
comando de aparência 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 .
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: ... .
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
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.
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.
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.
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.
Para visualizar melhor o efeito, vamos cobrir o script usando um laço de repetição repita ...
vezes com o valor de 10.
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.
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 .
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" .
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.
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".
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.
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.
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.
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.
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.
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.
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 .
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.
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.
Vamos testar colocando o comando de aparência diga ... com a frase "Encostei" dentro do se
... então .
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 .
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.
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 .
Não podemos esquecer de criar um novo antes de apagar o clone para que eles sempre voltem da
posição inicial.
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.
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.
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 .
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".
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".
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".
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.
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 ... .
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.
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".
Agora temos dois objetivos: fugir dos inimigos e capturar os pontos de energia.
62 6.2 VARIÁVEIS
CAPÍTULO 7
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 ... % .
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.
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.
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.
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.
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.
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.
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.
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.
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 .
Alteramos o comando evento quando clicar em "ação" pelo quando eu começar como
clone .
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.
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.
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.
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.
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.
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.
CRIANDO O TIRO
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".
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.
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.
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.
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".
É 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 .
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
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".
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 .
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.
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.
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.
Para corrigir, é só colocar o valor de X como -150 do comando vá para x: ... 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 .
A velocidade do tiro está um pouco lenta, vamos alterar o tempo do comando deslize por ...
seg até x: ... y: ... para 0.5 segundos.
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".
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".
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".
Agora colocamos o bloco dentro do laço sempre para que sempre seja verificado.
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
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á.
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.
Já que no momento não faz sentido, podemos remover o próxima fantasia para refatorarmos o
script.
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 .
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.
E, dentro do se ... então , colocamos o comando de aparência mude para fantasia ... com
o valor "alien_01 (1)".
Podemos agora conectar todo o bloco se ... então após o comando próxima fantasia .
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)".
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.
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 .
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,
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.
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.
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 .
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 ... .
Um detalhe que podemos adicionar é um som para o laser. Selecionando a nave principal, podemos
ir em "Sons > Novo som > Escolher som da biblioteca".
ENERGIA E PONTOS
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".
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.
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.
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.
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.
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.
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.
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".
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:
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:
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.
O bloco restante tem a função de explodir a nave e encerrar o jogo. O comentário poderia ser:
No palco temos um bloco apenas que zera as variáveis e toca a música do jogo. Podemos comentar:
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.
Cria os inimigos.
O inimigo tem o bloco que faz o movimento de deslizar para a esquerda, comentamos:
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:
Detecta colisão.
Figura 9.18: comentário do bloco que anima a turbina e detecta colisão dos inimigos
Cria 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.
Efeito de pisca-pisca.
O bloco com a instrução de deslizar tem a função de fazer a energia navegar. Vamos comentar:
O bloco restante é onde detectamos a colisão da nave do jogador com a energia. Podemos comentar:
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.
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.
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".
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.
Agora no bloco anterior podemos puxar o comando tenta atirar e conectá-lo no se ...
então que verifica a tecla "Espaço".
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".
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 .
Quantas vezes o inimigo pode se autodestruir? Apenas uma, então não é necessário usar o laço
sempre , podemos removê-lo.
Podemos refatorar ainda mais os comandos do bloco destroi a si mesmo . Vamos criar um novo
Com o novo bloco, utilizamos o comando mostra a explosão visualmente após o comando
toque o som ... .
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.
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.
9.4 CONCLUSÃO 97