conceitos de oo aplicados ao desenvolvimento de jogos 2d

Download Conceitos de OO aplicados ao Desenvolvimento de Jogos 2D

If you can't read please download the document

Upload: kaleu-caminha

Post on 26-Jun-2015

3.616 views

Category:

Education


5 download

DESCRIPTION

Esta aula apresenta os principais conceitos de Orientação a Objetos aplicado ao desenvolvimento de jogos 2D.O material também contém alguns conceitos básicos de jogos 2D e GameDesign.O material foi elaborado como revisão do curso de Orientação a Objetos 2 do SENAI São José em Santa Catarina que apresentou o uso de OO com exemplos baseados em jogos.Se tiver interesse em conhecer, mande-eme uma mensagem.

TRANSCRIPT

  • 1. Orientao a Objetos2 Carinhosamente chamada OO

2. Reviso OO mais JogosPassamos rapidamente por uma grande quantidade de conceitos nas ltimas 8 aulas;Nesta aula iremos revis-los, um a um, para perceber a dimenso do que estudamos e fortalecer o significado de cada novo termo. 3. AgendaReviso Conhecimentos da Disciplina;Conceitos de Jogos 2D;Conceitos de OO;Onde aprender mais? 4. Ferramentas Base Reuso com OOC16) Controle de Verses;C12) Padres de desenvolvimento (frameworks);C10) Interface dedesenvolvimento (IDE); C5) Encapsulamento;OO bsicaC14) Reutilizao de cdigo;C1) Classes, objetos e instncias; C6) Herana;C4) Construtores;C3) Composio;C2) Comentrios; OO bsica 2C9) Mtodos e atributos; C7) Polimorfismo;Elementos de Jogos 2DC21) Classes abstratas,C17) Game Design C22) Classes Interface;C18) Sprites e TileMaps; C23) Classes Enum;C19) Animao e desenho 2D;C24) Mtodos e atributos estticos;C25) Captura Eventos Teclado;C20) Tratamento de Exceo; 5. Controle de Verso 6. Controle de Verso 7. Controle de VersoResgate de verses antigas;Todos os commits e tags so registrados e sempre possvelvoltar para o cdigo de um commit ou tag anterior.Trabalho em equipe;O cdigo compartilhado entre toda a equipe. A ferramentaautomaticamente realiza "merge" nos arquivos para que todostenham a verso mais atual. E quando duas pessoas alteram omesmo cdigo, possvel corrigir usando resoluo deconflitos.Registro de todo o Histrico de alteraes;Se um erro ocorrer no software possvel ver quais as alteraesfeitas desde a ltima verso e anlis-las para encontrar o queaconteceu. 8. Controle de Verses Distribudo 9. Controle de Verses DistribudoTodos possuem o Histrico completo do projeto;Basicamente, se o projeto estiver sendo usado por 5 PCs e 4resolverem queimar o HD ao mesmo tempo, o projeto aindaestar a salvo.Commits podem ser feitos offline;Ou seja, voc pode trabalhar por um ms no projeto em um stioem Paulo Lopes, e quando voltar, sincronizar todas as suasmodificaes com as realizadas pela equipe.Commits podems er transferidos facilmente para outros repositrios;Novas pessoas podem entrar no projeto rapidamente, acessarsesu commits e "codar" 10. GitControle de Verses Distribudo;Ou seja, possui todas as caractersticas anteriores;Projeto Open Source;Isso significa que se os atuais responsveis pelo projeto resolverem mudar de profisso, qualquer pessoa ou empresa poder dando continuidade e suporte ao seu desenvolvimento;Suporte para desenvolvimento no-linear;Isso siginifica que se voc tiver trabalhando em uma nova funcionalidade do sistema e voc precisar parar para corrigir um bug da verso anterior voc pode facilmente: 1) salvar o que est fazendo em um branch; 2) acessar o verso que precisa ser corrigida; 3) corrigir o bug; 4) salvar a verso corrigida; 5) Deixar seus clientes felizes; e 6) voltar exatamente 11. Git e GitHubAmplamente utilizado pela comunidade de desenvolvimento de software;Cada vez mais empresas e pessoas esto trabalhando com Gitprincipalmente porque...Existem diversos repositrios online para voc mostrar seu cdigo para o mundo:Isso permite que voc crie um projeto nesta aula, publique ele no GitHub no final da tarde, seus amigos programadores o vejam e realizem algumas alteraes bacanas e amanh de tarde voc pode seguir trabalhando j com as modificaes feitas.Um destes repositrios o GitHubE ele to forte que algumas empresas alm do currculo,pedem o GitHub dos desenvolvedores. 12. IDE Ambiente Integrado de Desenvolvimento 13. IDEAmbiente Integrado de Desenvolvimento;Desenvolvimento Rpido de Aplicativos; 14. Ambiente Integrado (alguns recursos)Editor: escrita Compilador: Deploy: Realizarpida deGera cdigo dea publicao dacdigo, auto-mquina a partiraplicao,completar, do fonte do gerao degerao de projeto executveis,cdigo, etc; automaticamentetc;. e;Depurador:TestesCdigo LimpoFacilta a busca Automatizade Otimizado:por erros noos: Execuo facilita ocdigo atravs entendimento do de cdigos parada anlise projeto por todos garantircuidadosa de os envolvidos; integridade docada passo software apsexecutado pelo 15. Atalhos Selecionados (18) Foco do CursorEdio de CdigoCtrl + 0 Editor de CdigoCtrl + Shift + CEditor de CdigoCtrl + 1 Janela Projetos Ctrl + Shift + menosJanela ProjetosCtrl + 6 Navegao na Classe Ctrl + Shift + baixoNavegao na ClasseCtrl + 7 Janela de Tarefas Alt + Shift + F Janela de TarefasCtrl + Shift + 0 Resultados da PesquisaVai para ltima edio Ctrl + Q de cdigo Edio Mgica de CdigoGeralCtrl + R Refatorar / RenomearF6Executa proj. principalAlt + Insert Gerar cdigoExibe janela para Ctrl + F12encontrar mtodos e Encontra ocorrncias de atributos de uma classeAlt + F7 uma determinada varivel ou classe. Alt + Shift + Enter Tela CheiaCtrl + EspaoExibe auto-completar. Ctrl + Shift + FBusca em Projetos 16. OO Bsica 17. Classes e ObjetosEm OO, modelamos o mundo (do nosso problema) utilizando classes;public class Personagem { .. }public class Tiro { .. }E criamos objetos (ou instncias) destas classes que iro interagir para resolver o problema do nosso projeto: ex:new Personagem( "Ryu", 100 );new Personagem( "Vegeta", 100 );new Tiro( 376, 480, Direcao.ESQUERDA ); 18. Mtodos e AtributosQuando criamos uma classe (ou seja, uma abstrao do mundo real), modelamos caractersticas e comportamentos destas classes;Caractersticas so as nossas variveis de instncia; protected String nome; protected int vida;Comportamentos so os mtodos que alteram ou acessam osvalores das variveis de instncia, alteram ou acessam ascaractersticas do objeto; public boolean temColisao( Personagem outroPersonagem); public int getVida( ); public boolean estaVivo( ); public void perdeVida(int pontos); 19. Caracterstica / Varivel deInstnciaprotected String nome; MODIFICADOR DE ACESSO TIPO IDENTIFICADORprotected int vida; 20. Comportamento / Mtodopublic boolean temColisao(Personagem outro);TIPO DEMODIFICADORDE ACESSO RETORNO IDENTIFICADOR PARMETROSpublic void perdeVida( int pontos ); 21. public class Personagem { protected String nome; protected int vida; public void temColisao( Personagem outro ){return this.getRetangulo().intersects(outro.getRetangulo()); } public int getVida() { return this.vida; } public boolean estaVivo( ){return ( this.vida = 16){return; //Parou animao}this.timeElapsedInMiliseconds += timeElapsed;if(this.timeElapsedInMiliseconds > 100){this.frame++;this.sprite.setCurrAnimFrame(this.frame);this.timeElapsedInMiliseconds -= 100;}}public void draw(Graphics g) {this.sprite.draw(g, this.x, this.y);}} 35. Exemplo de animao baseada em frames.public class Explosao extends GameObject {protected Sprite sprite;private int frame;private int framesElapsed;public Explosao(int x, int y){ ... }public void step(long timeElapsed) {if(this.frame >= 16){return; //Parou animao}this.framesElapsed += 1;if(this.framesElapsed > 10){this.frame++;this.sprite.setCurrAnimFrame(this.frame);this.framesElapsed = 0;}}public void draw(Graphics g) {this.sprite.draw(g, this.x, this.y);}} 36. Exemplo de animao baseada em gifs.public class Explosao extends GameObject {protected Imagem img;private int timeElapsed;public Explosao(int x, int y){ ... }public void step(long timeElapsed) {this.timeElapsed += timeElapsed;}public void draw(Graphics g) {if(this.timeElapsed < 1000){//Se o gif tiver um segundo,//ele sumir e no ser mais desenhado//Se voc quiser o gif em loop,//basta apenas desenh-lo a cada rodadathis.img.draw(g, this.x, this.y);}}} 37. Desenho de formas geomtricasO Java permite que desenhemos crculos, quadrados e polgonos;Fazemos isso utilizando os mtodos do objeto Graphics;Este objeto no pode ser instanciado manualmente, porm todo objeto Image ou JFrame composta por um objeto da classe Graphics;No javaPlay, criada dinamicamente uma imagem e passados para nossos mtodos draw uma referncia do objeto Graphics desta imagem;Para saber mais estude a API Java 2D; 38. Utilizando o objeto da classe Graphicspublic void draw( Graphics g ) { //configura cor g.setColor( Color.blue ); //desenha crculo g.fillOval(x, y, largura, altura); //desenha Retngulo g.fillRect(x, y, largura, altura);//desenha Linha g.drawLine(x1, y1, x2, y2); // desenha polgono Polygon trinagulo = new Polygon(); trinagulo.addPoint(this.x, this.y); trinagulo.addPoint(this.x+10, this.y+20); trinagulo.addPoint(this.x-10, this.y+20); trinagulo.addPoint(this.x, this.y); g.fillPolygon(triangulo); } 39. Captura de Eventos do TecladoEm Java, eventos de teclado e mouse esto sempre ligados a janela em foco;Para pegar eventos preciso:Criar uma classe que implementa a interfaceKeyListener;Criar uma janela;Associar a classe KeyListener com a janela;Associar todos os objetos que tem algum comportamento alterado com o teclado classe que implementa o KeyListener; 40. no javaPlay existe a classe KeyboardInternamente a GameEngine associa esta classecom o GameCanvas(a janela do jogo);E para acessar a classe basta pegar a referncia para o objeto ativo da classe Keyboard:Keyboard k = GameEngine.getInstance().getKeyboard();E perguntar se uma determinada tecla est pressionada:if( k.keyDown( Keys.DIREITA ) ) {this.moveDireita(12); } 41. Game DesignO Game Design o projeto do jogo. Afinal, o que ser o jogo. O Game Desig criado por um Game Designer:Um Game Desiner proporciona umaexperincia;Um Game Designer toma decises sobre o jogo;Um Game Designer deve ter mltiplashabilidades; 42. As 4 reas de um JogoMecnica H is ri t aaEsicttTecnologia 43. MecnicaRegras: o que pode e no pode acontecer no jogo;Jogabilidade: quais elementos podem seradicionados ao jogo para permitir um maiornmero de possibilidades;Diverso: Equilbrio entre descoberta e dificuldade; 44. H is riatEm qual contexto a mecnica ser inserida para que faa sentido na mente do jogador?Desde o incio dos tempos a principal forma de transmisso de experincias atravs da tradio de Contar Histrias;Qual a histria que dar sentido experincia?Seres humanos gravam melhor as situaes que envolvem histrias com comeo, meio e fim.. 45. TecnologiaO que preciso para fazer a mecnica do jogo acontecer?Coliso especial? Placa de vdeo? Reproduo de Vdeos? Fontes especiais? Bibliotecas externas?O jogo ser 2D ou 3D?Quais as limitaes tecnolgicas? 46. Esic tt aEstilo Visual: o jogo ter estilo futurista ou como os primeiros vdeo-games?Animaes: quais animaes o jogo ter para torn-lo mais agradvel?Imagens de personagens e cenrios; 47. Ferramentas Base Reuso com OOC16) Controle de Verses;C12) Padres de desenvolvimento (frameworks);C10) Interface dedesenvolvimento (IDE); C5) Encapsulamento;OO bsicaC14) Reutilizao de cdigo;C1) Classes, objetos e instncias; C6) Herana;C4) Construtores;C3) Composio;C2) Comentrios; OO bsica 2C9) Mtodos e atributos; C7) Polimorfismo;Elementos de Jogos 2DC21) Classes abstratas,C17) Game Design C22) Classes Interface;C18) Sprites e TileMaps; C23) Classes Enum;C19) Animao e desenho 2D;C24) Mtodos e atributos estticos;C25) Captura Eventos Teclado;C20) Tratamento de Exceo; 48. Reuso em OO 49. FrameworksFrameworks constituem uma abordagem dedesenvolvimento que visa maximizar o reusode software (Ricardo Pereira e Silva);Definio: "Conjunto de classes que incorpora um projeto abstrato que soluciona uma famlia de problemas relacionados".(Fayad, citado por Ricardo Pereira e Silva)JavaPlay: Conjunto de 9 classes; Onde cada fase um GameStateController e cadaobjeto do jogo um GameObject; Para jogos 2D; 50. EncapsulamentoEncapsular fundamental para que seu sistema seja sucetvel a mudanas: no precisaremos mudar uma regra de negcio em vrios lugares, mas sim em apenas um nico lugar, j que essa regra est encapsulada (Caelum);Podemos encapsular uma determinada regra ou lgica dentro de um mtodo se ela for pequena, dentro de uma classe se for mais complexa ou dentro de uma API ou framework se for ainda maior; 51. Metfora da CpsulaEncapsular pode significar literalmente "Colocar dentro de uma cpsula";A partir disso podemos pensar em umcomprimido para alguma doena;Voc sabe que ele bom para aquela doena e ento, pode tom-lo para este fim sem saber o que h dentro da cpsula;Porm, o mdico precisar saber exatamente o que estiver l dentro para no correr riscos de lhe oferecer algo que ir prejudic-lo depois. 52. A metfora na programaoSe o seu objetivo for se tornar um excelente programador de jogos em Java, fundamental que voc estude por dentro o framework javaPlay e outros ao invs de apenas us-lo;Se o seu objetivo desenvolver jogos para diversas plataformas, ser mais inteligente se preocupar em aprender os mlehores frameworks de cada linguagem, sem e preocupar com a forma que ele est implementado; 53. Exemplos de Encapsulamento(Encapsulamento de framework) javaPlay:Framework que encapsula a lgica de construo dejogos 2D;(Encapsulamento de classe) ClasseCenarioComColisao:Encapsula a lgica de construo de um cenrio baseado em Tiles e coliso com objetos;(Encapsulamento de mtodo) MtodotemColisao de umGameObject com um Retngulo:Encapsula a lgica de colisao entre um GameObject e um retngulo; 54. Reuso com Herana e ComposioFrameworks fornecem classes e uma arquiteturapara voc desenvolver sua soluo;Encapsulamento apenas um conceito que pode ajud-lo a identificar quais regras podem ser encapsuladas;Para realizarmos reuso em nvel de cdigo, as duas formas bsicas que temos so Herana e Composio; 55. HeranaA herana permite definir uma classe como umaextenso de outra (Barnes);Quando uma classe extende outra, dizemos que ela herda todos os mtodos e atributos (desde que no sejam private) da classe superior;Podemos fazer isso em java atravs da palavra- chave extends:public class Bola extends GameObject { ... }public class MacaVenenosa extends Item { ... } 56. Mau uso de HeranaDurante anos, o uso de herana foi considerado como o grande mote da orientao a objetos. O mais importante na construo de um sistema era a definio de uma boa hierarquia de herana (Raul Sidnei Wazlawick)Alguns desenvolvedores usavam herana mesmo quandoqueriam apenas um mtodo de uma determinada classe.Por exemplo, considere a classe Random que a classe utilizadapara gerar nmeros aleatrios. E digamos que o seu sistematem uma nave que precisa de nmeros aleatrios para lanartiros. Um erro grave seria: public Nave extends Random{ ... } 57. Herana = umUma forma de verificar se um caso herana, utilizar o termo " um".Por exemplo. Considere uma Classe Cachorro com osatributos corDoPelo e velocidadeCorrida.Para cri-la eu poderia extender uma classe Animal. Esterelacionamento correto, um cachorro um animal.Agora imagine que exista a necessidade de uma classeGato que tenha tambm corDoPelo e velocidadeCorrida.seria correto extender a classe Cachorro?Neste caso, no, porque um gato no um cachorro;Se no futuro a classe Cachorro fosse modificada para ter omtodo latir. A classe gato automaticamente teria omesmo mtodo, estranho no? 58. Composio ao invs de HeranaUma outra forma de realizar reuso de classes utilizando composio;A composio consiste basicamente em umaclasse ter uma varivel de instncia de outraclasse;O temo chave para verificar se o seu sistema tem composio verificando se um classe "tem um" objeto de outra classe. 59. Exemplo de ComposioConsidere uma fase de um jogo de naves, podemos dizer que uma determinada fase tem um jogador, uma nave inimiga e tiros sendo lanados de um lado para o outro.Nesta relao a classe Fase comoposta por objetos de trs outras classes;Em cdigo isso se reflete no seguinte: 60. public class Fase implements GameStateController {//fase composta pelo jogadorNaveJogador1 naveJogador1;//fase composta por tirosArrayList tirosJogador;//fase composta por uma naveInimigaNaveInimiga naveInimiga;public void load() { //Inicializa os objetos que compe a fase this.naveJogador1 = new NaveJogador1(); this.tirosJogador = new ArrayList(); this.naveInimiga = new NaveInimiga(); }} 61. ComposioFechando com o exemplo da Nave e da Classe Random.Podemos dizer que uma nave tem um gerador de nmeros aleatrios;Em cdigo isso poderia ser refletido assim:public class Nave {private Random geradorNumeros;public Nave(){ this.geradorNumeros = new Random();}} 62. OO Bsica Parte 2 63. PolimorfismoPolimorsmo a capacidade de um objeto poder ser referenciado de vrias formas. (cuidado,polimorsmo no quer dizer que o objeto ca se transformando,muito pelo contrrio, um objeto nasce de um tipo e morredaquele tipo, o que pode mudar a maneira como nosreferimos a ele).Considere as classes MacaVerde e MacaVenenosa queextendem a classe Item;MacaVerde umaMaca = new MacaVerde(); // normal Item umItem= new MacaVerde(); // Polimorfismo Item umItem= new MacaVenenosa(); // PolimorfismoIsso possvel porque uma ma verde um tem tambm; 64. Polimorfismo na prticaNa prtica, duas boas utilidades para polimorfismo so no uso de listas e como parmetros;No caso de listas, imagine uma fase que possue ao mesmo tempo maas verdes e maas venenosas. Teramos que ter uma lista para cada uma delas;Com polimorfismo, podemos ter apenas uma lista de Itens que conter mas verdes, venenosas e quaisquer outros tens que venham a existir; 65. Exemplo de Polimorfismo com Listaspublic class Fase3 implements GameStateController { //... // O poder do polimorfismo// Os dois tipos de mas so tambm Itens,// Ento, posso armazen-las todas no mesmo lugar.private ArrayList itens; public void load() { // ....//Cria o array lista para os tens this.itens = new ArrayList();this.itens.add( new MacaVerde() ); this.itens.add( new MacaVenenosa() ); this.itens.add( new Chocolate() );// .... 66. Polimorfismo como ParmetrosConsiderando um jogo onde um personagem anda por um cenrio e encontra tens como mas ser necessrio verificar a coliso deste personagem com os diversos tens.A soluo sem polimorfismo seria implementar ummtodo para detectar a coliso com cada tem docenrio:public class Personagem {//... public boolean temColisao(MacaVerde item) { .. } public boolean temColisao(MacaVermelha item) { .. } public boolean temColisao(Chocolate item) { .. } // ....} 67. Polimorfismo como ParmetrosA soluo com polimorfismo e muito mais elegante seriaimplementar um mtodo para detectar a coliso comobjetos da classe Item:public class Personagem {//... public boolean temColisao(Item item) { .. } // ....}Agora poderamos inclusive detectar a coliso com qualquer temque estivesse em uma lista de tens://...for (Item item : this.listaItens) {if( personagem.temColisao( item ) ) { ... }} 68. Classes AbstratasUma classe Abstrata uma classe que no foi concebida para criar instncias. Seu propsito servir como superclasse para outras classes. As classes abstratas podem conter mtodo abstratos (Barnes);Classes abstratas modelam idias abstratas, que no podem ser vistas, tocadas ou executas sozinhas em um software. Um exemplo de idia abstrata um Animal. No existe um exemplar especfico de um animal, o que existem so macacos, cachorros, gatos.Para aprofundarmos, considere como exemplo a classeGameObject: 69. public abstract class GameObject { // . . . protected int altura; protected int largura;public abstract void step(long timeElapsed);public abstract void draw(Graphics g);// . . .public int getAltura() { return altura;}public void setAltura(int altura) { this.altura = altura;}public Rectangle getRetangulo() {return new Rectangle(x, y, largura, altura);}public boolean temColisao(GameObject obj) {return this.getRetangulo().intersects(obj.getRetangulo());}} 70. Classes AbstratasVoc jamais poderia criar um objeto diretamente da classe GameObject, isso nofaria sentido pois esta classe possui mtodos abstratos sem nenhuma implementao, o Java no pode aceitar que se criem objetos com mtodos sem implementao;GameObject obj = new GameObject() // ERRO 71. Classes AbstratasVoc sempre poder extender uma classe abstrata, e aproveitar todos os mtodos e atributos que ela oferece;Em troca, a subclasse dever implementar os mtodos abstratos, caso contrrio, a subclasse tambm ser abstrata;Veja um exemplo de uma classe que representa uma bola navegando pela tela: 72. public class Bola extends GameObject { private int velocidadeHorizontal; private int velocidadeVertical;public Bola(){ } //Implementa mtodo abstrato step public void step( long timeElapsed ){this.x += this.velocidadeHorizontal;this.y += this.velocidadeVertical; } //Implementa mtodo abstrato draw public void draw( Graphics g ) {//Herda atributos x, y, largura e alturag.setColor( Color.red );g.fillOval(this.x, this.y, this.largura, this.altura); }// . . .} 73. Classes InterfaceUma interface em Java uma especificao de um Tipo na forma de um nome e um conjunto de mtodos que no define nenhuma implementao para os mtodos (Barnes).Elas so semelhantes as classes abstratas nosentido de que todos os mtodos so abstratose voc no pode criar um objeto de uma classeinterface;Porm, uma interface no pode ser extendida por uma classe concreta, mas apenas implementada. 74. Exemplo de Interface que represente uma Fasede um jogoNome da interface.public interface Fase { public void load(); public void start(); public void step(long timeElapsed); public void draw(Graphics g);}Conjunto de Mtodosque devero ser implementadospelas classes que implementarema interface Fase. 75. Exemplo de uso da interface Fasepublic class Fase1 implements Fase {private Personagem personagem; public void load() {this.personagem = new Personagem("Ryu", 100);}public void step(long timeElapsed) {this.personagem.step( timeElapsed ); }public void draw(Graphics g) {g.setColor(Color.CYAN);g.fillRect(0, 0, 800, 600); this.personagem.draw(g); }public void start() { ... }} 76. Classes EnumUma enumerao um tipo de dado abstrato, cujos valores so atribudos a exatamente um elemento de um conjunto finito de identificadores;Esse tipo geralmente usado para variveis categricas (como os naipes de um baralho, as 8 direes, etc), que no possuem uma ordem numrica definida;Usamos variveis de um tipo Enumerado para gravar valores como "Naipe Espadas" ou "Direo Esquerda" sem precisar usar Strings; 77. Exemplo Naipes Baralhopublic enum Naipe { public enum Direcao {ESPADAS,ESQUERDA,PAUS, DIREITA,COPAS,CIMA,OUROS BAIXO, } ESQUERDA_CIMA, DIREITA_CIMA, ESQUERDA_BAIXO, DIREITA_BAIXO } 78. Uso da classe Enum Naipepublic class Carta { Naipe naipe; int numero; public Naipe(Naipe n, int num){ this.naipe = n; this.numero = num; }}// uso dos valores do conjunto enumerado Naipe Carta c1 = new Carta(Naipe.OUROS, 3); Carta c2 = new Carta(Naipe.ESPADAS, 3); Carta c3 = new Carta(Naipe.PAUS, 3); 79. Uso da classe Enum Direcaopublic class Tiro { Direcao direcao; int velocidade; public Tiro(Direcao d, int num){ this.direcao = d; this.velocidade = num; }}// uso dos valores do conjunto enumerado Naipe Tiro c1 = new Tiro(Direcao.DIREITA, 3); Tiro c2 = new Tiro(Direcao.ESQUERDA, 5); Tiro c3 = new Tiro(Direcao.CIMA, 9); 80. Uso EnumVariveis do tipo enum podem ser utilizadas para trabalhar comos algoritmos do programa;Por exemplo, para realizar o movimento de um tiro, dependendoda direo, o valor do x ou do y dever ser alterado:switch(this.direcao){case DIREITA: this.moveDireita( this.velocidade ); break;case ESQUERDA: this.moveEsquerda( this.velocidade ); break; } 81. O modificador staticO modificador static pode ser utilizado quando precisarmos acessar um mtodo ou atributo diretamente pela classe e no pelos objetos;Em mtodos, este recurso til quando tudo o que o mtodo precisa pode ser passado por parmetros, ele no precisa manipular variveis de instncia;Este recurso tambm til quando precisamos de funes ao invs de classes. Se tudo o que voc precisa uma funo utilitria, pode ter uma classe Util com vrios mtodos estticos. 82. public class Util {//Paralisa todo o programa por alguns milisegundosstatic public void sleep(int miliseconds) {try {Thread.sleep(miliseconds);} catch (InterruptedException ex) {System.out.println("Erro: " + ex);}}//Sorteia um nmero aleatriostatic public int random(int max) {Random r = new Random();return r.nextInt(max);}} 83. Uso de mtodos estticos// . . .int num = Util.random(38);System.out.println("Aluno sorteado: "+num);Util.sleep( 1000 ); //Pausa de um segundonum = Util.random(38); System.out.println("Aluno 2 sorteado: "+num); Util.sleep( 1000 ); //Pausa de mais um segundonum = Util.random(38); System.out.println("Aluno 3 sorteado: "+num); 84. Atributos EstticosUsar atributos de uma classe como eststicos permite que todas as instncias de uma classe acessem o mesmo valor;Um uso comum para o modificador static em atributos quando queremos constantes valores que no mudam ao longo da execuo do software e que podem ser utilizados em vrios lugares diferentes;Um exemplo a classe Keyboard que fornece diversos valores de constantes que representam, cada um, uma tecla do teclado. 85. public class Keyboard implements KeyListener{// . . .public static int UP_KEY = 38;public static int LEFT_KEY = 37;public static int RIGHT_KEY = 39;public static int DOWN_KEY = 40;public static int ESCAPE_KEY = 27;public static int SPACE_KEY = 32;public static int ENTER_KEY = 10;// . . .} 86. Uso dos atributos estticos// . . .if( k.keyDown( Keyboard.RIGHT_KEY ) ){jogador.aumentaVelocidadeHorizontal();}if( k.keyDown( Keyboard.LEFT_KEY ) ){jogador.diminuiVelocidadeHorizontal();}// . . . 87. Tratamento de ExceoUma exceo representa uma situao que normalmente no ocorre e representa algo de estranho ou inesperado no sistema (Caelum).Por exemplo:Diviso por zero;Objeto vazio tentanto executar um mtodo (NULL pointerexception);Arquivo de imagem no encontrado;Em Java possvel capturar estas excees durante a execuo do software e trat-las da forma mais adequada. 88. Tratamento de ExceesTratamos excees com blocosTry { ... } Catch( ... ) { ... }Se um erro ocorrer dentro do bloco Try, o Bloco Catch pode captur-lo e trat-lo da melhor forma possvel.Tambm possvel ter vrios blocos Catch paraum mesmo bloco Try:Try { ... } Catch( ... ) { ... } Catch( ... ) { ... } 89. Exemplo de tratamento de exceoUma exceo comum em Jogos tentar usar uma imagem que no existe, geralmente por erro na digitao do nome do arquivo.A classe Sprite j lana um erro quando no encontraum arquivo, este erro pode ser capturado usando umbloco Try { ... } Catch( ... ) { ... }try {this.sprite = new Sprite("resources/nave.png", 4, 64, 64); } catch (Exception ex) {System.out.println("Erro: "+ ex.getMessage()); } 90. Ferramentas Base Reuso com OOC16) Controle de Verses;C12) Padres de desenvolvimento (frameworks);C10) Interface dedesenvolvimento (IDE); C5) Encapsulamento;OO bsicaC14) Reutilizao de cdigo;C1) Classes, objetos e instncias; C6) Herana;C4) Construtores;C3) Composio, agregao;C2) Comentrios; OO bsica 2C9) Mtodos e atributos; C7) Polimorfismo;Elementos de Jogos 2DC21) Classes abstratas,C17) Game Design C22) Classes Interface;C18) Sprites e TileMaps; C23) Classes Enum;C19) Animao e desenho 2D;C24) Mtodos e atributos estticos;C25) Captura Eventos Teclado;C20) Tratamento de Exceo; 91. Bibliografia(Caelum) Apostila Caelum FJ-11;(Barnes) Programao Orientada a Objetos comJava: Uma Introduo prtica usando o BlueJ;(Ricardo Pereira e Silva) Como Modelar comUML2;(Raul Sidnei Waslawick) Anlise e Projeto deSistemas de Informao Orientados a Objetos; 92. Consideraes FinaisLevei 3 anos desde a primeira vez que ouvi falar de classes Interface e Abstratas para entend- las e mais 2 anos para perceber com clare quando e como utiliz-las;Apenas neste ltimo ano que conheci o poder das classes Enum;E Tratamento de Exceo com Java para mim continua sendo sempre um desafio conceitual de quando criar minhas prprias excees; 93. Consideraes finaisAprendi que no h aprendizado melhor do que 1) Ver como outras pessoas usaram os conceitos; 2) Aplicar minhas prprias idias para resolver alguns problemas;Portanto, quando surgirem desafios de programao, tenha por perto bons livros e alguns exemplos de cdigo, uma simples revisada pode lhe ajudar a ver com clareza e uma luz bem l no fundo ir brilhar com o conceito certo para o momento.