Olá pessoal, estou fazendo um exercício de criação de um jogo da velha. Segue o código:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
jogoDaVelha tabuleiro = new jogoDaVelha();
System.out.println("Iniciando jogo");
tabuleiro.nomeJogador1();
tabuleiro.nomeJogador2();
System.out.println(tabuleiro.nomeJogador1 + " jogará com o símbolo: 'X'");
System.out.println(tabuleiro.nomeJogador2 + " jogará com o símbolo: 'O'");
char simbolo = 'X';
boolean jogadaValida = false;
while(!jogadaValida) {
if(tabuleiro.jogada % 2 == 1) {
System.out.println("Vez de " + tabuleiro.nomeJogador1 + ". Escolha linha e coluna 1-3.");
simbolo = 'X';
}else {
System.out.println("Vez de " + tabuleiro.nomeJogador2 + ". Escolha linha e coluna 1-3");
simbolo = 'O';
}
}
boolean linhaValida = false;
int linha = 0, coluna = 0;
while(!linhaValida) {
System.out.println("Entre com a linha 1, 2 ou 3:");
linha = scan.nextInt();
if(linha >= 1 && linha <= tabuleiro.tamanhoTab1) {
linhaValida = true;
}else {
System.out.println("Linha inexistente, tente novamente");
}
}
boolean colunaValida = false;
while(!colunaValida) {
System.out.println("Entre com a coluna 1, 2 ou 3:");
coluna = scan.nextInt();
if(coluna >= 1 && coluna <= tabuleiro.tamanhoTab2) {
colunaValida = true;
}else {
System.out.println("Coluna inexistente, tente novamente");
}
}
linha--;
coluna--;
if(tabuleiro.tabuleiro[linha][coluna] == 'X' || tabuleiro.tabuleiro[linha][coluna] == 'O') {
System.out.println("Jogada inválida, tente novamente.");
}else {
tabuleiro.tabuleiro[linha][coluna] = simbolo;
tabuleiro.jogada++;
}
for(int i = 0; i < tabuleiro.tabuleiro.length; i++) {
for(int j = 0; j < tabuleiro.tabuleiro[i].length; j++) {
System.out.print(tabuleiro.tabuleiro[i][j] + " | ");
}
System.out.println();
}
if((tabuleiro.tabuleiro[0][0] == 'X' && tabuleiro.tabuleiro[0][1] == 'X' && tabuleiro.tabuleiro[0][2] == 'X') || //Horizontal 1
(tabuleiro.tabuleiro[1][0] == 'X' && tabuleiro.tabuleiro[1][1] == 'X' && tabuleiro.tabuleiro[1][2] == 'X') || //Horizontal 2
(tabuleiro.tabuleiro[2][0] == 'X' && tabuleiro.tabuleiro[2][1] == 'X' && tabuleiro.tabuleiro[2][2] == 'X') || //Horizontal 3
(tabuleiro.tabuleiro[0][0] == 'X' && tabuleiro.tabuleiro[1][0] == 'X' && tabuleiro.tabuleiro[2][0] == 'X') || //Vertical 1
(tabuleiro.tabuleiro[0][1] == 'X' && tabuleiro.tabuleiro[1][1] == 'X' && tabuleiro.tabuleiro[2][1] == 'X') || //Vertical 2
(tabuleiro.tabuleiro[0][2] == 'X' && tabuleiro.tabuleiro[1][2] == 'X' && tabuleiro.tabuleiro[2][2] == 'X') || //Vertical 3
(tabuleiro.tabuleiro[0][0] == 'X' && tabuleiro.tabuleiro[1][1] == 'X' && tabuleiro.tabuleiro[2][2] == 'X') || //Diagonal
(tabuleiro.tabuleiro[0][2] == 'X' && tabuleiro.tabuleiro[1][1] == 'X' && tabuleiro.tabuleiro[2][0] == 'X')) {//Diagonal inversa
jogadaValida = true;
System.out.println("Parabéns " + tabuleiro.nomeJogador1 + ", você ganhou!");
}else if((tabuleiro.tabuleiro[0][0] == 'O' && tabuleiro.tabuleiro[0][1] == 'O' && tabuleiro.tabuleiro[0][2] == 'O') || //Horizontal 1
(tabuleiro.tabuleiro[1][0] == 'O' && tabuleiro.tabuleiro[1][1] == 'O' && tabuleiro.tabuleiro[1][2] == 'O') || //Horizontal 2
(tabuleiro.tabuleiro[2][0] == 'O' && tabuleiro.tabuleiro[2][1] == 'O' && tabuleiro.tabuleiro[2][2] == 'O') || //Horizontal 3
(tabuleiro.tabuleiro[0][0] == 'O' && tabuleiro.tabuleiro[1][0] == 'O' && tabuleiro.tabuleiro[2][0] == 'O') || //Vertical 1
(tabuleiro.tabuleiro[0][1] == 'O' && tabuleiro.tabuleiro[1][1] == 'O' && tabuleiro.tabuleiro[2][1] == 'O') || //Vertical 2
(tabuleiro.tabuleiro[0][2] == 'O' && tabuleiro.tabuleiro[1][2] == 'O' && tabuleiro.tabuleiro[2][2] == 'O') || //Vertical 3
(tabuleiro.tabuleiro[0][0] == 'O' && tabuleiro.tabuleiro[1][1] == 'O' && tabuleiro.tabuleiro[2][2] == 'O') || //Diagonal
(tabuleiro.tabuleiro[0][2] == 'O' && tabuleiro.tabuleiro[1][1] == 'O' && tabuleiro.tabuleiro[2][0] == 'O')) {//Diagonal inversa
jogadaValida = true;
System.out.println("Parabéns " + tabuleiro.nomeJogador2 + ", você ganhou!");
}else if(tabuleiro.jogada > 9) {
jogadaValida = true;
System.out.println(tabuleiro.nomeJogador1 + " e " + tabuleiro.nomeJogador2 + ", vocês empataram!");
}
}
}
O primeiro while, não permite que ele prossiga o resto do código, fica num loop infinito do IF, visto que a variável “jogada” só vai mudar se o código continuar.
Tenho o mesmo código, feito depois, mas sem usar outra classe, o código todo numa classe só, e funciona essa parte do while normalmente. Segue o outro código:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
char[][] jogoVelha = new char[3][3];
System.out.println("Jogador 1 = X");
System.out.println("Jogador 2 = O");
boolean ganhou = false;
int jogada = 1;
char sinal;
int linha = 0, coluna = 0;
while (!ganhou){
if (jogada % 2 == 1){ //jogador 1
System.out.println("Vez do jogador 1. Escolha linha e coluna (1-3).");
sinal = 'X';
} else {
System.out.println("Vez do jogador 2. Escolha linha e coluna (1-3).");
sinal = 'O';
}
Alguém poderia me dizer porque o segundo código ele continua para o próximo while e no primeiro não?
Sei que poderia usar outras formas de fazer esse laço prosseguir, mas como estou estudando, seria interessante entender.