Computação II Orientação a Objetos

Documentos relacionados
Computação II (MAB 225)

Computação II Orientação a Objetos

Computação II Orientação a Objetos

Introdução à Programação C

Computação II Orientação a Objetos

Computação II Orientação a Objetos

Computação II (MAB 225)

Computação II Orientação a Objetos

Introdução à Programação C

Computação II Orientação a Objetos

Computação II (MAB 225)

Introdução à Programação C

Introdução à Programação C

Computação II (MAB 225)

Computação II Orientação a Objetos

Computação II Orientação a Objetos

Computação II Orientação a Objetos

Computação II Orientação a Objetos

LISTA DE ATIVIDADES Semestre Letivo 2018/1

Computação II Orientação a Objetos

Computação II Orientação a Objetos

LISTA DE ATIVIDADES Semestre Letivo 2018/1

PROGRAMAÇÃO PARA INTERNET RICA INTRODUÇÃO AO ACTIONSCRIPT 3. Prof. Dr. Daniel Caetano

Exercícios sobre repetição. 1. Escreva um método que lê via teclado 8 números e retorna a quantidade de negativos.

Introdução à Programação C

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

PROGRAMAÇÃO PARA INTERNET RICA INTRODUÇÃO AO ACTIONSCRIPT 3. Prof. Dr. Daniel Caetano

Conceitos Básicos da Programação OO

Computação II Orientação a Objetos

Programação Gráfica Parte 3 Versão em Java 2006 PUCPR Tutoria de Jogos 1º Ano

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Modificadores de Acesso e Atributos de Classe

Ambiente de programação

Computação II Orientação a Objetos

Criando um Joguinho 2D. Prof. Fellipe Aleixo

Pilotagem Squeak no computador Magalhães. Projecto: Geometria Básica

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Implementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Linguagens de Programação Departamento de Engenharia Eletrônica e de Computação - DEL-Poli/UFRJ Prof.: Miguel Elias Mitre Campista

SCC0504 Programação Orientada a Objetos Prof. Luiz Eduardo Virgilio da Silva / Estevam Arantes (Monitor) Projeto

1. Crie um novo projeto Scratch. Apague o gato clicando com o botão direito e em apagar.

Computação II Orientação a Objetos

Programação Orientada a Objetos em Java

CRIANDO JOGOS EM FLASH

Computação II (MAB 225)

Departamento de Informática PUC-Rio INF Estruturas de Dados Lista 2 Completa (Gerada em 8 de maio de 2006)

MC-102 Aula 05 Comandos Condicionais

Processamento Digital de Imagens

Invasores Documentation

Introdução ao HTML5 Canvas

Escrito por Maicris Fernandes Qua, 11 de Dezembro de :15 - Última atualização Qua, 11 de Dezembro de :20

Processamento Digital de Imagens

Linguagens de Programação

OO Orientação a Objetos

Controlando Erros com Exceções

Árvores. A Profundidade da Árvore B C D E. Árvores Implementação Genérica

Programação Orientada a Objetos

Prof. Jesus José de Oliveira Neto

Estruturas. Programação I Cap. 4 - Estruturas. Exemplos de estruturas. Estruturas em Java. Tipos x instâncias. Criando instâncias de estruturas

PUC-Rio Desafio em Matemática 15 de outubro de 2009

Programação Estruturada

LISTA DE EXERCÍCIO 7 Interfaces

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Linguagens de Domínio Específico

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Tema da aula Introdução ao paradigma de programação: Orientado a Objetos

Análise e Projeto Orientados a Objetos

Fundamentos Básicos da linguagem Java (Programação Orientada a Objetos) Prof. Responsáveis Wagner Santos C. de Jesus

Curso: Desenvolvendo Jogos 2d Com C# E Microsoft XNA. Fazer desaparecer da tela do jogo a espaçonave inimiga quando um tiro acertá-la.

Classes e Objetos POO

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Tipos Algébricos. Programação Funcional. Capítulo 11. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 29 de agosto de 2008

Introdução a Programação de Jogos

Computação II (MAB 225)

1 Para expressar um ponto intermediário em função dos pontos extremos, precisamos

Compiladores Ambiente de Execução

Estácio-FIC Graduação em Redes de Computadores

Lógica de Jogos. Conteúdo

3. Animação com a metodologia clássica de programação.

APÊNDICE D O Projeto do javaplay

QUESTÃO DE FORÇA ELÉTRICA EM CARGAS POSICIONADAS NOS VÉRTICES DE TRIÂNGULO EQUILÁTERO RESOLVIDA PELO PROF. PAULO CANAL ILHA FÍSICA ENUNCIADO

Computação II Orientação a Objetos

INF1404 MODELAGEM DE SISTEMAS

Problema do Caminho Hamiltoniano

Objetivos. Explorar os conceitos fundamentais acerca do uso herança na linguagem Java

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

Tentativa e Erro (Backtracking)

Computação II Orientação a Objetos

Unidade 3: Classes em Java Para Programadores C Classes, Objetos e Tratamento de Erros Prof. Daniel Caetano

Linguagem de Programação I

INF 1620 P3-29/06/04 Questão 1 Nome:

Computação II Orientação a Objetos

Introdução à Programação C

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Padrão de Projeto State

Programação Gráfica Parte 3 Versão em C 2006 PUCPR Tutoria de Jogos 1º Ano

Transcrição:

Computação II Orientação a Objetos Fabio Mascarenhas - 2016.1 http://www.dcc.ufrj.br/~fabiom/java

Space Invaders

Componentes do Jogo Canhão Aliens Tiros Escudos Score e vidas Nem todos vão precisar de classes próprias para representa-los!

Interação com o motor de jogo O motor interage com nosso jogo mandando mensagens para o objeto principal do jogo, ou seja, chamando seus métodos O método desenhar avisa ao jogo que ele deve desenhar um quadro da sua interface; como parâmetro, o jogo recebe um objeto que representa a tela de desenho O método tique avisa ao jogo da passagem de tempo, para ele atualizar seu estado interno; como parâmetros, o jogo recebe quantos segundos se passaram, e quais teclas o jogador está pressionando no momento O método tecla avisa do jogo que uma tecla foi solta, informando qual foi essa tecla

O objeto tela O objeto tela responde a cinco métodos de desenho: public void triangulo(double x1, double y1, double x2, double y2, double x3, double y3, Cor cor) public void circulo(double cx, double cy, int raio, Cor cor) public void quadrado(double x, double y, int lado, Cor cor) public void retangulo(double x, double y, int largura, int altura, Cor cor) public void texto(string texto, double x, double y, int tamanho, Cor cor) public void imagem(string arquivo, int xa, int ya, int larg, int alt, double dir, double x, double y) A posição para retângulos e imagens é a do canto superior esquerdo; para o círculo é a do centro, para triângulos dos vértices, e para o texto do canto inferior esquerdo Podemos criar uma cor com uma tripla de componentes vermelho, verde e azul inteiros, onde 0 é ausência e 255 a intensidade máxima, decimais, onde 0.0 é ausência e 1.0 a intensidade máxima, ou usar alguma das cores pré-definidas como variáveis globais de Cor

Desenhando o jogo Começamos pelo método desenhar Poderíamos desenhar tudo acessando os campos dos nossos objetos e chamando os métodos apropriados no objeto tela, mas isso não é um bom projeto Saber se desenhar deve ser responsabilidade de cada um dos objetos do jogo Fazemos isso definindo métodos desenhar em cada uma das classes do jogo: Canhao, Alien e Tiro, e delegando a tarefa de desenhar para as instâncias dessas classes

Interagindo com o usuário Vamos ter dois tipos de interação com o usuário: segurar a seta esquerda move o canhão para a esquerda, segurar a seta direita move o canhão para a direita, apertar a tecla de espaço dispara um tiro Verificamos o estado das setas respondendo ao método tique: public void tique(hashset<string> teclas, double dt) { if(teclas.contains("left")) c.esquerda(dt); if(teclas.contains("right")) c.direita(dt);... } Verificamos a tecla de espaço respondendo ao método tecla: public void tecla(string t) { if(t.equals(" ")) tiro(); } Note que em ambos os casos delegamos o efeito no estado do jogo a outros métodos

Animando o canhão os aliens Podemos completar o método tique para fazer o movimento do canhão, dos aliens e dos tiros, novamente delegando isso para esses objetos: c.esquerda(dt) c.direita(dt) for(alien a: as) a.mover(dt); for(tiro t: ts) t.mover(dt); O código de cada movimento em si é simples, mas é um bom projeto sempre delegar para o objeto qualquer mudança em seu estado interno

Coordenação Tanto no Space Invaders como em outros jogos, precisamos verificar possíveis colisões entre os objetos do jogo, e tomar ações a depender de qual objeto colidiu com qual Ex: se o tiro colide com um alien, o alien é destruído e o tiro some Verificar uma interação envolvendo campos de dois (ou mais) objetos diferentes, e disparar ações em todos eles, é um problema da modelagem OO De quem é a responsabilidade de coordenar essa interação?

Coordenação, cont. Podemos eleger um dos objetos que estão participando da interação para ser o coordenador, mas isso aumenta o acoplamento entre os objetos que estão interagindo Ou podemos usar um mediador, um objeto que vai verificar se houve alguma interação, e mandar os objetos envolvidos tomarem uma ação O mediador precisa ter acesso ao estado dos objetos que estão interagindo, mas o acoplamento entre esses objetos diminui Vamos usar a instância de Jogo como mediador em nosso exemplo

Testando colisões Testamos se dois elementos do jogo colidiram testando se eles têm alguma interseção Jogos costumam simplificar esse problema com uma convenção, assumindo que todos os elementos são retângulos, independente da forma real deles: esses retângulos são as caixas de colisão ou hitbox Um elemento pode até ter mais de uma caixa de colisão, representando diferentes áreas dele, e elas vão acompanhando ele à medida que ele se move pela tela Podemos modelar caixas de colisão com uma classe própria, e nessa classe implementar a lógica para testar a interseção entre duas caixas de colisão

A classe Hitbox A caixa de colisão deve poder testar se ela colidiu com outra caixa de colisão (e em que lado dessa outra caixa): public class Hitbox { public static int TOPO = 1; public static int ESQUERDO = 2; public static int FUNDO = 4; public static int DIREITO = 8; } // Canto superior esquerdo e // inferior direito double x0, y0, x1, y1;... // Esse retângulo colidiu com hb, e onde em hb? public int intersecao(hitbox hb) { double w = ((x1-x0) + (hb.x1 - hb.x0)) / 2; double h = ((y1-y0) + (hb.y1 - hb.y0)) / 2; double dx = ((x1 + x0) - (hb.x1 + hb.x0)) / 2; double dy = ((y1 + y0) - (hb.y1 + hb.y0)) / 2; if (Math.abs(dx) <= w && Math.abs(dy) <= h) { double wy = w * dy; double hx = h * dx; if (wy > hx) { if (wy > -hx) return FUNDO; else return ESQUERDO; } else { if (wy > -hx) return DIREITO; else return TOPO; } } return 0; }

Caixas de colisão no Space Invaders Cada alien tem uma caixa de colisão ligeiramente menor que ele O canhão tem uma caixa de colisão do tamanho da sua base Os tiros têm caixas de colisão do tamanho exato de cada um Podemos representar os escudos como uma coleção de pequenos tijolos, cada um com sua caixa de colisão

Coordenando as colisões Para saber se as colisões aconteceram o coordenador usa as caixas de colisão dos tiros e dos outros objetos Se alguma colisão aconteceu o coordenador toma a ação apropriada Caso o tiro acerte algum objeto ele é avisado para fazer a sua animação de destruição apropriada Em um primeiro momento a lógica do método tique do coordenador vai ficar muito grande: isso é um sinal de que devemos refatorar esse método em diferentes métodos que cuidam de cada parte da lógica de atualização do jogo