Mais um jogo da velha (o meu)

27 respostas
adrianoms

gotaria de ver oque voces achan disso aqui, tenten ganhar no modo contra a maquina eu mão consegui se algen consegui me avise para eu tentar nelhorar.

desenvolvi no NetBeans sem usar o editor visual

quando estiver 100% disponibiliso os fontes [color=#00aa00]//bem comentados em portuges[/color]

27 Respostas

V

Ae mano…
Seu jogo fico otimo…otimo mesmo…

Eu ganhei…segue imagem em anexo…falow dom!
PARABENS pelo jogo…curti demais…


S

Tb ganhei

JMan

Bom jogo, ficou da hora msm!!!



K

Parabéns! Seu jogo ficou ótimo. Muito bom mesmo.

pena que só deu para jogar uma vez, pq se me pegam aqui no trabalho já era :smiley:

Só uma dica boba, quando der empate trocar a palavra GANHO por GANHOU. do resto está uma maravilha.

boaglio

Legal o joguinho, só uma sugestão:

Deixe uma opção fixa na tela se o jogo é de 1 ou 2 jogadores. É chato toda vez que vc for jogar um novo jogo, ter que informar que é contra o computador. Assim se eu for jogar 10 vezes eu informo só 1 vez que o jogo é contra o computador. DO jeito que está hoje eu preciso fazer isso 10 vezes.

adrianoms

Jogo da Velha Pro V0.9 Update 1

  • Boa ideia a que boaglio sugeriu então eu impremetei.

  • Tamben foi feita a coreção gramatical sugerida por klebergf (meu portuges é um lixo tenho que menhorar).

  • Ainda é posivel ganha faciu quando o jogador1 coneça jogando e joga em um dos quatro cantos e a maquina tamben não é invencivel quando ela coneça jogando.

danieldestro

Legal! parabens.

Lembrei que fiz um joguinho assim uma vez: http://javadavelha.dev.java.net

abraços

adrianoms

Jogo da Velha Pro V0.9 Update 2

  • Agora é impossível(impossível mesmo) vencer quando a maquina começa jogando.
    *Foi alterada a forma de mudar o LookAndFeel do Aplicativo, agora o padrão é o usado pelo Sistema Operacional (mão importa qual seja, antes funcionava apenas no Ruindows).
  • Foi corrigido um pequeno bug da versão 0.9_1(Existia uma possibilidade muito remota mas possível da maquina joga onde o jogador1 já tivesse jogado);

Obs: provavelmente será lançada a versão 1.0 final quando eu conseguir implementar sons nos botões se alguém conhecer um bom tutorial fora os da Sun para fazer isso eu ficaria muito grato.

boaglio

Achei um bug:

Se o computador começa o jogo e vou jogando até ficar assim:

X O O
B X B
O X O

Agora é minha vez, eu jogo e fica assim:

X O O
B X X
O X O

Agora o computador deveria colocar no lugar que falta e acabar com
o jogo, mas ele não faz nada.

Aí eu clico em cima do espaço que falta e fica assim:

X O O
X X X
O X O

E ele ainda fala " O Jogador 1 ganhou", quando na realidade foi empate.

O correto seria assim:

X O O
O X X
O X O

danieldestro

Isso nunca seria empate!

boaglio

O espaço em branco foi ignorado pelo HTML, eu corrigi no post e coloquei B no lugar.

adrianoms

realmente pasou batido esse detale , chego em casa as 23:30 ,vou postar uma coreção

adrianoms

Jogo da Velha Pro V0.9 Update 2a

apenas foi feito a coreção do probrema citado acima

e é possivel empatar quando a maquiana começa jogando

Grinvon

Meu único jogo da velha que fiz foi em VB, e era multiplayer por socket :oops:

babyJava
Olá fiz um jogo da velha ebm legal ! ta ai !qualquer duvida é  postar!

import java.awt.<em>;

import java.awt.event.</em>;

import javax.swing.*;

/**

*/

//public class JogoDaVelha extends JFrame implements ActionListener

{

public JButton [][] botoes = {{null,null,null},{null,null,null},{null,null,null}};

public String jdv = X;

public JPanel p;

public int control = 0, control_1 = 0;

public int numLinhas = botoes[0].length;

public int numColunas = numLinhas;

public boolean acabou = false;

public ActionEvent myEvent;

public boolean empate = false;

public JLabel od;

public Container container;
public JMenu jogo, ajuda;

public JMenuItem novo, sair, sobre;

public JMenuBar menu;

public int contLV = 0, contCV = 0, indice = 0;
//public String vencedor = “”;

public JogoDaVelha()

{

container = this.getContentPane();
setTitle("Jogo Da Velha OBBPULS ++");   
     
  p = new JPanel();   
  p.setLayout(new GridLayout(3,3));   
     
  od = new JLabel(new ImageIcon("OutDoor.jpeg"));      
  container.add(od, BorderLayout.CENTER);

     
  //Configura a GUI. Os menus, e os botões através de um laço, o que economiza linhas de código rsrs.. Paulo Junior  
     
  Toolkit tk = Toolkit.getDefaultToolkit();   
  setIconImage(tk.getImage("iconJDV.jpeg"));

// TROCA A IMAGEM DO JAVA NA BARRA DE TITULO
	Image icon = Toolkit.getDefaultToolkit().getImage("asterisco.gif");
		this.setIconImage(icon);   
     
  menu = new JMenuBar();   
     
  jogo = new JMenu("Jogo");   
     novo = new JMenuItem("Novo Jogo...");   
     novo.addActionListener(this);   
  jogo.add(novo);   
  jogo.addSeparator();   
     sair = new JMenuItem("Sair");   
     sair.addActionListener(this);   
  jogo.add(sair);   
     
  ajuda = new JMenu("Sobre");   
     sobre = new JMenuItem("Sobre o Jogo da Velha OBBPLUS++");   
     sobre.addActionListener(this);   
  ajuda.add(sobre);   
     
     
  menu.add(jogo);   
 // menu.add(ajuda);   
     
  setJMenuBar(menu);   
  
  for(int j = 0; j < numLinhas; j++)   
  {   
     for(int i = 0; i < botoes[j].length; i++)   
     {   
        botoes[j][i] = new JButton("");   
        botoes[j][i].setBackground(Color.white);   
        botoes[j][i].setFont(new Font("Times new Romam",Font.PLAIN, 120));   
        botoes[j][i].setToolTipText("Casa número: " + String.valueOf(i + 1)    
        + " da linha " + String.valueOf(j + 1));   
        botoes[j][i].addActionListener(this);   
        p.add(botoes[j][i]);   
     }   
  }   
     
  setBounds(250,100,560,400);   
  setVisible(true);   
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
  setResizable(false);

}

public void actionPerformed(ActionEvent e)

{

this.myEvent = e;
if(e.getSource() == novo)   
  {   
     remove(od);   
     setBounds(200,50,650,550);   
     container.add(p,BorderLayout.CENTER);   
     acabou = false;   
     limpar();   
     setVisible(true);   
  }   
  else if(e.getSource() == sair)   
  {   
     System.exit(0);   
  }   
  else if(e.getSource() == sobre)   
  {      
     JOptionPane.showMessageDialog(null,"JOGO DA VELHA");
  }   
  else    
  {      
     configJDV();   
   }
}

public void configJDV()

{

int cont = 0;
if(!acabou)

{

for(int i = 0; i < botoes.length; i++)

{
for(int j = 0; j < botoes[i].length; j++)   
     {   
        if(myEvent.getSource() == botoes[i][j])   
        {      
           if(!botoes[i][j].getText().equals(""))   
           {   
              JOptionPane.showMessageDialog(this,"Jogue em outra posição...",   
              "[.:JOGUE EM OUTRO LUGAR!!!:.]",JOptionPane.ERROR_MESSAGE);   
           }   
           else  
           {   
              if(this.jdv == "X")   
              {   
                 this.jdv = "0";   
                 botoes[i][j].setForeground(Color.blue);   
              }   
                 
              else    
              {   
                 this.jdv = "X";   
                 botoes[i][j].setForeground(Color.red);   
              }   
                 
              botoes[i][j].setText(this.jdv);   
              vencedor = this.jdv;   
           }   
        }   
     }   
  }   
        
  /*********************************************************  
   *           VERIFICA LINHAS  
   *********************************************************/  
      
  if(   
     //Verfifica primeira linha   
     botoes[0][0].getText().equals(botoes[0][1].getText()) &&    
     botoes[0][1].getText().equals(botoes[0][2].getText()) &&    
     !botoes[0][0].getText().equals(""))   
     {   
        pintarLinha(0,vencedor);   
     }   
        
  else if(//Verfifica segunda linha   
     botoes[1][0].getText().equals(botoes[1][1].getText()) &&    
     botoes[1][1].getText().equals(botoes[1][2].getText()) &&    
     !botoes[1][0].getText().equals(""))   
     {   
        pintarLinha(1,vencedor);   
     }   
        
  else if(//Verfifica Terceira linha   
     botoes[2][0].getText().equals(botoes[2][1].getText()) &&    
     botoes[2][1].getText().equals(botoes[2][2].getText()) &&    
     !botoes[2][0].getText().equals(""))   
     {   
        pintarLinha(2,vencedor);   
     }   
        
  /*********************************************************  
   *           VERIFICA LINHAS  
   *********************************************************/  
      
  else if(   
     //Verfifica primeira coluna   
     botoes[0][0].getText().equals(botoes[1][0].getText()) &&    
     botoes[1][0].getText().equals(botoes[2][0].getText()) &&    
     !botoes[0][0].getText().equals(""))   
     {   
        pintarColuna(0,vencedor);   
     }   
        
   else if(//Verfifica segunda coluna   
     botoes[0][1].getText().equals(botoes[1][1].getText()) &&    
     botoes[1][1].getText().equals(botoes[2][1].getText()) &&    
     !botoes[0][1].getText().equals(""))   
     {   
        pintarColuna(1,vencedor);   
     }   
        
  else if(//Verfifica Terceira coluna   
     botoes[0][2].getText().equals(botoes[1][2].getText()) &&    
     botoes[1][2].getText().equals(botoes[2][2].getText()) &&    
     !botoes[0][2].getText().equals(""))   
     {   
        pintarColuna(2,vencedor);   
     
     }   
  else if(//Verfica as diagonais   
     botoes[0][0].getText().equals(botoes[1][1].getText()) &&    
     botoes[1][1].getText().equals(botoes[2][2].getText()) &&    
     !botoes[0][0].getText().equals(""))   
     {   
        pintarDiagonalPrinc();   
     }   
  else if(//Verfica as diagonais   
     botoes[2][0].getText().equals(botoes[0][2].getText()) &&    
     botoes[0][2].getText().equals(botoes[1][1].getText()) &&    
     !botoes[2][0].getText().equals(""))   
     {   
        pintarDiagonalSec();   
     
     }   
  else  
  {      
     //Verifica se o jogo terminou empatado   
     for(int i = 0; i < botoes.length; i++)   
     {   
        for(int j = 0; j < botoes.length; j++)   
        {   
           if(!botoes[i][j].getText().equals(""))   
           {   
              cont++;               
           }   
        }   
           if(cont == 9)   
           {   
              empatar();   
           }   
     }   
  }
}

else

{

JOptionPane.showMessageDialog(this,"[.:Reinicie o Jogo…:.]",“JOGO FINALIZADO!”,

JOptionPane.ERROR_MESSAGE);

}

}

public void empatar()

{

//Acaba o jogo!

this.acabou = true;
//Pinta de forma especial, para indicar o caso de empate!   
  for(int i = 0; i < botoes.length; i++)   
  {   
     for(int j = 0; j < botoes[i].length; j++)   
     {   
           botoes[i][j].setBackground(Color.black);   
           botoes[i][j].setForeground(Color.gray);   
     }   
  }   
     
  //Exibe mensagem de empate!   
  JOptionPane.showMessageDialog(this,"[.:Jogo Acabou empatado!:.]",   
  "EMPATE",JOptionPane.WARNING_MESSAGE);

}

public void pintarLinha(int indice, String vencedor)

{

//Acaba o jogo!

this.acabou = true;
//Pinta a linha do vencedor!   
  for(int i = 0; i < botoes[indice].length; i++)   
  {   
     botoes[indice][i].setBackground(Color.blue);   
     botoes[indice][i].setForeground(Color.white);   
  }   
     
  // os parabéns ao vencedor!   
  parabéns();
}

public void pintarColuna(int indice, String vencedor)

{

//Acaba o jogo!

this.acabou = true;
//Pinta a linha do vencedor!   
  for(int i = 0; i < botoes[indice].length; i++)   
  {   
     botoes[i][indice].setBackground(Color.blue);   
     botoes[i][indice].setForeground(Color.white);   
  }   
     
  // os parabéns ao vencedor!   
  parabéns();

}

public void pintarDiagonalPrinc()

{

//Acaba o jogo!

this.acabou = true;
for(int i = 0; i < botoes.length; i++)   
  {   
     for(int j = 0; j < botoes[1].length; j++)   
     {   
        if(j == i && j == 1)   
        {   
           botoes[i-1][j-1].setBackground(Color.blue);   
           botoes[i][j].setBackground(Color.blue);   
           botoes[i+1][j+1].setBackground(Color.blue);   
           botoes[i-1][j-1].setForeground(Color.white);   
           botoes[i][j].setForeground(Color.white);   
           botoes[i+1][j+1].setForeground(Color.white);   
        }   
     }   
  }   
     
  // os parabéns ao vencedor!   
  parabéns();

}

public void pintarDiagonalSec()

{

//Acaba o jogo!

this.acabou = true;
//Pinta a diagonal principal   
  for(int i = 0; i < botoes.length; i++)   
  {   
     for(int j = 0; j < botoes[i].length; j++)   
     {   
        if(j == i && j == 1)   
        {   
              botoes[0][i*2].setBackground(Color.blue);   
              botoes[i*2][0].setBackground(Color.blue);   
              botoes[i][j].setBackground(Color.blue);   
              botoes[0][i*2].setForeground(Color.white);   
              botoes[i*2][0].setForeground(Color.white);   
              botoes[i][j].setForeground(Color.white);   
        }   
     }   
  }   
     
  // os parabéns ao vencedor!   
  parabéns();
}

public boolean estáAcabado()

{

if(acabou)
return acabou;   
  else  
     
     acabou = false;   
           
     return acabou;

}

public void parabéns()

{

JOptionPane.showMessageDialog(this,vencedor + " Ganhou!",“PARABÉNS!!!”,

JOptionPane.WARNING_MESSAGE);

}
public void limpar()

{

for(int i = 0; i < botoes.length; i++)

{

for(int j = 0; j < botoes[i].length; j++)

{

botoes[i][j].setText("");

botoes[i][j].setBackground(Color.white);

}

}

}

public void setJDV()

{

if(this.control%2 == 0)

{

this.jdv = X;

}
else  
     
  this.jdv = "0";

}

/Desenvolvimento Paulo Roberto Luiz Junior!/

public static void main(String args[])

{

//new JogoDaVelha();

}

}
lina

Oi,
não consegui rodar o jar aqui no trabalho =/

Exception in thread "main" java.lang.UnsupportedClassVersionError: JogoDaVelhaFrame (Unsupported maj or.minor version 49.0) at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source)

fabim

lina:
Oi,
não consegui rodar o jar aqui no trabalho =/

Exception in thread "main" java.lang.UnsupportedClassVersionError: JogoDaVelhaFrame (Unsupported maj or.minor version 49.0) at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source)

lina,

c tem o jre 5 ou 6 instalado?

esse erro é tipico de qdo uma vm 1.3x ou 1.4x tenta rodar bytecodes da 5.0

lina

uhum…
to ligada, aqui no trabalho trabalhamos com 1.4

só em casa agora =)

Obrigada!

Tchauzin!

neohacker

Bom jogo parabéns…

S

adrianoms:

*Foi alterada a forma de mudar o LookAndFeel do Aplicativo, agora o padrão é o usado pelo Sistema Operacional (mão importa qual seja, antes funcionava apenas no Ruindows).

Aqui, no Kubuntu, ficou a mesma coisa do Swing. Não sei se dá pra fazer isso que você falou com Swing.

No mais, tá bem legal. Mas você podia analisar melhor as jogadas do computador. Jogo-da-velha é um jogo resolvido, dá pra programar o computador para ser invencível.

babyJava

o erro é da versão !! do seu java !

Luiz_Gustavo

Opa,

adrianoms, aproveitando seu tópico, gostaria de deixar aqui para a galera um joguinho q fiz quando estava começando a aprender Java.
Foi meu primeiro desafio pessoal em Java hehehe
O jogo tem originalmente 20 temas (chaves, placas de trânsito, carros, animais, etc…) mas fica muito grande colocar aqui com os 20 temas, então deixei apenas 2.
Agora estou usando o mesmo projeto para aprender JavaFX.
Se a galera gostar e se interessar pelos fontes (Swing) deixo aqui.

[]'s

ckitano

agora ja tenho coisas pra fazer na hora do almoço hihih
otimo jogo parabens cara!!!

R

ressucitei o topico. nao consigo ganhar da maquina, alguem tem conseguido?
mas na real ia falar do som, conseguiu botar o som? tenho um metodo, entre em contato.

se ainda estiver no forum. valeu…
aos outros, vale a pena conhecer o jogo.

to mandando meu jar do xadrez, avise se a imagem aparece, senao tenho que mandar separado.
só o pião do lado esquerdo acima, esta iniciando os movimentos, mas aí parei… para pensar. melhor

lina

raghy:
ressucitei o topico. nao consigo ganhar da maquina, alguem tem conseguido?
mas na real ia falar do som, conseguiu botar o som? tenho um metodo, entre em contato.

se ainda estiver no forum. valeu…
aos outros, vale a pena conhecer o jogo.

to mandando meu jar do xadrez, avise se a imagem aparece, senao tenho que mandar separado.
só o pião do lado esquerdo acima, esta iniciando os movimentos, mas aí parei… para pensar. melhor

Oi,

Só aparece o tabuleiro =D

Tchauzin!

R

opa, é verdade, esqueci de mandar as imagens, estão separadas…

ponha as imagens na pasta c:// alguma lógica para movimentação… tem algum algoritmo, alguma idéia para isso… estou tentando…
posso discutir a forma como estava fazendo isto, se interessar.

consigo inventar certas lógicas, “novas”, que funcionam, mas se discutir é melhor…

por exemplo, não sei como fazer o jogo de poker, mas eu fiz onde cada carta tem um número, então apartir disto são feito cálculos, enfim, tem que ser mais ou menos por aí… por outro lado os jogos formados,também são “entidades”… mas aqui o assunto é outro. valeu.

R

opa nao mandei de novo, ta aqui…

Criado 28 de maio de 2006
Ultima resposta 25 de abr. de 2011
Respostas 27
Participantes 16