Estou um com dificuldade com o meu código em java. Quando o usuário pede pra continuar o jogo, ele deveria ser resetado, e isso acontece, mas apenas visualmente é resetado.
import javax.swing.JOptionPane;
public class JogoDaVelha {
public static void main(String[] args) {
String[][] velha = new String[4][4];
String x = " X |", bola ="O |",c = null, j2, j1;
int linha = 1, coluna = 0, pontoP1 = 0, pontoP2 = 0, cont = 1;
boolean p1 = true, p2 = false, preen = false;
boolean ganhador1 = false;
boolean ganhador2 = false;
/* Inicio do jogo*/
JOptionPane.showMessageDialog(null, "Jogo da Véia"); // primeira mensagem
j1 = JOptionPane.showInputDialog("Nome do jogador que vai usar o (X):");
j2 = JOptionPane.showInputDialog("Nome do jogador que vai usar o (O):");
/* Formando o jogo da velha*/
int result = 0;
String tab = "";
String matriz="";
velha[0][0] = "#";
velha[0][1] = " | A";
velha[0][2] = " | B";
velha[0][3] = " | C";
velha[1][0] = "1 | ";
velha[2][0] = "2 | ";
velha[3][0] = "3 | ";
for (int i = 0; i < 4; i++) {
tab += "\n";
matriz +="\n";
for (int j = 0; j < 4; j++) {
if (velha[i][j] == null) {
velha[i][j] = " | ";
velha[1][3] = " ";
velha[2][3] = " ";
velha[3][3] = " ";
}
tab += velha[i][j];
matriz+=velha[i][j];
}
}
do {// primeiro do-while, pede para continuar
boolean ganhou = false, lin = false;
do {// segundo do-while, faz o jogo continuar até todas as posiçõees serem completas
if (p1) { // Se p1 for true, vai aparecer essa mensagem
JOptionPane.showMessageDialog(null, "Jogue " + j1);
} else {// Caso contrario, essa
JOptionPane.showMessageDialog(null, "Jogue " + j2);
}
if (p1) {
do { // caso o usuário digite onde já tem, esse do-while vai repetir
do { // do-while linha
linha = Integer.parseInt(JOptionPane.showInputDialog(j1 + "\n" + tab + "\n" + "Entre com a linha"));
if ((linha <= 0) || (linha >= 4)) {// vai repetir até estar entre 1 e 3
lin = true;
JOptionPane.showMessageDialog(null, "Digite uma linha valida"); // essa mensagem vai aparecer
} else {
lin = false;// caso contrario, não vai aparecer
}
} while (lin != false);// fim do-while linha
do { // do-while coluna
c = JOptionPane.showInputDialog(j1 + "\n" + tab + "\n" + "Entre com a coluna");
if ((c.equalsIgnoreCase("A")) || (c.equalsIgnoreCase("B")) || (c.equalsIgnoreCase("C"))) {
lin = false;
} else {
lin = true;
JOptionPane.showMessageDialog(null, "Digite uma coluna valida");
}
} while (lin != false); // fim do-while coluna
if (c.equalsIgnoreCase("A")) {
coluna = 1;
} else if (c.equalsIgnoreCase("B")) {
coluna = 2;
} else {
coluna = 3;
}
/* else-if preenchido */
if (velha[linha][coluna].equals(x)||velha[linha][coluna].equals(bola)) {
JOptionPane.showMessageDialog(null, "Digite alguma localização não preenchida");
preen = true;
}else {
velha[linha][coluna] = x; // isso vai previnir que bolinha seja atribuida na localização
cont++; // cont vai contar para dar velha
System.out.println(cont);
}
} while (preen != false);
tab = velha[0][0] + velha[0][1] + velha[0][2] + velha[0][3] + "\n" + velha[1][0] + velha[1][1]+ velha[1][2] + velha[1][3] + "\n" + velha[2][0] + velha[2][1] + velha[2][2]
+ velha[2][3] + "\n" + velha[3][0] + velha[3][1] + velha[3][2] + velha[3][3];
/* Caso três localizações em qualquer direção esteja preenchida */
if ((velha[1][1] == x) && (velha[1][2] == x) && (velha[1][3] == x)
|| (velha[2][1] == x) && (velha[2][2] == x) && (velha[2][3] == x)
|| (velha[3][1] == x) && (velha[3][2] == x) && (velha[3][3] == x)
|| (velha[1][1] == x) && (velha[2][2] == x) && (velha[3][3] == x)
|| (velha[1][1] == x) && (velha[2][1] == x) && (velha[3][1] == x)
|| (velha[1][2] == x) && (velha[2][2] == x) && (velha[3][2] == x)
|| (velha[1][3] == x) && (velha[2][3] == x) && (velha[3][3] == x)
|| (velha[1][3] == x) && (velha[2][2] == x) && (velha[3][1] == x)) {
pontoP1++; // p1 vai ganhar um ponto
ganhou = true;
ganhador1 = true;
/* essas mensagens vão aparecer */
JOptionPane.showMessageDialog(null, "Fim de Jogo! \n" + j1 + " É o vencedor!");
JOptionPane.showMessageDialog(null, j1 + " X " + j2 + "\n" + pontoP1 + " "+" " + pontoP2);
break; // O while vai parar
}
preen = false; //preen ta ganhando false para avaliar o player 2
} else if (p2) { // caso o p1 for false
do {
do {
linha = Integer.parseInt(JOptionPane.showInputDialog(j2 + "\n" + tab + "\n" + "Entre com a linha"));
if ((linha <= 0) || (linha >= 4)) {// vai repetir até estar entre 1 e 3
lin = true;
JOptionPane.showMessageDialog(null, "Digite uma linha valida"); // essa mensagem vai aparecer
} else {
lin = false;// caso contrario, não vai aparecer
}
} while (lin != false);// fim do-while linha
do { // do-while coluna
c = JOptionPane.showInputDialog(j1 + "\n" + tab + "\n" + "Entre com a coluna");
if ((c.equalsIgnoreCase("A")) || (c.equalsIgnoreCase("B")) || (c.equalsIgnoreCase("C"))) {
lin = false;
} else {
lin = true;
JOptionPane.showMessageDialog(null, "Digite uma coluna valida");
}
} while (lin != false); // vai repetir
// vai converter a string para int
if (c.equalsIgnoreCase("A")) {
coluna = 1;
} else if (c.equalsIgnoreCase("B")) {
coluna = 2;
} else if (c.equalsIgnoreCase("C")) {
coluna = 3;
} // fim else coluna
/* else-if preenchido */
if (velha[linha][coluna].equals(x)||velha[linha][coluna].equals(bola)) { //se onde ele digitar esta preenchido
JOptionPane.showMessageDialog(null, "Digite alguma localização não preenchida"); // essa mensagem vai aparecer
preen = true;
}else {
velha[linha][coluna] = bola; //caso esteja livre, a bolinha vai ser atribuida ao jogo da velha
cont++; // cont vai contar para dar velha
System.out.println(cont);
preen = false;
}
} while (preen != false);
tab = velha[0][0] + velha[0][1] + velha[0][2] + velha[0][3] + "\n" + velha[1][0] + velha[1][1]+ velha[1][2] + velha[1][3] + "\n" + velha[2][0] + velha[2][1] + velha[2][2]
+ velha[2][3] + "\n" + velha[3][0] + velha[3][1] + velha[3][2] + velha[3][3]; //tab vai ser atualizado
} // fim else-if p2
/* verificação se o player 2 é o ganhador de alguma forma*/
if ((velha[1][1] == bola) && (velha[1][2] == bola) && (velha[1][3] == bola)
|| (velha[2][1] == bola) && (velha[2][2] == bola) && (velha[2][3] == bola)
|| (velha[3][1] == bola) && (velha[3][2] == bola) && (velha[3][3] == bola)
|| (velha[1][1] == bola) && (velha[2][2] == bola) && (velha[3][3] == bola)
|| (velha[1][1] == bola) && (velha[2][1] == bola) && (velha[3][1] == bola)
|| (velha[1][2] == bola) && (velha[2][2] == bola) && (velha[3][2] == bola)
|| (velha[1][3] == bola) && (velha[2][3] == bola) && (velha[3][3] == bola)
|| (velha[1][3] == bola) && (velha[2][2] == bola) && (velha[3][1] == bola)) {
ganhou = true;
ganhador2 = true;
pontoP2++; // O jogador vai ganhar um ponto
JOptionPane.showMessageDialog(null, "Fim de Jogo! \n" + j2 + " É o vencedor!");
JOptionPane.showMessageDialog(null, j1 + " X " + j2 + "\n"
+ pontoP1 + " "+" " + pontoP2);
break; // O while vai parar
} // fim do if
JOptionPane.showMessageDialog(null,tab);
if ((velha[1][1] == x) && (velha[1][2] == x) && (velha[1][3] == x)
|| (velha[2][1] == x) && (velha[2][2] == x) && (velha[2][3] == x)
|| (velha[3][1] == x) && (velha[3][2] == x) && (velha[3][3] == x)
|| (velha[1][1] == x) && (velha[2][2] == x) && (velha[3][3] == x)
|| (velha[1][1] == x) && (velha[2][1] == x) && (velha[3][1] == x)
|| (velha[1][2] == x) && (velha[2][2] == x) && (velha[3][2] == x)
|| (velha[1][3] == x) && (velha[2][3] == x) && (velha[3][3] == x)
|| (velha[1][3] == x) && (velha[2][2] == x) && (velha[3][1] == x)) {
pontoP1++; // p1 vai ganhar um ponto
ganhou = true;
ganhador1 = true;
/* essas mensagens vão aparecer */
JOptionPane.showMessageDialog(null, "Fim de Jogo! \n" + j1 + " É o vencedor!");
JOptionPane.showMessageDialog(null, j1 + " X " + j2 + "\n "+ pontoP1 +" X " + pontoP2);
break; // O while vai parar
}else if ((velha[1][1] == bola) && (velha[1][2] == bola) && (velha[1][3] == bola)
|| (velha[2][1] == bola) && (velha[2][2] == bola) && (velha[2][3] == bola)
|| (velha[3][1] == bola) && (velha[3][2] == bola) && (velha[3][3] == bola)
|| (velha[1][1] == bola) && (velha[2][2] == bola) && (velha[3][3] == bola)
|| (velha[1][1] == bola) && (velha[2][1] == bola) && (velha[3][1] == bola)
|| (velha[1][2] == bola) && (velha[2][2] == bola) && (velha[3][2] == bola)
|| (velha[1][3] == bola) && (velha[2][3] == bola) && (velha[3][3] == bola)
|| (velha[1][3] == bola) && (velha[2][2] == bola) && (velha[3][1] == bola)) {
ganhou = true;
ganhador2 = true;
pontoP2++; // O jogador vai ganhar um ponto
JOptionPane.showMessageDialog(null, "Fim de Jogo! \n" + j2 + " é o vencedor!");
JOptionPane.showMessageDialog(null, j1 + " X " + j2 + "\n "+ pontoP1 +" X " + pontoP2);
break; // O while vai parar
} else if (cont == 9) { // se cont for igual a 10 e nenhum if de vencedor for ativado, deu velha e vai entrar nesse if
JOptionPane.showMessageDialog(null, "Fim de jogo!\n Não houve acertos!"); // essa mensagem vai exibida
break;
}
// aqui vai troca os jogadores
if (p1) {
p1 = false;
p2 = true;
} else {
p2 = false;
p1 = true;
}
} while (ganhou != true || cont == 9);// segundo do-while, faz o jogo continuar até todas as posições serem
// completas
if (cont == 9) { // se cont for igual a 10 e nenhum if de vencedor for ativado, deu velha e vai entrar nesse if
JOptionPane.showMessageDialog(null, "Fim de jogo!\n Não houve acertos!"); // essa mensagem vai exibida
result = JOptionPane.showConfirmDialog(null, "Deseja continuar ? ", "Continua",JOptionPane.YES_NO_OPTION);
if(result == JOptionPane.YES_OPTION) {
tab = matriz;
}else {
break;
}
} else { // caso contrário, vai perguntar para continuar
result = JOptionPane.showConfirmDialog(null, "Deseja continuar ? ", "Continua",JOptionPane.YES_NO_OPTION);
if(result == JOptionPane.YES_OPTION) {
tab = matriz;
}
if(ganhador1) {
p1 = false;
p2 = true;
}else if(ganhador2) {
p2 = false;
p1= true;
}
} // fim else
} while (result == JOptionPane.YES_OPTION);// primeiro do-while, pede para continuar
} // fim public void main
} // fim class