Apostila Alurastart Scratch

February 13, 2023 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download Apostila Alurastart Scratch...

Description

 

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

6.1 Detectando a colisão

55

55

 

Sumário

6.2 Variáveis 7 Adicionando um novo objetivo e reconhecendo antigos problemas

Caelum

60 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 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 ogo, 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  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  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 esquerdadireita, 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.

NAVE   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.



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  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   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 para x: -195 y: 0 após o mude o tamanho para 30% .

NAVE  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



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  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  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 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  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 .

GRÁFICOS  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 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 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.

GRÁFICOS   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  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.

JOGO   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  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 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  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   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 x: ... y: ...  vamos alterar o valor de Y para -55.

vá para

2.3 PLANETAS E PARALLAX PARALLAX  

23

 

Figura 2.17: bloco do segundo planeta

x:

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

por ... seg até

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   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 seg até x: ... e y: ... .

deslizar por ...

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.

PARALLAX   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  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.

PARALLAX   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).  (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 nave do jogador. Agora conectamos dentro do comando diga ... .

28 

2.4 DETECTANDO A COLISÃO COM O INIMIGO

... ?

colocando o valor como a

 

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 controle:

tocando em ... ?

que retorna true ou  false, como condição para o

INIMIGO   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 frase "Peguei você!" e o valor de 2 segundos.

diga ... por ... segundos

com a

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 a ba "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 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 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 EXPLOSÕES  

31

 

Agora vamos para "Scripts  > Som", pegamos o comando "explosion cydon" que baixamos, e conectamos dentro do bloco

toque o som ... se ... então

colocando o som

.

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   é um site onde podemos pegar sprites para usarmos de ogo. A primeira dica é o site Kenney . O Kenney  é 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.

EXPLOSÕES   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 repetido. uma tecla o valor é digitado, e só depois de um certo tempo que o valor começa a ser 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 clicar em "ação" .

34 

3 MELHORANDO A ANIMAÇÃO DA NAVE

quando

 

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  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  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  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  nada mais é do que uma plano cartesiano onde podemos ver o valor v alor 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  posição  po sição y no lugar.

deslize por ... seg até x: ... y: ...

colocando o

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   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. INIMIGOS   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  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.

FINAL   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   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  saiba a hora de agir. Falta implementarmos a reação de explosão da nave principal. O inimigo está usando o evento envie consegue receber a mensagem "gameover".

... a todos

, o que significa que a nave principal também

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. EXPLOSÃO   4.2 EXPLOSÃO

41

 

Podemos acessar o site Kenney  para  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 colocando a fantasia de número 0.

...

, podemos usar o comando

mude para a fantasia ...

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 seg com o valor de 0.1 segundos.

espere ...

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 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 executado por completo.

espere ... seg

antes do

pare ...

para que o som da explosão seja

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  CURSO 

45

 

CAPÍTULO 5

ENERGIA E CLONES

5.1 INTRODUÇÃO Você que fez o curso Scrach 1: Programando seu jogo 2D já 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 umcom objetivo bem de simples, que é fugir das naves Mas em diversos jogos temos mais de umpossui objetivo o intuito desafiar o jogador, e isso é oinimigas. 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  Lightning "".. 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  mude o tamanho para ... % com valor de 20%.

em "ação"

conectado ao comando de aparência

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  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  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  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 comando

mostre . Vale lembrar que vá para x: ... y: ... .

a energia só deve ser mostrada após voltar à posição inicial com o

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

 

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

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  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 com o valor de 0.15 após cada mudança de brilho.

espere ... seg

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 vezes com o valor de 10.

repita ...

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   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   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  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 evento quando clicar em "ação" .

crie clone de ...

a um

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  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, br ilhando, 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  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 para detectar colisões na nave do jogador. Pegamos o sensor com o valor "Lightning" e colocamos como condição do controle se ... então .

tocando em ...

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  ENERGIA  

55

 

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

Vamos testar colocando o comando de aparência ... então .

diga ...

com a frase "Encostei" dentro do

se

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  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 o valor "capturei a energia", e se esconder conectando ao esconda .

receber ...

também com

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  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  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  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 colocamos o bloco de verificação dentro.

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

sempre

e

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 som ... logo após o esconda .

toque o

6.1 DETECTANDO A COLISÃO  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  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  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   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  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   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 ogo. 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 aleatórios entre ... e ... colocando o valor minimo 2 e o maximo de 4.

Figura 7.2: numeros aletorios entre 2 e 4

números

7 ADICIONANDO UM NOVO OBJETIVO E RECONHECENDO ANTIGOS PROBLEMAS  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 que troca a fantasia do ator.

clicar em "ação"

por

quando eu começar como clone

do bloco

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 começar como clone do bloco de movimento.

quando clicar em "ação"

por

quando eu

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á  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  INIMIGOS 

65

 

Outra forma é manter os planetas como cópias, assim toda vez que alterarmos o script  em   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   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

 vamos colocar apenas no Y  o operador com o valor mínimo -180 e máximo de 180.

vá para x: ... y: ...

aleatório entre ... e ...

número

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 clone .

quando clicar em "ação"

pelo

quando eu começar como

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  aleatório entre ... e ... que está dentro do comando deslize por ... seg até x: ... para mínimo 20 e máximo 70.

número ... y:

7.2 CLONANDO INIMIGOS  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 sejam carregadas no inicio do jogo.

mude o tamanho para ... %

, para que as fantasias

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  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

o retângulo usare usar o mouse paradedesenhar no facilitar editor. Caso o desenho do laser zoom para fiqueCom grande demais, éselecionado, só apagar o basta desenho a opção 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   para garantir que ele realmente estará escondido. No script  do  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  TIRO 

71

 

movimentar a nave. No script  da   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   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  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

Figura 8.14: vá para x 150 y 0

vá para x: ... y: ...

.

8.1 CRIANDO O TIRO  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   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 seg até x: ... y: ...

deslize por ...

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 á existe o comando de movimento "nave_jogador".

vá para ...

que faz essa função, basta colocarmos o valor como

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  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  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 script .

próxima fantasia

para refatorarmos o

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  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 ... o valor "alien_01 (1)".

então

, colocamos o comando de aparência

mude para fantasia ...

com

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  próx ima 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  INIMIGO  

79

 

á 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 ... seg com valor de 0.1 segundos antes do comando próxima fantasia .

espere

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  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 toque o som ... com valor de "laser2" e conectamos após o comando que cria o clone do laser.

script  da   da nave, colocamos o comando

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  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 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 que 0. Colocaremos o se ... então sobre os comandos crie clone de ... e

energia toque o

for maior 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  ENERGIA 

85

 

Figura 9.6: variável pontos

Agora no script  do  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   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  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  valor "outros scripts do ator". A função deste bloco é destruir 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.

pare ...

com

9.2 TRABALHANDO COM COMENTÁRIOS  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  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  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 comentário. Sua função é fazer o laser navegar na tela. Vamos comentar:

como clone

necessita de

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 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 então que verifica a tecla "Espaço".

tenta atirar

e conectá-lo no

se ...

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 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  toque o som ... .

mostra a explosão visualmente

após o comando

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

Também podemos refatorar o script  que   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 v ez mais complexos, também extraímos funcionalidades em bblocos locos 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. Start é  é o caminho. Se tiver interesse em continuar aprendendo sobre o Scratch, a Alura Start

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF