Fiz esse código pensando em praticar um pouco o uso da interface gráfica que o Netbeans oferece, já que sou iniciante e estou tentando aprender mais, compliquei um pouco, utilizando a mudança de ícones e etc, mas esse não foi o grande problema. Aparentemente, todos os eventos parecem estar funcionando bem, mas não consigo entender porque o jogo da velha não mostra o resultado certo e anuncia ganhadores aleatórios em tempos aleatórios. O método jogada() foi implementado como action e o limpar() também, para começar um novo jogo.
Agradeço a quem puder analisar aquela parte da vitoria(), verificar() e me disser o que está errado.
package japp;
import javax.swing.JButton;
import javax.swing.JOptionPane;
public class jvelha extends javax.swing.JFrame {
private int jogador;
private int qtdeJogadas;
private int b[][] = new int[3][3];
private JButton botoes[] = new JButton[9];
public jvelha() {
initComponents();
jogador = 1;
qtdeJogadas = 0;
botoes[0] = jButton1;
botoes[1] = jButton2;
botoes[2] = jButton3;
botoes[3] = jButton4;
botoes[4] = jButton5;
botoes[5] = jButton6;
botoes[6] = jButton7;
botoes[7] = jButton8;
botoes[8] = jButton9;
}
public void jogada(JButton $botoes, int linha, int coluna) {
$botoes.setEnabled(false);
$botoes.setBorder(null);
qtdeJogadas++;
if (jogador==1) {
$botoes.setIcon(new javax.swing.ImageIcon(getClass().getResource("/japp/xis.jpg")));
jogador = 2;
verificar(1);
}
else {
$botoes.setIcon(new javax.swing.ImageIcon(getClass().getResource("/japp/bola.jpg")));
jogador = 1;
verificar(2);
}
b[linha][coluna] = jogador;
}
public void verificar(int $jogador){
if(vitoria($jogador) == true) {
JOptionPane.showMessageDialog(null, "O jogador "+$jogador+" ganhou a partida!", "Vitória", JOptionPane.INFORMATION_MESSAGE);
terminar();
}
else if(qtdeJogadas == 9) {
JOptionPane.showMessageDialog(null, "O jogo deu velha!", "Empate", JOptionPane.INFORMATION_MESSAGE);
}
}
public boolean vitoria(int $jogador) {
for (int i = 0; i < 3; i++) {
if (b[i][0] == $jogador && b[i][1] == $jogador && b[i][2] == $jogador) {
return (true);
}
if (b[0][i] == $jogador && b[1][i] == $jogador && b[2][i] == $jogador) {
return (true);
}
}
if(b[0][0] == $jogador && b[1][1] == $jogador && b[2][2] == $jogador){
return (true);
}
if(b[2][0] == $jogador && b[1][1] == $jogador && b[0][2] == $jogador){
return (true);
}
return (false);
}
public void terminar(){
for(int i=0; i<9; i++) {
botoes[i].setEnabled(false);
}
}
public void limpar(){
jogador = 1;
qtdeJogadas = 0;
for(int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
b[i][j] = 0;
}
}
for(int i=0; i<9; i++) {
botoes[i].setEnabled(true);
botoes[i].setIcon(new javax.swing.ImageIcon(getClass().getResource("/japp/fundobot.jpg")));
botoes[i].setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
}
}