aps trabalho

Upload: helton-vox

Post on 15-Oct-2015

224 views

Category:

Documents


6 download

TRANSCRIPT

UNIP UNIVERSIDADE PAULISTACurso de Cincia da ComputaoATIVIDADES PRTICAS SUPERVISONADAS - APSDesenvolvimento de um jogo com utilizao de interface grficaHelton Luiz dos Santos - RA B307BC-0

Vinicius Souza Almeida - RA A70509-0

So Jos dos Campos, 12 de Novembro de 2013.UNIP UNIVERSIDADE PAULISTACurso de Cincia da ComputaoATIVIDADES PRTICAS SUPERVISONADAS - APSDesenvolvimento de um jogo com utilizao de interface grficaAtividades Prticas Supervisionadas do 3 e 4 Semestres do Curso de Cincia da Computao da Universidade Paulista UNIP.

Coordenador: Prof. Fernando A. GottiSo Jos dos Campos, 12 de Novembro 2013.

UNIP UNIVERSIDADE PAULISTACurso de Cincia da ComputaoFICHA DE APROVAOTema: Desenvolvimento de um jogo com utilizao de interface grficaEste Trabalho foi aprovado como avaliao semestral da disciplina Atividades Prticas Supervisionadas - APS

Os alunos receberam as seguintes notas:AlunoTrabalho ImpressoApresentaoMdia (Total)

Professor Coordenador Auxiliar

__________________________

Jos Marcos Barbosa da Silveira

Braslia,_____ de _________________de 2013.ResumoNesse 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.AbstractIn 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. LISTA De FigurasFigura 1 Tabuleiro do tradicional jogo da Velha14Figura 2 Marcao de campos dos jogadores15Figura 3 Lgica para definir o valor de retorno quando clicar em um boto16Figura 4 Lgica indicar a Velha17Figura 5 Cor de fundo azul quando h um vencedor17Figura 6 Lgica para mostrar mensagem se jogador venceu ou se deu velha18Figura 7 Jogador 1 marca um campo20Figura 8 Jogador 2 marca um campo21Figura 9 Jogo da Velha com vencedor22Figura 10 Jogo da Velha sem vencedor23Lista de Abreviaturas e SiglasExemplo:

IDE Integrated Development Environment

Sumrio

91.INTRODUO

91.1.Objetivos:

101.2.Motivao:

101.3. Curiosidades sobre o mercado de games:

122.REFERENCIAL TERICO

122.1.Vantagens

132.2.Desvantagens

143.DESCRIO DO PROJETO

143.1.Desenvolvimento:

203.2.Regras e funcionamento do jogo:

244.RELACIONAMENTO ENTRE DISCIPLINAS

255.CONCLUSO

266.BIBLIOGRAFIA

277.APENDICE A

1.INTRODUO1.1.Objetivos:

Iremos 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, IDE 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 jogos, com nosso projeto aps as pesquisas, desenvolvimento e resultados obtidos.1.2.Motivao:

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.1.3. Curiosidades sobre o mercado de games: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 Institucionais 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: Cinema: Lua Nova faturamento de US$ 73 Milhes.Livros: Harry Porter e as Relquias da Morte faturamento de US$ 220 Milhes.Games: 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 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.

2.REFERENCIAL TERICO

A linguagem de programao Java uma das linguagens mais utilizadas no desenvolvimento de jogos eletrnicos, principalmente para celulares e internet. Isso 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:2.1.Vantagens

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.

2.2.Desvantagens

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.

3.DESCRIO DO PROJETOHardware utilizado:

Processador Intel I5, 8GB de memria RAM, HD de 650GB

Software utilizado:

Sistema Operacional Windows 7 - 64 bits. / Eclipse / JVM / JDK3.1.Desenvolvimento:

O jogo desenvolvido em JAVA foi feito usando a IDE 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

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:

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:

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 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.

3.2.Regras e funcionamento do jogo:

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 campos. Veja abaixo nas figuras 7 e 8, exemplos de regras e funcionalidade do jogo da Velha:

Figura 7 - Jogador 1 marca um campo.

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:

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:

Figura 10 - Jogo da Velha sem vencedor

4.RELACIONAMENTO ENTRE DISCIPLINASA 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.5.CONCLUSONa 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.6.BIBLIOGRAFIADesenvolvimento de jogos em JAVA. Disponvel em: Acesso em Outubro 2013.Desenvolvimento de Jogos 3D em Java com a Utilizao do Motor Grfico Irrlicht. Disponvel em: Acesso em Outubro 2013.Indstria de games deve faturar US$ 74 bi em 2011. Disponvel em: Acesso em Outubro 2013.O Mercado de Games e Aplicativos no Brasil. Disponvel em: Acesso em Outubro 2013.7.APENDICE Aimport javax.swing.*;public class Jvelha {

public static void main(String x[]) {

String[] tipo = { "jogador", "Computador" };

int resp;

resp = JOptionPane.showOptionDialog(null, "Contra quem jogar?",

"Forma de Jogo", 0, JOptionPane.INFORMATION_MESSAGE, null,

tipo, tipo[0]);

if (resp == 0) {

doisJogadores dois = new doisJogadores();

} else {

umJogador um = new umJogador();

}

}}

import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.Random;public class umJogador extends JFrame implements ActionListener {

private JButton jb[] = new JButton[9];

private JLabel Aviso;

private JPanel p1;

private JPanel p2;

private JPanel p3;

private JLabel orientacao;

private JLabel vazio;

private JButton newGame;

int contador = 0;

int quem = 0;

Font f = new Font("Arial", Font.PLAIN, 100);

public umJogador() {

orientacao = new JLabel("");

vazio = new JLabel(" ");

jb[0] = new JButton(" ");

jb[1] = new JButton(" ");

jb[2] = new JButton(" ");

jb[3] = new JButton(" ");

jb[4] = new JButton(" ");

jb[5] = new JButton(" ");

jb[6] = new JButton(" ");

jb[7] = new JButton(" ");

jb[8] = new JButton(" ");

newGame = new JButton("Novo Jogo");

p2 = new JPanel(new BorderLayout());

p1 = new JPanel(new GridLayout(3, 3));

p1.add(jb[0]);

p1.add(jb[1]);

p1.add(jb[2]);

p1.add(jb[3]);

p1.add(jb[4]);

p1.add(jb[5]);

p1.add(jb[6]);

p1.add(jb[7]);

p1.add(jb[8]);

p2.add(newGame, BorderLayout.SOUTH);

p2.add(p1, BorderLayout.CENTER);

p2.add(orientacao, BorderLayout.NORTH);

setContentPane(p2);

jb[8].addActionListener(this);

jb[7].addActionListener(this);

jb[6].addActionListener(this);

jb[5].addActionListener(this);

jb[4].addActionListener(this);

jb[3].addActionListener(this);

jb[2].addActionListener(this);

jb[1].addActionListener(this);

jb[0].addActionListener(this);

newGame.addActionListener(this);

setTitle("JOGO DA VELHA");

setVisible(true);

setSize(600, 600);

setResizable(false);

setLocationRelativeTo(null);

}

public void actionPerformed(ActionEvent e) {

if (e.getSource() == jb[0]) {

vez(0);

}

if (e.getSource() == jb[1]) {

vez(1);

}

if (e.getSource() == jb[2]) {

vez(2);

}

if (e.getSource() == jb[3]) {

vez(3);

}

if (e.getSource() == jb[4]) {

vez(4);

}

if (e.getSource() == jb[5]) {

vez(5);

}

if (e.getSource() == jb[6]) {

vez(6);

}

if (e.getSource() == jb[7]) {

vez(7);

}

if (e.getSource() == jb[8]) {

vez(8);

}

if (e.getSource() == newGame) {

reset(0);

}

}

// METODO PARA REINICIAR JOGO

public void reset(int reset) {

jb[0].setEnabled(true);

jb[1].setEnabled(true);

jb[2].setEnabled(true);

jb[3].setEnabled(true);

jb[4].setEnabled(true);

jb[5].setEnabled(true);

jb[6].setEnabled(true);

jb[7].setEnabled(true);

jb[8].setEnabled(true);

quem = 0;

orientacao.setText("Vez do Jogador");

jb[1].setText("");

jb[2].setText("");

jb[3].setText("");

jb[4].setText("");

jb[5].setText("");

jb[6].setText("");

jb[7].setText("");

jb[8].setText("");

jb[0].setText("");

jb[0].setBackground(null);

jb[1].setBackground(null);

jb[2].setBackground(null);

jb[3].setBackground(null);

jb[4].setBackground(null);

jb[5].setBackground(null);

jb[6].setBackground(null);

jb[7].setBackground(null);

jb[8].setBackground(null);

}

// metodo logico para decidir a vez do jogador e atribuir e verificar sua

// jogada

public void vez(int args) {

String Elemento;

if (quem == 0) {

Elemento = "X";

quem = 1;

orientacao.setText("Vez do Computador");

jb[args].setFont(f);

jb[args].setText(Elemento);

jb[args].setEnabled(false);

possibilidades(Elemento);

contador++;

}

if (quem == 1) {

Elemento = "O";

quem = 0;

orientacao.setText("Vez do Jogador");

args = computador(0);

verificA(args);

jb[args].setFont(f);

jb[args].setText(Elemento);

jb[args].setEnabled(false);

possibilidades(Elemento);

contador++;

}

}

// metodo gerador de numero aleatorios

public int computador(int x) {

Random random = new Random();

int aleatorio = random.nextInt(9);

System.out.println(aleatorio);

return aleatorio;

}

public int verificA(int v) {

while (jb[v].getText() == "X") {

v = computador(0);

}

while (jb[v].getText() == "O") {

v = computador(0);

}

return v;

}

// metodo para verificar possibilidades de ganho

public void possibilidades(String Elemento) {

// verticais

if ((jb[0].getText().equals(Elemento))

&& (jb[3].getText().equals(Elemento))

&& (jb[6].getText().equals(Elemento))) {

jb[0].setBackground(Color.blue);

jb[3].setBackground(Color.blue);

jb[6].setBackground(Color.blue);

ganhador(Elemento);

contador = 0;

}

if ((jb[1].getText().equals(Elemento))

&& (jb[4].getText().equals(Elemento))

&& (jb[7].getText().equals(Elemento))) {

jb[1].setBackground(Color.blue);

jb[4].setBackground(Color.blue);

jb[7].setBackground(Color.blue);

ganhador(Elemento);

contador = 0;

}

if ((jb[2].getText().equals(Elemento))

&& (jb[5].getText().equals(Elemento))

&& (jb[8].getText().equals(Elemento))) {

jb[2].setBackground(Color.blue);

jb[5].setBackground(Color.blue);

jb[8].setBackground(Color.blue);

ganhador(Elemento);

contador = 0;

}

// Horizontais

if ((jb[0].getText().equals(Elemento))

&& (jb[1].getText().equals(Elemento))

&& (jb[2].getText().equals(Elemento))) {

jb[0].setBackground(Color.blue);

jb[1].setBackground(Color.blue);

jb[2].setBackground(Color.blue);

ganhador(Elemento);

contador = 0;

}

if ((jb[3].getText().equals(Elemento))

&& (jb[4].getText().equals(Elemento))

&& (jb[5].getText().equals(Elemento))) {

jb[3].setBackground(Color.blue);

jb[4].setBackground(Color.blue);

jb[5].setBackground(Color.blue);

ganhador(Elemento);

contador = 0;

}

if ((jb[6].getText().equals(Elemento))

&& (jb[7].getText().equals(Elemento))

&& (jb[8].getText().equals(Elemento))) {

jb[6].setBackground(Color.blue);

jb[7].setBackground(Color.blue);

jb[8].setBackground(Color.blue);

ganhador(Elemento);

contador = 0;

}

// Verticais

if ((jb[0].getText().equals(Elemento))

&& (jb[4].getText().equals(Elemento))

&& (jb[8].getText().equals(Elemento))) {

jb[0].setBackground(Color.blue);

jb[4].setBackground(Color.blue);

jb[8].setBackground(Color.blue);

ganhador(Elemento);

contador = 0;

}

if ((jb[2].getText().equals(Elemento))

&& (jb[4].getText().equals(Elemento))

&& (jb[6].getText().equals(Elemento))) {

jb[2].setBackground(Color.blue);

jb[4].setBackground(Color.blue);

jb[6].setBackground(Color.blue);

ganhador(Elemento);

contador = 0;

}

if (contador == 9) {

jb[0].setBackground(Color.RED);

jb[1].setBackground(Color.RED);

jb[2].setBackground(Color.RED);

jb[3].setBackground(Color.RED);

jb[4].setBackground(Color.RED);

jb[5].setBackground(Color.RED);

jb[6].setBackground(Color.RED);

jb[7].setBackground(Color.RED);

jb[8].setBackground(Color.RED);

ganhador("velha");

}

}

// METODO QUE IMPRIME NA TELA O GANHADOR

public void ganhador(String Elemento) {

jb[0].setEnabled(false);

jb[1].setEnabled(false);

jb[2].setEnabled(false);

jb[3].setEnabled(false);

jb[4].setEnabled(false);

jb[5].setEnabled(false);

jb[6].setEnabled(false);

jb[7].setEnabled(false);

jb[8].setEnabled(false);

if (Elemento == "X") {

orientacao.setText("Jogador 1 Venceu!");

JOptionPane.showMessageDialog(null, "O Jogador VENCEU!!!!");

}

if (Elemento == "O") {

orientacao.setText("Computador venceu!");

JOptionPane.showMessageDialog(null, "O Computador VENCEU!!!!");

}

if (Elemento == "velha") {

JOptionPane.showMessageDialog(null, "Deu velha!!!!");

}

}}

import javax.swing.*;import java.awt.*;import java.awt.event.*;public class doisJogadores extends JFrame implements ActionListener {

private JButton jb[] = new JButton[9];

private JLabel Aviso;

private JPanel p1;

private JPanel p2;

private JPanel p3;

private JLabel orientacao;

private JLabel vazio;

private JButton newGame;

int contador = 0;

int quem = 0;

Font f = new Font("Arial", Font.PLAIN, 100);

public doisJogadores() {

orientacao = new JLabel("");

vazio = new JLabel(" ");

jb[0] = new JButton(" ");

jb[1] = new JButton(" ");

jb[2] = new JButton(" ");

jb[3] = new JButton(" ");

jb[4] = new JButton(" ");

jb[5] = new JButton(" ");

jb[6] = new JButton(" ");

jb[7] = new JButton(" ");

jb[8] = new JButton(" ");

newGame = new JButton("Novo Jogo");

p2 = new JPanel(new BorderLayout());

p1 = new JPanel(new GridLayout(3, 3));

p1.add(jb[0]);

p1.add(jb[1]);

p1.add(jb[2]);

p1.add(jb[3]);

p1.add(jb[4]);

p1.add(jb[5]);

p1.add(jb[6]);

p1.add(jb[7]);

p1.add(jb[8]);

p2.add(newGame, BorderLayout.SOUTH);

p2.add(p1, BorderLayout.CENTER);

p2.add(orientacao, BorderLayout.NORTH);

setContentPane(p2);

jb[8].addActionListener(this);

jb[7].addActionListener(this);

jb[6].addActionListener(this);

jb[5].addActionListener(this);

jb[4].addActionListener(this);

jb[3].addActionListener(this);

jb[2].addActionListener(this);

jb[1].addActionListener(this);

jb[0].addActionListener(this);

newGame.addActionListener(this);

setTitle("JOGO DA VELHA");

setVisible(true);

setSize(600, 600);

setResizable(false);

setLocationRelativeTo(null);

}

public void actionPerformed(ActionEvent e) {

if (e.getSource() == jb[0]) {

vez(0);

}

if (e.getSource() == jb[1]) {

vez(1);

}

if (e.getSource() == jb[2]) {

vez(2);

}

if (e.getSource() == jb[3]) {

vez(3);

}

if (e.getSource() == jb[4]) {

vez(4);

}

if (e.getSource() == jb[5]) {

vez(5);

}

if (e.getSource() == jb[6]) {

vez(6);

}

if (e.getSource() == jb[7]) {

vez(7);

}

if (e.getSource() == jb[8]) {

vez(8);

}

if (e.getSource() == newGame) {

reset(0);

}

}

// METODO PARA REINICIAR JOGO

public void reset(int reset) {

jb[0].setEnabled(true);

jb[1].setEnabled(true);

jb[2].setEnabled(true);

jb[3].setEnabled(true);

jb[4].setEnabled(true);

jb[5].setEnabled(true);

jb[6].setEnabled(true);

jb[7].setEnabled(true);

jb[8].setEnabled(true);

quem = 0;

orientacao.setText("Vez do Jogador 1");

jb[1].setText("");

jb[2].setText("");

jb[3].setText("");

jb[4].setText("");

jb[5].setText("");

jb[6].setText("");

jb[7].setText("");

jb[8].setText("");

jb[0].setText("");

jb[0].setBackground(null);

jb[1].setBackground(null);

jb[2].setBackground(null);

jb[3].setBackground(null);

jb[4].setBackground(null);

jb[5].setBackground(null);

jb[6].setBackground(null);

jb[7].setBackground(null);

jb[8].setBackground(null);

}

// metodo logico para decidir a vez do jogador e atribuir e verificar sua

// jogada

public void vez(int args) {

String Elemento;

if (quem == 0) {

Elemento = "X";

quem = 1;

orientacao.setText("Vez do Jogador 2");

contador++;

} else {

Elemento = "O";

quem = 0;

orientacao.setText("Vez do Jogador 1");

contador++;

}

jb[args].setFont(f);

jb[args].setText(Elemento);

jb[args].setEnabled(false);

possibilidades(Elemento);

}

// metodo para verificar possibilidades de ganho

public void possibilidades(String Elemento) {

// verticais

if ((jb[0].getText().equals(Elemento))

&& (jb[3].getText().equals(Elemento))

&& (jb[6].getText().equals(Elemento))) {

jb[0].setBackground(Color.blue);

jb[3].setBackground(Color.blue);

jb[6].setBackground(Color.blue);

ganhador(Elemento);

contador = 0;

}

if ((jb[1].getText().equals(Elemento))

&& (jb[4].getText().equals(Elemento))

&& (jb[7].getText().equals(Elemento))) {

jb[1].setBackground(Color.blue);

jb[4].setBackground(Color.blue);

jb[7].setBackground(Color.blue);

ganhador(Elemento);

contador = 0;

}

if ((jb[2].getText().equals(Elemento))

&& (jb[5].getText().equals(Elemento))

&& (jb[8].getText().equals(Elemento))) {

jb[2].setBackground(Color.blue);

jb[5].setBackground(Color.blue);

jb[8].setBackground(Color.blue);

ganhador(Elemento);

contador = 0;

}

// Horizontais

if ((jb[0].getText().equals(Elemento))

&& (jb[1].getText().equals(Elemento))

&& (jb[2].getText().equals(Elemento))) {

jb[0].setBackground(Color.blue);

jb[1].setBackground(Color.blue);

jb[2].setBackground(Color.blue);

ganhador(Elemento);

contador = 0;

}

if ((jb[3].getText().equals(Elemento))

&& (jb[4].getText().equals(Elemento))

&& (jb[5].getText().equals(Elemento))) {

jb[3].setBackground(Color.blue);

jb[4].setBackground(Color.blue);

jb[5].setBackground(Color.blue);

ganhador(Elemento);

contador = 0;

}

if ((jb[6].getText().equals(Elemento))

&& (jb[7].getText().equals(Elemento))

&& (jb[8].getText().equals(Elemento))) {

jb[6].setBackground(Color.blue);

jb[7].setBackground(Color.blue);

jb[8].setBackground(Color.blue);

ganhador(Elemento);

contador = 0;

}

// Verticais

if ((jb[0].getText().equals(Elemento))

&& (jb[4].getText().equals(Elemento))

&& (jb[8].getText().equals(Elemento))) {

jb[0].setBackground(Color.blue);

jb[4].setBackground(Color.blue);

jb[8].setBackground(Color.blue);

ganhador(Elemento);

contador = 0;

}

if ((jb[2].getText().equals(Elemento))

&& (jb[4].getText().equals(Elemento))

&& (jb[6].getText().equals(Elemento))) {

jb[2].setBackground(Color.blue);

jb[4].setBackground(Color.blue);

jb[6].setBackground(Color.blue);

ganhador(Elemento);

contador = 0;

}

if (contador == 9) {

jb[0].setBackground(Color.RED);

jb[1].setBackground(Color.RED);

jb[2].setBackground(Color.RED);

jb[3].setBackground(Color.RED);

jb[4].setBackground(Color.RED);

jb[5].setBackground(Color.RED);

jb[6].setBackground(Color.RED);

jb[7].setBackground(Color.RED);

jb[8].setBackground(Color.RED);

ganhador("velha");

}

}

// METODO QUE IMPRIME NA TELA O GANHADOR

public void ganhador(String Elemento) {

jb[0].setEnabled(false);

jb[1].setEnabled(false);

jb[2].setEnabled(false);

jb[3].setEnabled(false);

jb[4].setEnabled(false);

jb[5].setEnabled(false);

jb[6].setEnabled(false);

jb[7].setEnabled(false);

jb[8].setEnabled(false);

if (Elemento == "X") {

orientacao.setText("Jogador 1 Venceu!");

JOptionPane.showMessageDialog(null, "Jogador 1 VENCEU!!!!");

}

if (Elemento == "O") {

orientacao.setText("Jogador 2 Venceu!");

JOptionPane.showMessageDialog(null, "Jogador 2 VENCEU!!!!");

}

if (Elemento == "velha") {

JOptionPane.showMessageDialog(null, "Deu velha!!!!");

}

}}APENDICE A - Cdigo-fonte do jogo da velha}

//metodo logico para decidir a vez do jogador e atribuir e verificar sua jogada

public void vez(int args){

int quem=0;

String Elemento;

if(quem==0){

Elemento="X";

quem=1;

orientacao.setText("Vez do Jogador 2");

contador++;

}

else{

Elemento="O";

quem=0;

orientacao.setText("Vez do Jogador 1");

contador++;

}

jb[args].setFont(f);

jb[args].setText(Elemento);

jb[args].setEnabled(false);

possibilidades(Elemento);

}

if((jb[0].getText().equals(Elemento))&&(jb[4].getText().equals(Elemento))&& (jb[8].getText().equals(Elemento))){

jb[0].setBackground(Color.blue);

jb[4].setBackground(Color.blue);

jb[8].setBackground(Color.blue);

ganhador(Elemento);

contador=0;

public void ganhador(String Elemento){

jb[0].setEnabled(false);

jb[1].setEnabled(false);

jb[2].setEnabled(false);

jb[3].setEnabled(false);

jb[4].setEnabled(false);

jb[5].setEnabled(false);

jb[6].setEnabled(false);

jb[7].setEnabled(false);

jb[8].setEnabled(false);

if(Elemento=="X"){

orientacao.setText("Jogador 1 Venceu!");

JOptionPane.showMessageDialog(null,"Jogador 1 VENCEU!!!!");

}

if(Elemento=="O"){

orientacao.setText("Jogador 2 Venceu!");

JOptionPane.showMessageDialog(null,"Jogador 2 VENCEU!!!!");

}

if(Elemento=="velha"){

JOptionPane.showMessageDialog(null,"Deu velha!!!!");

}

}