construindo um jogo para a web flappybirddocente.ifsc.edu.br/vilson.junior/pi/05_construindo... ·...

94
Construindo um Jogo para a Web – Flappy Bird Programação para a Internet Prof. Vilson Heck Junior

Upload: others

Post on 22-Sep-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Construindo um Jogo para a Web – Flappy Bird

Programação para a InternetProf. Vilson Heck Junior

Page 2: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Tecnologias Necessárias

• Tecnologias já Estudadas:– HTML;

– CSS;

– JavaScript;

• Tecnologias Novas:– Computação Gráfica Básica;

– Noções de Geometria;

– Noções de Física;

– Reprodução de Sons;

– Enredo;

Page 3: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Computação Gráfica

• É um campo da Ciência da Computação que estuda métodos para sintetizar e manipular digitalmente conteúdo visual:– Geração de imagens 2D;

– Geração de imagens 3D (renderização);

– Com ou sem animação;

Page 4: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Noções de Geometria

• Gráficos 2D ou 3D são na verdade acomposição de pequenas peças geométricas:

• A relação espacial dada entre diferentesobjetos existentes em uma cena deve serrespeitada:

– Dois corpos não podem ocupar um mesmo lugar noespaço!

Page 5: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Noções de Física

• Objetos podem possuir algum tipo demovimento ou interação com outros objetos;

• Para isto, geralmente respeitam alguma(s)regras físicas:

– Próximas a real: Simulação;

– Diferenciadas: Arcade;

Page 6: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Reprodução de Sons

• O som é o elemento responsável porestimular o sentido da audição;

• Não tanto quanto os gráficos, mas os sonssão responsáveis por completar uma boasensação de imersão em jogos eentretenimento;

• Geralmente os sons (músicas ou barulhos)serão escolhidos conforme umdeterminado contexto ou acontecimento.

Page 7: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Enredo

• O enredo irá explicar ao usuário o quedeverá ser feito e deve ser o principalresponsável por atrair a atenção dojogador:

– História;

– Diversão;

– Desafios;

– Passatempo;

– ...

Page 8: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Enredo• Flappy Bird:

– Lançado em 2013;

– Plataforma: Móvel;

– Desenvolvido por Nguyễn Hà Đông (Vetinamita);

– Publicado pela .GEARS studios;

– Foi programado em 3 dias;

– Chegou a faturar $50.000,00 por dia;

Page 9: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Enredo

• Flappy Bird:– Jogo de rolagem horizontal;

– Pássaro avança ao longo do cenário;

– Desviar canos;

– Sem bater no chão ou teto.

Page 10: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

No

sso

Co

nce

ito

Page 11: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

LISTA DE RECURSOS INICIAISFlappy Bird

Page 12: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Recursos Iniciais

• Pasta: “FlappyBird”:– index.html

• Construiremos de um documento web, inserindo todos os demais elementos necessários;

– css/estilo.css• Definiremos algumas configurações de cores, bordas e outros

para nossa interface;

– js/ Flappy.js, Jogador.js, Obstaculo.js, TipoObstaculo.js, Geometria.js• Faremos todo o processamento e configurações do jogo, dando

ações aos acontecimentos e eventos do jogo.

– subpastas: img e snd• Armazenaremos os arquivos responsáveis pelas imagens e sons

do jogo.

Page 13: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

index.html

• Crie o arquivo como doctype para html 5;

• Crie as tags para:

– <html>, <head>, <body>, <title> e <meta>;

• Estipule um <link> com arquivo de estilo (css/estilo.css);

• Adicione os arquivos de <script> ao fim do <body>:

– js/Geometria.js

– js/TipoObstaculo.js

– js/Obstaculo.js

– js/Jogador.js

– js/Flappy.js

– Importante: adicionar os outros arquivos js na ordem informada, pois os últimos podem precisar dos primeiros já executados.

Page 14: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

index.html

• Adicione as seguintes Tags com seus atributos dentro do <body>:

– <canvas>Navegador não suportado!</canvas>

• id = “tela” width=600 height=400

– <button>Iniciar</button>

• onclick=“Flappy.pausar();” id=“btnIniciar”

– <button>Novo Jogo</button>

• onclick=“Flappy.novoJogo();”

– <p id="tecla"></p>

– <p>A: Bater asas</p>

Page 15: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

estilo.css (1/2)

body {

background-color: #111611;

text-align: center;

color: white;

}

#tela {

background: linear-gradient(#A7EEFF, #63a6d0);

border-bottom: 10px solid #526F35;

border-top: 10px solid #B6B6B4;

}

Page 16: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

estilo.css (2/2)button { background-color: #eb6262;

color: white;

border: 2px solid #af0303;

width: 100px;

height: 30px;

font-weight: bold;

cursor: pointer;

margin: 2px; }

button:hover { background-color: #f57b7b; }

button:disabled { background-color: #b49191;

border-color: #332f2f;

color: gray;

cursor: not-allowed; }

Page 17: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

DESENHANDO NO CANVASFlappy Bird

Page 18: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

<canvas>

• Canvas é um termo inglês dado a alguns tipos de telapara pintura;

• No nosso caso, será uma área dentro do documentoHTML onde poderemos pintar o que precisarmos;

• Nosso pincel e paleta de cores estão disponíveisatravés de código JavaScript.

Page 19: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

<canvas>

• O Canvas é feito para oferecer suporte arápido desenho de cenas bidimensionaisou tridimensionais:

– Geralmente acelerado por Hardware;

0 X width

0 y h

eigh

t

Page 20: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Flappy.js

//Um pequeno teste (remover depois de testar)

//Recuperando referência dos objetos no documento

var canvas = document.getElementById("tela");

var ctx = canvas.getContext("2d");

ctx.fillStyle = "#FF0000"; //Usar cor vermelha

ctx.fillRect(20, 30, 50, 100); //x=20, y=30, w=50 e h=100

Page 21: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Desenhando

• Temos uma tela para desenho;

• Conhecemos uma primeira ferramenta parapintar algo;

• Temos que utilizar esta ferramenta de forma aconstruir o cenário inicial do nosso jogo;

Page 22: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Relembrando

Page 23: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;
Page 24: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;
Page 25: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;
Page 26: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Dimensões

• Cada elemento do jogo terá uma dimensão.Círculos serão determinados por um raio eretângulos por uma largura e altura.

Largura

Page 27: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Rotação

• Cada elemento do jogo poderá ser girado. Istoimplica em girar a tela para desenhar eprocessar corretamente as colisões.

Angulo

Page 28: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Dimensões

• Além de tudo, sempre poderemos processar edesenhar somente aquilo que está envolvido com atela.

tela.height

tela.width

Page 29: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

O OBJETO FLAPPYFlappy Bird

Page 30: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Objeto Flappy

• Nosso projeto será, em maior parte,Orientado a Objetos;

• O objeto central será chamado de Flappye terá por responsabilidade gerenciartodos os demais objetos;

• O objeto Flappy também seráresponsável por obter as referências dosobjetos DOM, tal como o Canvas.

Page 31: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Flappy.js

function Flappy(canvasStr) {

this.canvas = document.getElementById(canvasStr);

this.ctx = this.canvas.getContext("2d");

this.larTela = this.canvas.width;

this.altTela = this.canvas.height;

this.tempo = null;

}

Page 32: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

O JOGADORFlappy Bird

Page 33: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Objeto Jogador

• Construiremos um objeto para representarabstratamente o jogador;

• No nosso caso, este objeto será o pássaro do jogoe deverá estar em alguma posição do cenário;

• O jogador é quem recebera os comandosexecutados pelo usuário e processará as ações.

Page 34: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Jogador.jsfunction Jogador(flappy) {

this.flappy = flappy;

this.altura = 15; //Raio

this.angulo = 0;

this.x = (flappy.larTela / 8) + this.altura / 2;

this.y = (flappy.altTela / 2) + this.altura / 2;

this.desenhar = function() {

var ctx = this.flappy.ctx;

ctx.save();

ctx.translate(this.x, this.y);

ctx.beginPath();

ctx.arc(0, 0, this.altura, Math.PI * 0.25, Math.PI * 1.75);

ctx.stroke();

ctx.fill();

ctx.restore();

};

}

Page 35: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Flappy.jsfunction Flappy(canvasStr) {

this.jogador = new Jogador(this);

this.desenharTudo = function() {

this.ctx.clearRect(0,0,this.larTela, this.altTela);

this.jogador.desenhar();

};

} //FIM FUNCTION FLAPPY

var jogo = null;

Flappy.novoJogo = function () {

Flappy.intervalo = 25;

jogo = new Flappy("tela");

jogo.desenharTudo();

document.getElementById("btnIniciar").innerHTML = "Iniciar";

document.getElementById("btnIniciar").disabled = false;

}

Flappy.novoJogo(); Testar!

Page 36: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

O OBSTÁCULOFlappy Bird

Page 37: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Objeto Obstaculo

• Cada obstáculo existente que o jogador devesuperar serão representados por um objetochamado Obstaculo.

• Estes objetos serão responsáveis por identificar otipo de obstáculo, bem como o seuposicionamento.

Page 38: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Obstaculo.jsfunction Obstaculo(flappy) {

this.flappy = flappy;

this.tipo = new TipoObstaculo();

if (Obstaculo.todos.length == 0) {

this.x = flappy.larTela * 0.666;

} else {

this.x = flappy.larTela * 1.3;

}

Obstaculo.todos.push(this);

}

Obstaculo.todos = [];

Page 39: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Objeto TipoObstaculo

• Um conjunto diferente de formas, tamanhos etexturas devem definir as possibilidades derepresentação dos objetos Obstaculo.

• Este objeto TipoObstaculo será responsável pordefinir estes modelos possíveis para osObstáculos.

Page 40: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/TipoObstaculo.jsfunction TipoObstaculo() {

var sorteio = Math.floor(Math.random() * TipoObstaculo.todos.length);

var modelo = TipoObstaculo.todos[sorteio];

this.moveY = modelo.moveY;

this.passagem = modelo.passagem;

this.altura = modelo.altura;

this.largura = modelo.largura;

this.angulo = modelo.angulo;

this.corPreenchimento = modelo.corPreenchimento;

this.corContorno = modelo.corContorno;

this.imagem = modelo.imagem;

}

Page 41: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/TipoObstaculo.jsTipoObstaculo.todos = [//Inicio do vetor

{

moveY : -0.25,

passagem : 150,

altura : 200,

largura : 100,

angulo : Math.PI / 90,

imagem : new Image()

}, //Fim elemento 0

{

moveY : 0.5,

passagem : 120,

altura : 150,

largura : 60,

angulo : Math.PI / -40,

imagem : new Image()

}, //Fim elemento 1

Page 42: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/TipoObstaculo.js{

moveY : 0.5,

passagem : 120,

altura : 250,

largura : 60,

angulo : Math.PI / 40,

imagem : new Image()

}, //Fim elemento 2

{

moveY : 0,

passagem : 120,

altura : 100,

largura : 40,

angulo : 0,

imagem : new Image()

} //Fim elemento 3 (último)

]; //Fim do vetor

Page 43: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/TipoObstaculo.js

TipoObstaculo.todos[0].imagem.src = "img/bricks0.jpg";

TipoObstaculo.todos[1].imagem.src = "img/bricks1.jpg";

TipoObstaculo.todos[2].imagem.src = "img/bricks2.jpg";

TipoObstaculo.todos[3].imagem.src = "img/bricks3.jpg";

Baixar as imagens da pagina da disciplina para a subpasta img

Page 44: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Obstaculo.jsthis.desenhar = function () {

flappy.ctx.save();

flappy.ctx.lineWidth = 4;

flappy.ctx.translate(this.x + (this.tipo.largura / 2), flappy.altTela / 2);

flappy.ctx.rotate(this.tipo.angulo);

var p1 = -((flappy.altTela / 2) - this.tipo.altura);

var p2 = p1 + this.tipo.passagem;

flappy.ctx.drawImage(this.tipo.imagem, 0,0,this.tipo.largura, flappy.altTela, this.tipo.largura / -2, p1, this.tipo.largura, -flappy.altTela);

flappy.ctx.drawImage(this.tipo.imagem, 0,0,this.tipo.largura, flappy.altTela, this.tipo.largura / -2, p2, this.tipo.largura, flappy.altTela);

flappy.ctx.restore();

};

Page 45: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Obstaculo.js

Obstaculo.desenharTodos = function () {

for(var i = 0; i < Obstaculo.todos.length; i++) {

Obstaculo.todos[i].desenhar();

}

};

Page 46: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Flappy.jsfunction Flappy(canvasStr) {

this.jogador = new Jogador(this);

new Obstaculo(this);

this.desenharTudo = function() {

this.ctx.clearRect(0,0,this.larTela, this.altTela);

this.jogador.desenhar();

Obstaculo.desenharTodos();

};

} //FIM FUNCTION FLAPPY

Testar!

Page 47: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Flappy.js

Flappy.desenharTudo = function() {

jogo.desenharTudo();

}

for (var ia = 0; ia < TipoObstaculo.todos.length; ia++) {

TipoObstaculo.todos[ia].imagem.onload = Flappy.desenharTudo;

}

Testar novamente!

Page 48: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Jogador.jsthis.desenhar = function() {

var ctx = this.flappy.ctx;

ctx.save();

ctx.translate(this.x, this.y);

ctx.rotate(this.angulo);

ctx.drawImage(Jogador.imagem, -this.altura, -this.altura, this.altura * 2, this.altura * 2);

ctx.beginPath();

ctx.arc(0, 0, this.altura, Math.PI * 0.25, Math.PI * 1.75);

ctx.stroke();

ctx.fill();

ctx.restore();

};

Jogador.imagem = new Image();

Jogador.imagem.src = "img/bird.png";

Apagar!

Incluir!

Baixar eIncluir!

Testar!

Page 49: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

COLOCANDO VIDAFlappy Bird

Page 50: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

O que precisamos?

• Fazer o “jogador se movimentar” ao iniciar e pressionar tecla?

• Inserir e fazer os obstáculos se movimentarem:

– Com qual intervalo de tempo?

– Para qual direção?

• O que acontece se o jogador colidir contra um obstáculo?

• O que ocorre quando o jogador “bate as asas”?

• O que acontece se o jogador colidir com o teto ou com o chão?

Page 51: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Movimentação do Jogo

• O Jogador irá se movimentar continuamentepara “frente” e irá responder conforme a teclaque o usuário pressionar:

– A: bater asas.

– Outras teclas podem ser configuradas;

Page 52: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

INTERAGINDO COM O USUÁRIOFlappy Bird

Page 53: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Eventos!

• A interação é dada por uma troca entre amáquina e o usuário;

• A máquina fornece principalmente imagensque descrevem uma situação, onde pode sernecessária a intervenção do usuário;

• O usuário irá intervir basicamente através decomandos!

– Comandos são captados através de eventos.

Page 54: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Eventos!

• Nosso document possui propriedades deeventos que podem ser associadas àfunções quaisquer;

• Estas funções determinam algo a serfeito quando aquele evento ocorrer:

– document.onkeydown

• Ao descer uma tecla qualquer;

– document.onkeyup

• Ao soltar uma tecla qualquer;

Page 55: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

document.onkeyup = function (evt) {

document.getElementById("tecla").innerHTML = evt.keyCode;

}

js/Flappy.js

Teste!

Page 56: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Flappy.js

Apagar o <p id=“tecla”>

do HTML

document.onkeyup = function (evt) {

jogo.pressionarTecla(evt);

}

Page 57: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Flappy.js

this.pressionarTecla = function (evt) {

if (evt.keyCode == 65) {

this.jogador.baterAsas();

//this.desenharTudo();

}

};

Page 58: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Jogador.js

this.baterAsas = function (){

this.angulo -= Math.PI / 3;

this.y -= 8;

if (this.angulo < -Math.PI / 4) {

this.angulo = -Math.PI / 4;

}

};

Testar!

Page 59: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

CONTROLE GLOBAL DO MOVIMENTO

Flappy Bird

Page 60: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Movendo com Tempo

• Todo tipo de movimento tem uma velocidade;

• Como determinamos a velocidade de algumobjeto?

– Medida Espacial / Tempo!• KM/h

• m/s

• ...

Page 61: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Controlando o Tempo

• Como já definimos, a unidade de espaço de cadamovimento do cenário e dos inimigos será por umadistância pré-determinada;

• Agora precisamos determinar o intervalo de tempo quenosso jogo irá usar para fazer cada movimento doselementos;

• Como nosso jogo gira em torno do “avanço” do jogador estetempo será um guia para todo o jogo.

Page 62: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Flappy.js

Flappy.novoJogo = function () {

Flappy.intervalo = 25; //Conforme já definido anteriormente

jogo = new Flappy("tela");

jogo.desenharTudo();

document.getElementById("btnIniciar").innerHTML = "Iniciar";

document.getElementById("btnIniciar").disabled = false;

}

Page 63: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Controlando o Tempo

• Exemplo de função JavaScript:

– relogio = setInterval(“NomeFuncao()”, intervalo);• relogio é uma referência ao timer/clock que foi criado;

• NomeFuncao() é a função que será executada a cadaintervalo;

• intervalo é um número inteiro representando aquantidade em milissegundos de intervalo entre umaexecução e outra da função NomeFuncao().

– clearInterval(relogio);• Para o relógio de repetição;

Page 64: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Flappy.js

function Flappy(canvasStr) {

...

this.tempo = null; //Conforme já definido anteriormente

...

}

Page 65: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Flappy.js

this.pausar = function () {

if (this.tempo == null) {

this.tempo = setInterval(Flappy.atualizar, Flappy.intervalo);

document.getElementById("btnIniciar").innerHTML = "Pausar";

} else {

clearInterval(this.tempo);

this.tempo = null;

document.getElementById("btnIniciar").innerHTML = "Continuar";

}

};

Page 66: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Flappy.jsFlappy.novoJogo = function () {

if (jogo != null) {

if (jogo.tempo != null) {

jogo.pausar();

}

Obstaculo.todos = [];

}

Flappy.intervalo = 25;

...

}

Flappy.pausar = function() {

jogo.pausar();

}

Flappy.atualizar = function() {

jogo.atualizar();

}

Page 67: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Flappy.js

this.atualizar = function () {

//Mover obstáculos

Obstaculo.moverTodos(this.jogador.mover(5));

//Desenhar tudo

this.desenharTudo();

//Verificar colisões com obstáculos

//Verificar colisão com teto e chão

};

Page 68: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Obstaculo.js

Obstaculo.moverTodos = function (dist) {

var ultimo = Obstaculo.todos.length - 1;

for(var i = ultimo; i >= 0; i--) {

var obAtual = Obstaculo.todos[i];

obAtual.x -= dist;

}

};

Page 69: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Jogador.js

this.mover = function (dist){

var varX = dist * Math.cos(this.angulo);

this.y += dist * Math.sin(this.angulo);

this.angulo += Math.PI / 60;

if (this.angulo > Math.PI / 2.8) {

this.angulo = Math.PI / 2.8;

}

return varX;

};

Testar!

Page 70: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

MOVIMENTAÇÃO DOS OBSTÁCULOS

Flappy Bird

Page 71: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Movimentação dos Obstáculos

• Os obstáculos terão sua base de movimento conformeo método iniciado anteriormente;

• Agora, ao movimentar todos os obstáculos, precisamosir criando novos objetos à medida que obstáculosultrapassados sejam descartados:

– Para detectar se um obstáculo foi completamente superado,precisaremos detectar seus principais pontos em relação àtela;

• Para adicionar um maior desafio ao jogador, também éproposta a movimentação vertical dos obstáculos;

Page 72: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Superior

Inferior

Sup[0]

Sup[1] Sup[2]

Sup[3]

Inf[0]

Inf[1] Inf[2]

Inf[3]

Cada ponto tem as coordenadas X e Y.

Exemplo: Inf[1][0] é XInf[1][1] é Y

Page 73: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Obstaculo.js (1/3)

this.getPontosSuperior = function () {

var pontos = []; //Vetor de retorno dos pontosvar meioLarg = this.tipo.largura / 2;var meioAlTel = flappy.altTela / 2;var senAng = Math.sin(this.tipo.angulo);var cosAng = Math.cos(this.tipo.angulo);

//X1Y1 - 0px = -meioLarg;py = -(meioAlTel - this.tipo.altura) - flappy.altTela;xy = [];xy[0] = this.x + meioLarg + px * cosAng - py * senAng;xy[1] = meioAlTel + px * senAng + py * cosAng;pontos.push(xy);

Page 74: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Obstaculo.js (2/3)

//X1Y2 - 1px = -meioLarg;py = -(meioAlTel - this.tipo.altura);xy = [];xy[0] = this.x + meioLarg + px * cosAng - py * senAng;xy[1] = meioAlTel + px * senAng + py * cosAng;pontos.push(xy);

//X2Y2 - 2px = meioLarg;py = -(meioAlTel - this.tipo.altura);xy = [];xy[0] = this.x + meioLarg + px * cosAng - py * senAng;xy[1] = meioAlTel + px * senAng + py * cosAng;pontos.push(xy);

Page 75: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Obstaculo.js (3/3)

//X2Y1 - 3px = meioLarg;py = -(meioAlTel - this.tipo.altura) - flappy.altTela;xy = [];xy[0] = this.x + meioLarg + px * cosAng - py * senAng;xy[1] = meioAlTel + px * senAng + py * cosAng;pontos.push(xy);

return pontos;};

Page 76: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Obstaculo.js (1/3)

this.getPontosInferior = function () {

var pontos = []; //Vetor de retorno dos pontosvar meioLarg = this.tipo.largura / 2;var meioAlTel = flappy.altTela / 2;var senAng = Math.sin(this.tipo.angulo);var cosAng = Math.cos(this.tipo.angulo);

//X1Y4 - 0px = -meioLarg;py = -(meioAlTel - this.tipo.altura) + this.tipo.passagem +

flappy.altTela;xy = [];xy[0] = this.x + meioLarg + px * cosAng - py * senAng;xy[1] = meioAlTel + px * senAng + py * cosAng;pontos.push(xy);

Page 77: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Obstaculo.js (2/3)

//X1Y3 - 1px = -meioLarg;py = -(meioAlTel - this.tipo.altura) + this.tipo.passagem;xy = [];xy[0] = this.x + meioLarg + px * cosAng - py * senAng;xy[1] = meioAlTel + px * senAng + py * cosAng;pontos.push(xy);

//X2Y3 - 2px = meioLarg;py = -(meioAlTel - this.tipo.altura) + this.tipo.passagem;xy = [];xy[0] = this.x + meioLarg + px * cosAng - py * senAng;xy[1] = meioAlTel + px * senAng + py * cosAng;pontos.push(xy);

Page 78: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Obstaculo.js (3/3)

//X2Y4 - 3px = meioLarg;py = -(meioAlTel - this.tipo.altura) + this.tipo.passagem +

flappy.altTela;xy = [];xy[0] = this.x + meioLarg + px * cosAng - py * senAng;xy[1] = meioAlTel + px * senAng + py * cosAng;pontos.push(xy);

return pontos;};

Page 79: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Obstaculo.jsObstaculo.moverTodos = function (dist) {

var ultimo = Obstaculo.todos.length - 1;for(var i = ultimo; i >= 0; i--) {

var obAtual = Obstaculo.todos[i];obAtual.x -= dist;if (i != ultimo && i != 0) {

continue;}pontosSup = obAtual.getPontosSuperior();pontosInf = obAtual.getPontosInferior();var maiorX = Math.max(pontosSup[2][0], pontosSup[3][0],

pontosInf[2][0], pontosInf[3][0]);if (ultimo == i && maiorX < jogo.larTela) {

new Obstaculo(jogo);}if (maiorX < 0) {

Obstaculo.todos.splice(i,1);}

} //Fim do for}; //Fim método

Testar!

Page 80: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Movimentação dos Obstáculos

• Para implementar a movimentação vertical,precisaremos levar em consideração ainformação armazenada em:

– tipo. moveY e

– tipo.angulo

Page 81: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Obstaculo.jsObstaculo.moverTodos = function (dist) {

var ultimo = Obstaculo.todos.length - 1;for(var i = ultimo; i >= 0; i--) {

var obAtual = Obstaculo.todos[i];obAtual.x -= dist;obAtual.tipo.altura += obAtual.tipo.moveY;if (obAtual.tipo.altura < 0) {

obAtual.tipo.altura = 0;obAtual.tipo.moveY *= -1;

}if (obAtual.tipo.altura + obAtual.tipo.passagem >=

jogo.canvas.height) {

obAtual.tipo.altura = (jogo.canvas.height - 1) –obAtual.tipo.passagem;

obAtual.tipo.moveY *= -1;}if (i != ultimo && i != 0) {

continue;... Testar!

Page 82: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Alterações Restantes

• O que falta alterar?

– Quando colide:• Chão?

• Teto?

• Obstáculo?

– Fim de jogo?

– Sons?

Page 83: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Flappy.jsthis.verificaColisao = function (px, py, raio, pts) {

if (this.linhaColide(px, py, raio, pts[0], pts[1]) ||

this.linhaColide(px, py, raio, pts[1], pts[2]) ||

this.linhaColide(px, py, raio, pts[2], pts[3])) {

this.ctx.strokeStyle = "#FF0000";

this.ctx.beginPath();

for (var a = 0; a <= 2; a++) {

this.ctx.moveTo(pts[a][0], pts[a][1]);

this.ctx.lineTo(pts[a+1][0], pts[a+1][1]);

}

this.ctx.stroke();

return true;

}

return false;

};

Desenhar borda do retângulo onde ocorreu

colisão

Page 84: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Flappy.js

this.linhaColide = function (cx, cy, raio, A, B) {

var dist = distToSegment([cx, cy],A,B);

if (dist <= raio) {

return true;

} else {

return false;

}

};

Page 85: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Geometria.jsfunction sqr(x) { return x * x; }

function dist2(v, w) { return sqr(v[0] - w[0]) + sqr(v[1] - w[1]); }

function distToSegmentSquared(p, v, w) {

var l2 = dist2(v, w);

if (l2 == 0) return dist2(p, v);

var t = ((p[0] - v[0]) * (w[0] - v[0]) + (p[1] - v[1]) *

(w[1] - v[1])) / l2;

t = Math.max(0, Math.min(1, t));

return dist2(p, [ v[0] + t * (w[0] - v[0]),

v[1] + t * (w[1] - v[1]) ] );

}

function distToSegment(p, v, w) {

return Math.sqrt(distToSegmentSquared(p, v, w));

}

http://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-a-line-segment

Page 86: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Flappy.js (1/2)this.atualizar = function () {

//Mover obstáculos

Obstaculo.moverTodos(this.jogador.mover(5));

//Desenhar tudo

this.desenharTudo();

//Verificar colisões com obstáculos

var jog = this.jogador;

for (var i = 0; i < Obstaculo.todos.length; i++) {

var ptsInf = Obstaculo.todos[i].getPontosInferior();

var ptsSup = Obstaculo.todos[i].getPontosSuperior();

if (this.verificaColisao(jog.x, jog.y, jog.altura, ptsSup) ||

this.verificaColisao(jog.x, jog.y, jog.altura, ptsInf)) {

this.gameOver();

}

}

//Verificar colisão com teto e chão

}; //Fim do método

Page 87: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Flappy.js (2/2)this.atualizar = function () {

//Mover obstáculos

//Desenhar tudo

...

//Verificar colisões com obstáculos

...

//Verificar colisão com teto e chão

if (jog.y - jog.altura <= 0 ||

jog.y + jog.altura >= this.altTela) {

this.gameOver();

}

}; //Fim do método

Page 88: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Flappy.jsthis.gameOver = function() {

if (this.tempo != null) {

this.pausar();

console.log("Game Over");

document.getElementById("btnIniciar").disabled = true;

}

};

Testar!

Page 89: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

ESTÍMULOS SONOROSFlappy Bird

Page 90: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

Estímulos Sonoros

• Conforme comentado anteriormente, quanto maisestimularmos, de forma positiva, os sentidos dosjogadores, maior a probabilidade dele se sentircomo parte do jogo;

• Para isto, iremos adicionar alguns pequenos sonsassociados a eventos como colisões;

• Baixe os arquivos e salve na subpasta snd:– asa.mp_ e asa.ogg

– batida.mp_ e batida.ogg

– ponto.mp_ e ponto.ogg

Page 91: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

<audio> e <source>

• HTML 5!

• MIME Types:

– MP3 – audio/mpeg

– Ogg – audio/ogg

– Wav – audio/wav

• Suporte:

– Ps.: Múltiplos <source> fornecem redundância!

• Suporte dos diferentes navegadores

Page 92: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

index.html

...

<audio controls id="sndAsa">

<source src="snd/asa.mp_" type="audio/mpeg">

<source src="snd/asa.ogg" type="audio/ogg">

</audio>

<audio controls id="sndBatida">

<source src="snd/batida.mp_" type="audio/mpeg">

<source src="snd/batida.ogg" type="audio/ogg">

</audio>

<audio controls id="sndPonto">

<source src="snd/ponto.mp_" type="audio/mpeg">

<source src="snd/ponto.ogg" type="audio/ogg">

</audio>

<script ...></script>

Page 93: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

js/Jogador.jsthis.baterAsas = function (){

this.angulo -= Math.PI / 3;

this.y -= 8;

if (this.angulo < -Math.PI / 4) {

this.angulo = -Math.PI / 4;

}

Jogador.somAsa.cloneNode(true).play();

}; //Fim do método

//Incluir no fim do arquivo

Jogador.somAsa = document.getElementById("sndAsa");

Jogador.somPonto = document.getElementById("sndPonto");

Jogador.somBatida = document.getElementById("sndBatida");

Testar!

Page 94: Construindo um Jogo para a Web FlappyBirddocente.ifsc.edu.br/vilson.junior/pi/05_Construindo... · 2016. 6. 2. · •O som é o elemento responsável por estimular o sentido da audição;

1

1

1

1

1

1

4

Trabalho1. Customize cores e outras configurações do arquivo de estilo;

2. Customize cores, tamanhos e disposição dos objetos do jogo (dentro doJavascript). Utilize gradientes e/ou imagens;

3. Complete o HTML informando o nome da disciplina, o nome doinstituto e o seu nome, dispondo os elementos com layouts CSS;

4. Crie um placar com pontuação;

5. Crie uma indicação visual dentro do Canvas de fim de jogo;

6. Adicione os novos sons a eventos diferentes no jogo;

7. Adicione teclas de atalho para “Pausa” e para “Novo Jogo”;

8. Corrija o bug: se o jogo não estiver executando e tela a “A” forpressionada o jogador “bate asas”;

9. Ao evoluir no jogo, crie novos desafios para o jogador;

– Adicione outros elementos a seu critério:

– Exemplos: novos tipos de obstáculos; “presentes” aleatórios quejogador deve capturar; tecla com movimento especial (limitadasvezes); outros pássaros inimigos aleatórios; use sua criatividade.

10. Entregue os arquivos por e-mail ao Professor junto com umadescrição/resposta para cada item do trabalho.