Apostila Alurastart Scratch
February 13, 2023 | Author: Anonymous | Category: N/A
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.
6
1.2 MINHA PRÓPRIA NAVE
Figura 1.13: quando a tecla seta para baixo for pressionada e quando a tecla seta para cima for pressionada
Para o movimento da nave ficar mais natural, os valores adicionados no eixo Y devem ter a mesma proporção do eixo X. Por exemplo, se o valor de movimento para cima é 10, então para baixo deve ter -10.
Definindo posição inicial Outro problema que precisamos resolver é a posição inicial da nossa nave quando o jogo começa. A tela onde fica nosso palco trabalha com coordenadas. O centro da tela possui valor 0 no eixo Y e 0 no valor eixo X. Se você acessar as informações do nosso ator, poderá ver a posição em que ele se encontra no momento por meio dos valores contidos em X e 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
vá
7
Figura 1.15: código com o comando vá para x -195 y 0
Vimos como criar o nosso ator, e com ele, rotacionar, movimentar, posicionar, falar mensagens e reagir às nossas teclas. Vimos também como criar o nosso palco e definir o pano de fundo.
1.3 CRIANDO UM INIMIGO Continuando o nosso jogo, criaremos um inimigo, que é um novo ator. Então vamos em "Escolher ator da biblioteca > Tema > Espaço" e vamos escolher uma outra Spaceship. Ajustamos o tamanho do inimigo para 30% da mesma forma que fizemos com o nosso outro ator, utilizando o comando mude o tamanho para ... % com o valor de 30% e conectando ao evento quando clicar em "ação" .
Figura 1.16: mude o tamanho para 30%
Caso queira executar apenas o bloco de instruções para ajustar o tamanho do ator inimigo, você pode dar dois cliques com o mouse em cima do primeiro comando do bloco ao invés de apertar o botão de ação que executa todos os blocos. Também funciona caso queira executar um comando isolado. Nosso inimigo esta apontado para cima e queremos ele apontado para a esquerda, vamos fazer o mesmo procedimento da nave anterior, e colocar a nave com 0° (graus)
Figura 1.17: nave ajustada em 0 graus
8
1.3 CRIANDO UM INIMIGO
O nosso inimigo está com as mesmas cores de nossa nave. Vamos alterar a cor em "Scripts > Aparência" utilizando o comando mude o efeito ... para ... utilizando o efeito cor e o valor 15. O valor pode ser alterado para alguma cor de sua prefêrencia.
Figura 1.18: mude o efeito cor para 15
Agora, vamos posicionar o nosso inimigo no centro do canto direito, para que toda vez que apertarmos "ação" ele retorne à posição inicial. Em "Scripts > Movimento" usamos o comando já conhecido vá para x: ... y: ... .
Figura 1.19: vá para x 205 y 0
O comando já vem preenchido com a posição atual do inimigo, em nosso caso vamos colocar o valor de X como 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.
vá
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