Você está na página 1de 38

UNP UNVERSDADE PAULSTA

Curso de Cincia da Computao


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