ATIVIDADES PRTICAS SUPERVISONADAS - APS DESENVOLVMENTO DE UM JOGO COM UTLZAO DE NTERFACE GRFCA Helton Luiz dos Santos - RA B307BC-0 Vinicius Souza Almeida - RA A70509-0 So Jos dos Campos, 12 de Novembro de 2013. UNP UNVERSDADE PAULSTA Curso de Cincia da Computao ATIVIDADES PRTICAS SUPERVISONADAS - APS DESENVOLVMENTO DE UM JOGO COM UTLZAO DE NTERFACE GRFCA Atividades Prticas Supervisionadas do 3 e 4 Semestres do Curso de Cincia da Computao da Universidade Paulista UNIP. Coordenador: Prof. Fernando A. Gotti So Jos dos Campos, 12 de Novembro 2013. UNP UNVERSDADE PAULSTA Curso de Cincia da Computao FICA DE APROVA!"O Tema: Desenvolvimento de um jogo com utilizao de interface grfica Este Trabalho foi aprovado como avaliao semestral da disciplina Atividades Prticas Supervisionadas - APS Os alunos receberam as seguintes notas: Aluno Tra#al$o I%&resso A&resenta'(o )*dia +Total, Professor Coordenador Auxiliar __________________________ Jos )ar-os Barbosa da Silveira Braslia,_____ de _________________de 2013. RESU)O Nesse trabalho iremos mostrar um jogo desenvolvido pelo nosso grupo utilizando a linguagem Java, mostrando as etapas do desenvolvimento como: criando um Frame e inserindo componentes no Frame, alm de criar Eventos para esses componentes, as regras e funcionalidades do jogo, e tambm mostrar algumas informaes sobre a utilizao da Linguagem Java no desenvolvimento de games, suas vantagens e desvantagens nesse mercado que cresce a cada dia que passa. Palavras-chave: Java, Jogo da Velha. A.STRACT n this work we show a game developed by our group using the Java language, showing the stages of development as creating a frame and inserting components in the frame and create events for these components, rules and game features, and also show some information about using the Java language to develop games, their advantages and disadvantages in this market that is growing every passing day. Key words: Java, Tic-tac-toe. /ISTA DE FIGURAS Figura 1 Tabuleiro do tradicional jogo da Velha_______________________14 Figura 2 Marcao de campos dos jogadores_________________________15 Figura 3 Lgica para definir o valor de retorno quando clicar em um boto__16 Figura 4 Lgica indicar a Velha____________________________________17 Figura 5 Cor de fundo azul quando h um vencedor___________________17 Figura 6 Lgica para mostrar mensagem se jogador venceu ou se deu velha ______________________________________________________________18 Figura 7 Jogador 1 marca um campo_______________________________20 Figura 8 Jogador 2 marca um campo_______________________________21 Figura 9 Jogo da Velha com vencedor______________________________22 Figura 10 Jogo da Velha sem vencedor_____________________________23 /ISTA DE A.REVIATURAS E SIG/AS Exemplo: DE Integrated Development Environment SU)RIO 01INTRODU!"O111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112 0101O.3ETIVOS411111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112 0151)OTIVA!"O4111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111106 0171 CURIOSIDADES SO.RE O )ERCADO DE GA)ES41111111111111111111111111111111111106 51REFERENCIA/ TE8RICO 111111111111111111111111111111111111111111111111111111111111111111111111111111111105 5101VANTAGENS111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111105 5151DESVANTAGENS11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111107 71DESCRI!"O DO PRO3ETO1111111111111111111111111111111111111111111111111111111111111111111111111111111109 7101DESENVO/VI)ENTO4111111111111111111111111111111111111111111111111111111111111111111111111111111111111109 7151REGRAS E FUNCIONA)ENTO DO 3OGO4111111111111111111111111111111111111111111111111111102 91RE/ACIONA)ENTO ENTRE DISCIP/INAS11111111111111111111111111111111111111111111111111111159 :1CONC/US"O11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111115: ;1.I./IOGRAFIA11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111115; <1APENDICE A111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111115< 01INTRODU!"O 0101O.3ETIVOS4 remos mostrar nos prximos captulos desse trabalho um jogo desenvolvido pelo nosso grupo utilizando a linguagem Java, o jogo desenvolvido o tradicional jogo da Velha. Para isso, utilizaremos o conceito de Orientao a Objetos, as classes JFrame para criar um Frame, ou seja, uma janela, aonde posso inserir vrios elementos como: botes, caixa de textos, menus, etc., e criar eventos para esses elementos, utilizando a interface ActionListener. No captulo 2, abordaremos mais detalhes como as vantagens e desvantagens de se utilizar essa linguagem para desenvolvimento de jogos e porque ainda no uma linguagem muito utilizada por grandes produtoras de games e qual linguagem que essas produtoras mais usam e o porque a usam. Veremos tambm o porque que a linguagem Java muito utilizada para desenvolvimento de jogos para internet e dispositivos portteis como celulares. No captulo 3, mostraremos o jogo da Velha desenvolvido utilizando a linguagem Java, mostrando todas as etapas: Plano de Desenvolvimento do jogo: todo detalhamento durante o desenvolvimento do jogo como pesquisas, planejamento, desenvolvimento, resultados; Projeto (estrutura e mdulos que sero desenvolvidos) do programa; Relatrio com as linhas de cdigo: Uma explicao sobre cada parte que o algoritmo utilizado faz, mostrando os atributos, as classes, os objetos e os mtodos implementados no programa; Ferramentas utilizadas para o desenvolvimento do jogo: configuraes do computador utilizado como hardware e sistema operacional, DE ou plataforma utilizada no desenvolvimento do programa. Nesse captulo voc ver ainda como so as Regras e Funcionamento do jogo da Velha: At quantos jogadores podem jogar; forma de jogar; quando um jogador vence uma partida; quando ocorre a Velha (empate). No captulo 4 iremos descrever a(s) disciplina(s) do curso e onde ela contribuiu para elaborao do projeto. No captulo 5 iremos fazer nossas consideraes finais e a que concluso chegamos em relao a utilizao da linguagem Java para desenvolvimento de 9 jogos, com nosso projeto aps as pesquisas, desenvolvimento e resultados obtidos. 0151)OTIVA!"O4 Nossa motivao para fazer esse trabalho foi o fato de gostarmos muito de jogos eletrnicos e tambm de programao, alm de termos gostado muito de aprender a linguagem Java. 0171 CURIOSIDADES SO.RE O )ERCADO DE GA)ES4 Hoje o mercado de jogos est to forte no Brasil e no mundo que, por exemplo, j supera em lucros o mercado cinematogrfico desde 2003, alm de outros mercados de entretenimento. Nos dias de hoje inclusive, os jogos eletrnicos no abrangem somente o pblico jovem, mas tambm o pblico adulto. S pra mostrar melhor esse crescimento do mercado de games, vejamos o seguinte: Segundo dados do vice-presidente de Relaes nstitucionais da Abragames, Emiliano de Castro, se baseando no maior destaque de cada tipo de mdia, ele fez uma comparao do faturamento entre elas nas primeiras 24 horas de seu lanamento: Cine%a: Lua Nova faturamento de US$ 73 Milhes. /ivros: Harry Porter e as Relquias da Morte faturamento de US$ 220 Milhes. Ga%es: Call of Duty Modern Warfare 2 faturamento de US$ 400 Milhes.
possvel perceber com esses dados, o quanto o mercado de Games est crescendo. O Brasil hoje, mesmo com os problemas de impostos, pirataria, entre outras coisas, ainda assim o segundo maior mercado de games do planeta, perdendo apenas para os Estados Unidos. No toa o pas hoje est recebendo um investimento alto das grandes produtoras de games, tendo algumas filiais instaladas no Brasil, como por 10 exemplo a Ubisoft. Alm disso, hoje muito comum grandes ttulos serem lanados traduzidos para o nosso idioma, seja com legendas ou dublagens. Outro ponto que mostra esse fato que alguns dos principais consoles de video-games j esto sendo fabricados no Brasil, como X-Box 360 e Playstation 3, baixando e muito o custo desses consoles no nosso pas. Mas porque isso acontece? O grande motivo, ou um dos grandes motivos desse crescimento deve-se a gerao de pessoas que cresceram jogando e que continuam jogando durante a fase adulta, ensinando seus filhos a fazerem o mesmo. muito comum no nosso pas hoje em dia encontrar vrios jovens que jogam algum jogo eletrnico, independente da plataforma que utilizam para jogar. Os jogos esto cada vez mais reais, simulando todos os tipos de efeitos de fsicas como exploses, nuvens, luminosidade etc., atravs da utilizao de motores grficos e fsicas. Para conseguir esse realismo, as produtoras desenvolvem ferramentas, sejam comerciais ou gratuitas, facilitando ao programador o desenvolvimento dos jogos e a diminuir o tempo gasto. 11 51REFERENCIA/ TE8RICO A linguagem de programao Java uma das linguagens mais utilizadas no desenvolvimento de jogos eletrnicos, principalmente para celulares e internet. sso devido pelo fato da linguagem ser uma das mais fceis de ler e interpretar, alm de ser multiplataforma. Apesar disso, o Java no uma linguagem muito utilizada para desenvolvimento de jogos para consoles como Playstation, X-Box, entre outros, principalmente jogos de grandes produtoras. Para esses jogos a linguagem mais utilizada ainda o C++. Os jogos dessas produtoras (que so classificadas com Triplo A, ou seja, produtoras de grandes ttulos) exigem otimizaes extremas, e muitas dessas produtoras j tem uma base instalada em C++, dificultando para eles uma mudana essa altura. Vamos ver seguir algumas vantagens e desvantagens de desenvolver jogos em Java: 5101VANTAGENS Assim como no C++, o Java possui um enorme nmero de bibliotecas. Uma das vantagens o fato do Java livrar o programador de detalhes sobre a gerncia de memria e da plataforma de hardware, o cdigo fica limpo, facilitando o entendimento. uma linguagem que possui um suporte nativo para janelas, grficos 2D, som, threads, rede, mouse e teclado, possibilitando montar timos jogos 2D sem precisar anexar uma biblioteca externa sequer. Assim, torna-se fcil instalar e manter tanto o ambiente de desenvolvimento como o jogo em si. Aprender Java hoje em dia est fcil, na internet por exemplo, h vrios livros e apostilas gratuitos, tutoriais, todos de muita boa qualidade, alm de ser ensinado na maioria das escolas tcnicas e faculdades. 12 5151DESVANTAGENS Apesar de ser multiplataforma, isso tem um custo: Tem baixa integrao com o sistema operacional. Por sua aplicao ficar encapsulada em uma Mquina Virtual (que uma exigncia de instalao), ela se isola do sistema operacional, e o problema disso que bibliotecas grficas como OpenGL e DirectX, que do suporte aos controles mais modernos, dependem disso. Java uma linguagem de fcil descompilao se comparado com o mesmo cdigo s que em C++. E como j dito anteriormente, as grandes produtoras de jogos preferem o C++ por j terem uma base instalada nela, dificultando uma mudana. 13 71DESCRI!"O DO PRO3ETO Hardware utilizado: Processador ntel 5, 8GB de memria RAM, HD de 650GB Software utilizado: Sistema Operacional Windows 7 - 64 bits. / Eclipse / JVM / JDK 7101DESENVO/VI)ENTO4 O jogo desenvolvido em JAVA foi feito usando a DE Eclipse. Na criao do Jogo utilizamos uma classe que herda de um JFrame e que implementa os mtodos e interfaces de ActionListener. Para o layout foram utilizados dois JPanels, um para a implementao de uma matriz 3x3 foi utilizado um array de JButtons organizados dentro de um GridLayout(3,3), formando assim um tabuleiro tradicional do jogo da velha. Veja abaixo na Figura 1, um exemplo: Figura 1 - Tabuleiro do tradicional jogo da Velha 14 O jogo inicia com os valores dos botes vazios e visveis, mas assim que o boto clicado inserido um valor String de "X ou "O e o boto ficar desabilitado, para inserir a String com a fonte e tamanho desejado foi criada uma varivel do tipo Font e depois com o mtodo .setFont() foi atribudo ao boto. E para desabilitar o boto clicado foi utilizado o mtodo .setEnabled(). Veja um exemplo abaixo na figura 2: Figura 2 - Marcao de campos dos jogadores A lgica utilizada para selecionar qual elemento inserir bem simples, foi inicializado uma varivel do tipo int=0, e assim que o boto clicado, atravs do seu ouvinte, chamado um mtodo que verifica se essa varivel igual a 0, se verdadeiro outra varivel do tipo String recebe o valor de "X, e a varivel do tipo int recebe o valor 1, na prxima vez que o boto for clicado essa primeira condio ser falsa, ento a varivel do tipo String recebe valor de "O e a varivel tipo int volta a ter seu valor 0, como podemos ver a seguir na Figura 3: 15 Figura 3 - Lgica para definir o valor de retorno quando clicar em um boto Conforme mostrado no mtodo acima aps adicionar um valor ao boto chamado outro mtodo passando como argumento uma varivel do tipo String. Esse mtodo chamado o mtodo responsvel de verificar se h um ganhador. Para fazer essa verificao o mtodo compara os valores de String dos botes, para cada possibilidade de ganho um comando de deciso foi criado, sabemos que para ganhar o jogador tem que marcar trs casas em sequncia na horizontal, vertical ou diagonal, ento como trabalhamos com uma matriz 3x3 h 8 possibilidades. Caso nenhum jogador atinja esse objetivo no jogo diz-se que "deu velha ou seja, no houve nenhum ganhador, para tratar essa possibilidade foi criado um contador inicializado em 0, a cada jogada incrementado o valor de mais 1 nessa varivel, caso haja um vencedor a varivel recebe 0,ento no mtodo de possibilidades a um comando de deciso que verifica se o contador igual a 9 (nmero total de casas), ou seja, para chegar a 9, significa que todas as casas foram escolhidas e nenhum jogador atingiu o objetivo do jogo. Na figura 4, um exemplo de uma possibilidade: 16 } //metodo logico para decidir a vez do jogador e atribuir e verificar sua jogada public void vez(int args){ int quem=0; String lemento; if(quem==0){ lemento=!"!; quem=#; orientacao$set%e&t(!'ez do (ogador )!); contador**; } else{ lemento=!+!; quem=0; orientacao$set%e&t(!'ez do (ogador #!); contador**; } jb,args-$set.ont(f); if((jb,0-$get%e&t()$equals(lemento))//(jb,0-$get%e&t()$equals(lemento)) // (jb,1-$get%e&t()$equals(lemento))){ jb,0-$set2ac3ground(4olor$blue); jb,0-$set2ac3ground(4olor$blue); jb,1-$set2ac3ground(4olor$blue); Figura 4 - Lgica indicar a Velha Ainda dentro do comando de deciso caso verdadeiro utiliza-se o mtodo .setBackground (Color.Blue). Que pinta os botes selecionador de azul para destacar e mostrar ao jogador em quais casas ele acertou. Veja na figura 5: Figura 5 - Cor de fundo azul quando h um vencedor Dentro dos comandos de decises do mtodo de possibilidades no final chama-se outro mtodo, que o mtodo que indica qual jogador foi o vencedor, para isso sempre que ele chamado, passado o argumento que 17 foi inserido ao boto (X ou O), assim aps verificado se aquela jogada foi vencedora e confirmada, o mtodo inicializado. Assim que o mtodo inicializado todos o mtodo .setEnabled() recebe argumento tipo false para todos os botes, isso faz com que todos os botes fiquem desabilitados para jogo. Dentro do mtodo verificado se o argumento passado igual a "X, O ou "velha, caso o argumento seja "X criado um JOptionPane.showMessageDialog() como a mensagem de que o jogador 1 foi o vencedor, assim feito para as trs possibilidades. Veja na figura 6: Figura 6 - Lgica para mostrar mensagem se jogador venceu ou se deu velha O boto novo jogo ao ser clicado, chama o mtodoreset(). Este mtodo habilita todos os botes atravs do mtodosetEnabled(), e insere valores vazios aos botes atravs do mtodo .setText, e tambm insere valores nulos no mtodo setBackground(), fazendo ento com que o jogo volte ao seu estado primrio. 18 public void gan5ador(String lemento){ jb,0-$setnabled(false); jb,#-$setnabled(false); jb,)-$setnabled(false); jb,6-$setnabled(false); jb,0-$setnabled(false); jb,7-$setnabled(false); jb,8-$setnabled(false); jb,9-$setnabled(false); jb,1-$setnabled(false); if(lemento==!"!){ orientacao$set%e&t(!(ogador # 'enceu:!); (+ption;ane$s5o<=essage>ialog(null?!(ogador # '@4A::::!); } if(lemento==!+!){ orientacao$set%e&t(!(ogador ) 'enceu:!); (+ption;ane$s5o<=essage>ialog(null?!(ogador ) '@4A::::!); } if(lemento==!vel5a!){ (+ption;ane$s5o<=essage>ialog(null?!>eu vel5a::::!); } } 7151REGRAS E FUNCIONA)ENTO DO 3OGO4 O jogo baseado no tradicional jogo da Velha, ou seja, dois jogadores (um de cada vez) marcam determinado campo, um jogador utiliza a letra 'X' e o outro utiliza a letra 'O' para no haver riscos de confuso nas marcaes dos 19 campos. Veja abaixo nas figuras 7 e 8, exemplos de regras e funcionalidade do jogo da Velha: Figura 7 - Jogador 1 marca um campo. 20 Figura 8 - Jogador 2 marca um campo Aquele que conseguir completar uma fileira com suas marcaes primeiro, vence a partida. A fileira pode ser completada tanto em horizontal, na vertical ou na diagonal. Caso ningum consiga completar a fileira, a partida se encerra com empate. Veja a seguir na figura 9, um exemplo do jogo em que um jogador vence a partida, repare que a fileira completada pelo jogador vencedor fica com cor de fundo azul e aparece uma mensagem dizendo que o jogador venceu: 21 Figura 9 - Jogo da Velha com vencedor Agora veja a seguir na figura 10, um exemplo de quando ningum consegue vencer a partida e conseqentemente o jogo termina empatado, repare que todos os campos ficam com cor de fundo vermelho e aparece uma mensagem dizendo que deu velha, ou seja, no houve vencedor: 22 Figura 10 - Jogo da Velha sem vencedor 23 91RE/ACIONA)ENTO ENTRE DISCIP/INAS A contribuio para o desenvolvimento do projeto foram das disciplinas Linguagem de Programao Orientado a Objetos e Aplicao de Linguagem de Programao Orientado a Objetos. Atravs dessas disciplinas pudemos aprender conceitos sobre programao orientado a objetos, criar mtodos de ordenao, manipular dados sejam numricos ou caracteres, tambm a criar "janelas (Frames), e adicionar algum contedo nesse Frame como, caixas de textos, imagens, botes, etc., e criar eventos para esses contedos, por exemplo, se eu clicar em um boto, o mesmo deve executar uma ao. Tambm aprendemos a acessar e a manipular dados em banco de dados atravs do DAO, desenvolver programas utilizando o padro MVC, armazenamento (persistncia) de dados em um banco de dados relacional utilizando o Hibernate. Assim, com esse aprendizado nessas disciplinas pudemos criar esse jogo. 24 :1CONC/US"O Na nossa opinio atingimos nosso objetivo em criar um jogo em Java, conseguimos em um jogo simples aplicar os conceitos de uma programao orientada a objetos, alm de utilizar a classe JFrame para criar um Frame e adicionar os componentes necessrios para o jogo, no caso do nosso jogo, botes para as marcaes de campos dos jogadores para fazerem suas jogadas utilizando o componente JButton e adicionando um evento a esse componente utilizando a interface ActionListener, assim conseguimos provar que a linguagem JAVA sim uma boa opo para a criao de jogos, pois com ela temos muitas possibilidades de desenvolvimento tanto grfico, quanto lgico, alm de ser uma linguagem multiplataforma, ou seja, reutilizao de cdigo em diversas plataformas diferentes. 25 ;1.I./IOGRAFIA Desenvolvimento de jogos em JAVA. Disponvel em: < http://adsdepressao.blogspot.com.br/2013/10/java-no-desenvolvimento-de- jogos.html#more> Acesso em Outubro 2013. Desenvolvimento de Jogos 3D em Java com a Utilizao do Motor Grfico rrlicht. Disponvel em: <http://www.flf.edu.br/revista-flf/monografias- computacao/monografia_jogo3d.pdf> Acesso em Outubro 2013. ndstria de games deve faturar US$ 74 bi em 2011. Disponvel em: <http://www.metodista.br/rronline/rrjornal/2011/ed.973/industria-de-games- deve-faturar-us-74-bi-em-2011> Acesso em Outubro 2013. O Mercado de Games e Aplicativos no Brasil. Disponvel em: <http://www.techtudo.com.br/jogos/noticia/2011/02/o-mercado-de-games-e- aplicativos-no-brasil.html> Acesso em Outubro 2013. 26 <1APENDICE A import java&$s<ing$B; public class (vel5a { public static void main(String &,-) { String,- tipo = { !jogador!? !4omputador! }; int resp; resp = (+ption;ane$s5o<+ption>ialog(null? !4ontra quem jogarC!? !.orma de (ogo!? 0? (+ption;ane$D@.+E=F%D+@G=SSFH? null? tipo? tipo,0-); if (resp == 0) { dois(ogadores dois = ne< dois(ogadores(); } else { um(ogador um = ne< um(ogador(); } } } import java&$s<ing$B; import java$a<t$B; import java$a<t$event$B; import java$util$Eandom; public class um(ogador e&tends (.rame implements FctionIistener { private (2utton jb,- = ne< (2utton,J-; private (Iabel Fviso; private (;anel p#; private (;anel p); private (;anel p6; private (Iabel orientacao; private (Iabel vazio; private (2utton ne<Hame; int contador = 0; int quem = 0; .ont f = ne< .ont(!Frial!? .ont$;IFD@? #00); public um(ogador() { orientacao = ne< (Iabel(!!); vazio = ne< (Iabel(! !); jb,0- = ne< (2utton(! !); jb,#- = ne< (2utton(! !); jb,)- = ne< (2utton(! !); jb,6- = ne< (2utton(! !); jb,0- = ne< (2utton(! !); jb,7- = ne< (2utton(! !); 27 jb,8- = ne< (2utton(! !); jb,9- = ne< (2utton(! !); jb,1- = ne< (2utton(! !); ne<Hame = ne< (2utton(!@ovo (ogo!); p) = ne< (;anel(ne< 2orderIaKout()); p# = ne< (;anel(ne< HridIaKout(6? 6)); p#$add(jb,0-); p#$add(jb,#-); p#$add(jb,)-); p#$add(jb,6-); p#$add(jb,0-); p#$add(jb,7-); p#$add(jb,8-); p#$add(jb,9-); p#$add(jb,1-); p)$add(ne<Hame? 2orderIaKout$S+A%L); p)$add(p#? 2orderIaKout$4@%E); p)$add(orientacao? 2orderIaKout$@+E%L); set4ontent;ane(p)); jb,1-$addFctionIistener(t5is); jb,9-$addFctionIistener(t5is); jb,8-$addFctionIistener(t5is); jb,7-$addFctionIistener(t5is); jb,0-$addFctionIistener(t5is); jb,6-$addFctionIistener(t5is); jb,)-$addFctionIistener(t5is); jb,#-$addFctionIistener(t5is); jb,0-$addFctionIistener(t5is); ne<Hame$addFctionIistener(t5is); set%itle(!(+H+ >F 'ILF!); set'isible(true); setSize(800? 800); setEesizable(false); setIocationEelative%o(null); } public void action;erformed(Fctionvent e) { if (e$getSource() == jb,0-) { vez(0); } if (e$getSource() == jb,#-) { vez(#); } if (e$getSource() == jb,)-) { vez()); } if (e$getSource() == jb,6-) { vez(6); } 28 if (e$getSource() == jb,0-) { vez(0); } if (e$getSource() == jb,7-) { vez(7); } if (e$getSource() == jb,8-) { vez(8); } if (e$getSource() == jb,9-) { vez(9); } if (e$getSource() == jb,1-) { vez(1); } if (e$getSource() == ne<Hame) { reset(0); } } // =%+>+ ;FEF ED@D4DFE (+H+ public void reset(int reset) { jb,0-$setnabled(true); jb,#-$setnabled(true); jb,)-$setnabled(true); jb,6-$setnabled(true); jb,0-$setnabled(true); jb,7-$setnabled(true); jb,8-$setnabled(true); jb,9-$setnabled(true); jb,1-$setnabled(true); quem = 0; orientacao$set%e&t(!'ez do (ogador!); jb,#-$set%e&t(!!); jb,)-$set%e&t(!!); jb,6-$set%e&t(!!); jb,0-$set%e&t(!!); jb,7-$set%e&t(!!); jb,8-$set%e&t(!!); jb,9-$set%e&t(!!); jb,1-$set%e&t(!!); jb,0-$set%e&t(!!); jb,0-$set2ac3ground(null); jb,#-$set2ac3ground(null); jb,)-$set2ac3ground(null); jb,6-$set2ac3ground(null); jb,0-$set2ac3ground(null); jb,7-$set2ac3ground(null); jb,8-$set2ac3ground(null); jb,9-$set2ac3ground(null); jb,1-$set2ac3ground(null); } 29 // metodo logico para decidir a vez do jogador e atribuir e verificar sua // jogada public void vez(int args) { String lemento; if (quem == 0) { lemento = !"!; quem = #; orientacao$set%e&t(!'ez do 4omputador!); jb,args-$set.ont(f); jb,args-$set%e&t(lemento); jb,args-$setnabled(false); possibilidades(lemento); contador**; } if (quem == #) { lemento = !+!; quem = 0; orientacao$set%e&t(!'ez do (ogador!); args = computador(0); verificF(args); jb,args-$set.ont(f); jb,args-$set%e&t(lemento); jb,args-$setnabled(false); possibilidades(lemento); contador**; } } // metodo gerador de numero aleatorios public int computador(int &) { Eandom random = ne< Eandom(); int aleatorio = random$ne&tDnt(J); SKstem$out$println(aleatorio); return aleatorio; } public int verificF(int v) { <5ile (jb,v-$get%e&t() == !"!) { v = computador(0); } <5ile (jb,v-$get%e&t() == !+!) { v = computador(0); } return v; } // metodo para verificar possibilidades de gan5o public void possibilidades(String lemento) { // verticais if ((jb,0-$get%e&t()$equals(lemento)) 30 // (jb,6-$get%e&t()$equals(lemento)) // (jb,8-$get%e&t()$equals(lemento))) { jb,0-$set2ac3ground(4olor$blue); jb,6-$set2ac3ground(4olor$blue); jb,8-$set2ac3ground(4olor$blue); gan5ador(lemento); contador = 0; } if ((jb,#-$get%e&t()$equals(lemento)) // (jb,0-$get%e&t()$equals(lemento)) // (jb,9-$get%e&t()$equals(lemento))) { jb,#-$set2ac3ground(4olor$blue); jb,0-$set2ac3ground(4olor$blue); jb,9-$set2ac3ground(4olor$blue); gan5ador(lemento); contador = 0; } if ((jb,)-$get%e&t()$equals(lemento)) // (jb,7-$get%e&t()$equals(lemento)) // (jb,1-$get%e&t()$equals(lemento))) { jb,)-$set2ac3ground(4olor$blue); jb,7-$set2ac3ground(4olor$blue); jb,1-$set2ac3ground(4olor$blue); gan5ador(lemento); contador = 0; } // Lorizontais if ((jb,0-$get%e&t()$equals(lemento)) // (jb,#-$get%e&t()$equals(lemento)) // (jb,)-$get%e&t()$equals(lemento))) { jb,0-$set2ac3ground(4olor$blue); jb,#-$set2ac3ground(4olor$blue); jb,)-$set2ac3ground(4olor$blue); gan5ador(lemento); contador = 0; } if ((jb,6-$get%e&t()$equals(lemento)) // (jb,0-$get%e&t()$equals(lemento)) // (jb,7-$get%e&t()$equals(lemento))) { jb,6-$set2ac3ground(4olor$blue); jb,0-$set2ac3ground(4olor$blue); jb,7-$set2ac3ground(4olor$blue); gan5ador(lemento); contador = 0; } if ((jb,8-$get%e&t()$equals(lemento)) // (jb,9-$get%e&t()$equals(lemento)) // (jb,1-$get%e&t()$equals(lemento))) { jb,8-$set2ac3ground(4olor$blue); jb,9-$set2ac3ground(4olor$blue); jb,1-$set2ac3ground(4olor$blue); gan5ador(lemento); 31 contador = 0; } // 'erticais if ((jb,0-$get%e&t()$equals(lemento)) // (jb,0-$get%e&t()$equals(lemento)) // (jb,1-$get%e&t()$equals(lemento))) { jb,0-$set2ac3ground(4olor$blue); jb,0-$set2ac3ground(4olor$blue); jb,1-$set2ac3ground(4olor$blue); gan5ador(lemento); contador = 0; } if ((jb,)-$get%e&t()$equals(lemento)) // (jb,0-$get%e&t()$equals(lemento)) // (jb,8-$get%e&t()$equals(lemento))) { jb,)-$set2ac3ground(4olor$blue); jb,0-$set2ac3ground(4olor$blue); jb,8-$set2ac3ground(4olor$blue); gan5ador(lemento); contador = 0; } if (contador == J) { jb,0-$set2ac3ground(4olor$E>); jb,#-$set2ac3ground(4olor$E>); jb,)-$set2ac3ground(4olor$E>); jb,6-$set2ac3ground(4olor$E>); jb,0-$set2ac3ground(4olor$E>); jb,7-$set2ac3ground(4olor$E>); jb,8-$set2ac3ground(4olor$E>); jb,9-$set2ac3ground(4olor$E>); jb,1-$set2ac3ground(4olor$E>); gan5ador(!vel5a!); } } // =%+>+ MA D=;ED= @F %IF + HF@LF>+E public void gan5ador(String lemento) { jb,0-$setnabled(false); jb,#-$setnabled(false); jb,)-$setnabled(false); jb,6-$setnabled(false); jb,0-$setnabled(false); jb,7-$setnabled(false); jb,8-$setnabled(false); jb,9-$setnabled(false); jb,1-$setnabled(false); if (lemento == !"!) { orientacao$set%e&t(!(ogador # 'enceu:!); (+ption;ane$s5o<=essage>ialog(null? !+ (ogador '@4A::::!); 32 } if (lemento == !+!) { orientacao$set%e&t(!4omputador venceu:!); (+ption;ane$s5o<=essage>ialog(null? !+ 4omputador '@4A::::!); } if (lemento == !vel5a!) { (+ption;ane$s5o<=essage>ialog(null? !>eu vel5a::::!); } } } import java&$s<ing$B; import java$a<t$B; import java$a<t$event$B; public class dois(ogadores e&tends (.rame implements FctionIistener { private (2utton jb,- = ne< (2utton,J-; private (Iabel Fviso; private (;anel p#; private (;anel p); private (;anel p6; private (Iabel orientacao; private (Iabel vazio; private (2utton ne<Hame; int contador = 0; int quem = 0; .ont f = ne< .ont(!Frial!? .ont$;IFD@? #00); public dois(ogadores() { orientacao = ne< (Iabel(!!); vazio = ne< (Iabel(! !); jb,0- = ne< (2utton(! !); jb,#- = ne< (2utton(! !); jb,)- = ne< (2utton(! !); jb,6- = ne< (2utton(! !); jb,0- = ne< (2utton(! !); jb,7- = ne< (2utton(! !); jb,8- = ne< (2utton(! !); jb,9- = ne< (2utton(! !); jb,1- = ne< (2utton(! !); ne<Hame = ne< (2utton(!@ovo (ogo!); p) = ne< (;anel(ne< 2orderIaKout()); p# = ne< (;anel(ne< HridIaKout(6? 6)); p#$add(jb,0-); p#$add(jb,#-); p#$add(jb,)-); p#$add(jb,6-); 33 p#$add(jb,0-); p#$add(jb,7-); p#$add(jb,8-); p#$add(jb,9-); p#$add(jb,1-); p)$add(ne<Hame? 2orderIaKout$S+A%L); p)$add(p#? 2orderIaKout$4@%E); p)$add(orientacao? 2orderIaKout$@+E%L); set4ontent;ane(p)); jb,1-$addFctionIistener(t5is); jb,9-$addFctionIistener(t5is); jb,8-$addFctionIistener(t5is); jb,7-$addFctionIistener(t5is); jb,0-$addFctionIistener(t5is); jb,6-$addFctionIistener(t5is); jb,)-$addFctionIistener(t5is); jb,#-$addFctionIistener(t5is); jb,0-$addFctionIistener(t5is); ne<Hame$addFctionIistener(t5is); set%itle(!(+H+ >F 'ILF!); set'isible(true); setSize(800? 800); setEesizable(false); setIocationEelative%o(null); } public void action;erformed(Fctionvent e) { if (e$getSource() == jb,0-) { vez(0); } if (e$getSource() == jb,#-) { vez(#); } if (e$getSource() == jb,)-) { vez()); } if (e$getSource() == jb,6-) { vez(6); } if (e$getSource() == jb,0-) { vez(0); } if (e$getSource() == jb,7-) { vez(7); } if (e$getSource() == jb,8-) { vez(8); } if (e$getSource() == jb,9-) { 34 vez(9); } if (e$getSource() == jb,1-) { vez(1); } if (e$getSource() == ne<Hame) { reset(0); } } // =%+>+ ;FEF ED@D4DFE (+H+ public void reset(int reset) { jb,0-$setnabled(true); jb,#-$setnabled(true); jb,)-$setnabled(true); jb,6-$setnabled(true); jb,0-$setnabled(true); jb,7-$setnabled(true); jb,8-$setnabled(true); jb,9-$setnabled(true); jb,1-$setnabled(true); quem = 0; orientacao$set%e&t(!'ez do (ogador #!); jb,#-$set%e&t(!!); jb,)-$set%e&t(!!); jb,6-$set%e&t(!!); jb,0-$set%e&t(!!); jb,7-$set%e&t(!!); jb,8-$set%e&t(!!); jb,9-$set%e&t(!!); jb,1-$set%e&t(!!); jb,0-$set%e&t(!!); jb,0-$set2ac3ground(null); jb,#-$set2ac3ground(null); jb,)-$set2ac3ground(null); jb,6-$set2ac3ground(null); jb,0-$set2ac3ground(null); jb,7-$set2ac3ground(null); jb,8-$set2ac3ground(null); jb,9-$set2ac3ground(null); jb,1-$set2ac3ground(null); } // metodo logico para decidir a vez do jogador e atribuir e verificar sua // jogada public void vez(int args) { String lemento; if (quem == 0) { lemento = !"!; quem = #; orientacao$set%e&t(!'ez do (ogador )!); contador**; } else { lemento = !+!; quem = 0; 35 orientacao$set%e&t(!'ez do (ogador #!); contador**; } jb,args-$set.ont(f); jb,args-$set%e&t(lemento); jb,args-$setnabled(false); possibilidades(lemento); } // metodo para verificar possibilidades de gan5o public void possibilidades(String lemento) { // verticais if ((jb,0-$get%e&t()$equals(lemento)) // (jb,6-$get%e&t()$equals(lemento)) // (jb,8-$get%e&t()$equals(lemento))) { jb,0-$set2ac3ground(4olor$blue); jb,6-$set2ac3ground(4olor$blue); jb,8-$set2ac3ground(4olor$blue); gan5ador(lemento); contador = 0; } if ((jb,#-$get%e&t()$equals(lemento)) // (jb,0-$get%e&t()$equals(lemento)) // (jb,9-$get%e&t()$equals(lemento))) { jb,#-$set2ac3ground(4olor$blue); jb,0-$set2ac3ground(4olor$blue); jb,9-$set2ac3ground(4olor$blue); gan5ador(lemento); contador = 0; } if ((jb,)-$get%e&t()$equals(lemento)) // (jb,7-$get%e&t()$equals(lemento)) // (jb,1-$get%e&t()$equals(lemento))) { jb,)-$set2ac3ground(4olor$blue); jb,7-$set2ac3ground(4olor$blue); jb,1-$set2ac3ground(4olor$blue); gan5ador(lemento); contador = 0; } // Lorizontais if ((jb,0-$get%e&t()$equals(lemento)) // (jb,#-$get%e&t()$equals(lemento)) // (jb,)-$get%e&t()$equals(lemento))) { jb,0-$set2ac3ground(4olor$blue); jb,#-$set2ac3ground(4olor$blue); jb,)-$set2ac3ground(4olor$blue); gan5ador(lemento); contador = 0; } if ((jb,6-$get%e&t()$equals(lemento)) // (jb,0-$get%e&t()$equals(lemento)) // (jb,7-$get%e&t()$equals(lemento))) { 36 jb,6-$set2ac3ground(4olor$blue); jb,0-$set2ac3ground(4olor$blue); jb,7-$set2ac3ground(4olor$blue); gan5ador(lemento); contador = 0; } if ((jb,8-$get%e&t()$equals(lemento)) // (jb,9-$get%e&t()$equals(lemento)) // (jb,1-$get%e&t()$equals(lemento))) { jb,8-$set2ac3ground(4olor$blue); jb,9-$set2ac3ground(4olor$blue); jb,1-$set2ac3ground(4olor$blue); gan5ador(lemento); contador = 0; } // 'erticais if ((jb,0-$get%e&t()$equals(lemento)) // (jb,0-$get%e&t()$equals(lemento)) // (jb,1-$get%e&t()$equals(lemento))) { jb,0-$set2ac3ground(4olor$blue); jb,0-$set2ac3ground(4olor$blue); jb,1-$set2ac3ground(4olor$blue); gan5ador(lemento); contador = 0; } if ((jb,)-$get%e&t()$equals(lemento)) // (jb,0-$get%e&t()$equals(lemento)) // (jb,8-$get%e&t()$equals(lemento))) { jb,)-$set2ac3ground(4olor$blue); jb,0-$set2ac3ground(4olor$blue); jb,8-$set2ac3ground(4olor$blue); gan5ador(lemento); contador = 0; } if (contador == J) { jb,0-$set2ac3ground(4olor$E>); jb,#-$set2ac3ground(4olor$E>); jb,)-$set2ac3ground(4olor$E>); jb,6-$set2ac3ground(4olor$E>); jb,0-$set2ac3ground(4olor$E>); jb,7-$set2ac3ground(4olor$E>); jb,8-$set2ac3ground(4olor$E>); jb,9-$set2ac3ground(4olor$E>); jb,1-$set2ac3ground(4olor$E>); gan5ador(!vel5a!); } } // =%+>+ MA D=;ED= @F %IF + HF@LF>+E public void gan5ador(String lemento) { 37 jb,0-$setnabled(false); jb,#-$setnabled(false); jb,)-$setnabled(false); jb,6-$setnabled(false); jb,0-$setnabled(false); jb,7-$setnabled(false); jb,8-$setnabled(false); jb,9-$setnabled(false); jb,1-$setnabled(false); if (lemento == !"!) { orientacao$set%e&t(!(ogador # 'enceu:!); (+ption;ane$s5o<=essage>ialog(null? !(ogador # '@4A::::!); } if (lemento == !+!) { orientacao$set%e&t(!(ogador ) 'enceu:!); (+ption;ane$s5o<=essage>ialog(null? !(ogador ) '@4A::::!); } if (lemento == !vel5a!) { (+ption;ane$s5o<=essage>ialog(null? !>eu vel5a::::!); } } } APENDCE A - Cdigo-fonte do jogo da velha 38