Ola a todos
Estou fazendo um programa do jogo da velha em java, utilizando uma interface para verificar o vencedor, mas esta apresentando erro e nao estou conseguindo detectar o problema, alguem poderia me ajudar nessa ? Segue o codigo feito.
public interface IJogoVelha {
char verificaGanhador(char[][] tabuleiro) throws Exception;
}
public class JogoDaVelha implements IJogoVelha {
String[]][] m= {{"1","2","3",},{"4","5","6"},{"7","8","9"}}; // matriz
public String Mostrar() {
for(int li=0;li<3;li++) {
for(int co=0; co<3; co++) {
System.out.printf(" " + m[li] [co]);
}
System.out.println("\n");
}
return null;
}
public boolean Valido(String p) {
for (int li=0; li<3; li++) {
for (int co=0; co<3; co++) {
if (m[li] [co].equals (p))
return true;
}
}
return false;
}
public void Jogada(String p, String j) {
if(p.equals("1"))
m[0][0] = j;
else if(p.equals("2"))
m[0] [1] = j;
else if(p.equals("3"))
m[0] [2] = j;
else if(p.equals("4"))
m[1] [0] = j;
else if(p.equals("5"))
m[1] [1] = j;
else if(p.equals("6"))
m[1] [2] = j;
else if(p.equals("7"))
m[2] [0] = j;
else if(p.equals("8"))
m[2] [1] = j;
else if(p.equals("9"))
m[2] [2] = j;
}
@Override
public char verificaGanhador(char[][] tabuleiro) throws Exception {
String[] t = new String[8]; // vetor
String vencedor = "null";
if (jogadas == 9) {
vencedor ="EMPATE";
}
// linhas verticais
T[0] = m[0] [0] + m[0] [1] + m[0] [2];
T[1] = m[1] [0] + m[1] [1] + m[1] [2];
T[2] = m[2] [0] + m[2] [1] + m[2] [2];
// linhas horizontais
T[3] = m[0] [0] + m[1] [0] + m[2] [0];
T[4] = m[0] [1] + m[1] [1] + m[2] [1];
T[5] = m[0] [2] + m[1] [2] + m[2] [2];
// linhas diagonais
T[6] = m[0] [0] + m[1] [1] + m[2] [1];
T[7] = m[0] [2] + m[1] [1] + m[2] [0];
for (int i = 0; i < T.length; i++) {
if(T[1].equals("XXX")) {
vencedor = "JOGADOR 1";
} else if (T[1].equals("OOO")) {
vencedor = "JOGADOR 2";
}
}
return vencedor;
}
}
import java.util.Scanner;
public class JogoVelha {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
JogoDaVelha jogo = new JogoDaVelha();
String posicao;
int valida = 0, Jogadas = 0;
while (true) {
System.out.println(":::::::: jogo da velha::::::::::");
jogo.Mostrar();
do { // inicia Jogador 1
System.out.print("Jogador 1, informe uma posicao: ");
posicao = ler.next();
while (!jogo.Valido(posicao)) {
System.out.println("Jogada invalida, tente novamente!");
System.out.print("Jogador 1, informe uma posicao: ");
posicao = ler.next();
valida = 0;
}
jogo.Jogada(posicao,"X");
valida = 1;
} while (valida == 0); //fim Jogador 1
Jogadas++;
valida = 0;
jogo.Mostrar();
if (!jogo.Ganhou(Jogadas).equals("null")) {
break; // para encerrar o primeiro while
}
do { // inicia Jogador 2
System.out.print("Jogador 2, informe uma posicao: ");
posicao = ler.next();
while (!jogo.Valido(posicao)) {
System.out.println("Jogada invalida, tente novamente!");
System.out.print("Jogador 2, informe uma posicao: ");
posicao = ler.next();
valida = 0;
}
jogo.Jogada(posicao,"O");
valida = 1;
jogo.Mostrar();
} while (valida == 0); //fim Jogador 2
Jogadas++;
valida = 0;
if (!jogo.Ganhou(Jogadas).equals("null")) {
break; // para encerrar o primeiro while
}
}
System.out.println("O" + jogo.Ganhou(Jogadas) + "venceu!");
}
}
Ola
Esta com erro no metodo verificaGanhador, pois foi dado uma variavel tipo char mas nao estou conseguindo utilizar corretamente pois estou em duvida para verificar o vencedor, segue o codigo.
public class JogoDaVelha implements IJogoVelha {
String [] [] m= {{"1","2","3",},{"4","5","6"},{"7","8","9"}}; // matriz
public String Mostrar() {
for(int li=0;li<3;li++) {
for(int co=0; co<3; co++) {
System.out.printf(" " + m[li] [co]);
}
System.out.println("\n");
}
return null;
} //-------------------------------------------------------
public boolean Valido(String p) {
for(int li=0; li<3; li++) {
for(int co=0; co<3; co++) {
if(m[li] [co].equals (p))
return true;
}
}
return false;
} //-----------------------------------------------------
public void Jogada(String p, String j) {
if(p.equals("1"))
m[0][0] = j;
else if(p.equals("2"))
m[0] [1] = j;
else if(p.equals("3"))
m[0] [2] = j;
else if(p.equals("4"))
m[1] [0] = j;
else if(p.equals("5"))
m[1] [1] = j;
else if(p.equals("6"))
m[1] [2] = j;
else if(p.equals("7"))
m[2] [0] = j;
else if(p.equals("8"))
m[2] [1] = j;
else if(p.equals("9"))
m[2] [2] = j;
} //----------------------------------------------------------------------------------------------
@Override
public char verificaGanhador(char[][] tabuleiro) throws Exception {
int jogadas;
String[] tabuleiro= new String[8]; // vetor
String vencedor= "null";
if(jogadas == 9) {
vencedor ="EMPATE";
} // linhas verticais
tabuleiro[0] = m[0] [0] + m[0] [1] + m[0] [2];
tabuleiro[1] = m[1] [0] + m[1] [1] + m[1] [2];
tabuleiro[2] = m[2] [0] + m[2] [1] + m[2] [2];
//-------------------------------------------------------------------------------------------
// linhas horizontabuleiroais
tabuleiro[3] = m[0] [0] + m[1] [0] + m[2] [0];
tabuleiro[4] = m[0] [1] + m[1] [1] + m[2] [1];
tabuleiro[5] = m[0] [2] + m[1] [2] + m[2] [2];
// ------------------------------------------------------------------------------------------
// linhas diagonais
tabuleiro[6] = m[0] [0] + m[1] [1] + m[2] [1];
tabuleiro[7] = m[0] [2] + m[1] [1] + m[2] [0];
for(int i=0; i<tabuleiro.length; i++) {
if(tabuleiro[1].equals("XXX")) {
vencedor="JOGADOR 1";
} else if (tabuleiro[1].equals("OOO")) {
vencedor="JOGADOR 2";
}
}
return vencedor;
} //----------------------------------------------------------------------------------------------
}
O teste no Main:
import java.util.Scanner;
public class JogoVelhaMain {
public static void main(String[] args) {
Scanner ler= new Scanner(System.in);
JogoDaVelha jogo=new JogoDaVelha();
String posicao;
int valida=0, Jogadas=0;
while(true) { //--------------------------------------------------------------
System.out.println(":::::::: jogo da velha::::::::::");
jogo.Mostrar();
do { // inicia Jogador 1 ----------------------------------------------------
System.out.print("Jogador 1, informe uma posicao: ");
posicao=ler.next();
while(!jogo.Valido(posicao)){
System.out.println("Jogada invalida, tente novamente!");
System.out.print("Jogador 1, informe uma posicao: ");
posicao=ler.next();
valida=0;
}
jogo.Jogada(posicao,"X");
valida=1;
} while(valida==0); //fim Jogador 1 ----------------------------------------------
Jogadas++;
valida=0;
jogo.Mostrar();
if(!jogo.Ganhou(Jogadas).equals("null")) {
break; // para encerrar o primeiro while
}
do { // inicia Jogador 2 ----------------------------------------------------
System.out.print("Jogador 2, informe uma posicao: ");
posicao=ler.next();
while(!jogo.Valido(posicao)){
System.out.println("Jogada invalida, tente novamente!");
System.out.print("Jogador 2, informe uma posicao: ");
posicao=ler.next();
valida=0;
}
jogo.Jogada(posicao,"O");
valida=1;
jogo.Mostrar();
} while(valida==0); //fim Jogador 2 ----------------------------------------------
Jogadas++;
valida=0;
if(!jogo.Ganhou(Jogadas).equals("null")) {
break; // para encerrar o primeiro while
}
} //-------------------------------------------------------------------------------------
System.out.println("O" + jogo.Ganhou(Jogadas) + "venceu!");
}
}
Como é que você verifica o ganhador de um jogo da velha?
Verificando se tem 3 símbolos iguais numa linha, numa coluna ou numa diagonal.
Implementação da interface:
public class JogoDaVelha implements IJogoVelha {
@Override
public char verificaGanhador(char[][] tabuleiro) {
int linha = verificaLinhas(tabuleiro);
if (linha != -1) {
return tabuleiro[linha][0];
}
int coluna = verificaColunas(tabuleiro);
if (coluna != -1) {
return tabuleiro[0][coluna];
}
int diagonal = verificaDiagonais(tabuleiro);
if (diagonal != -1) {
return tabuleiro[diagonal][diagonal];
}
return 0;
}
private int verificaDiagonais(char[][] tabuleiro) {
if (tabuleiro[0][0] == tabuleiro[1][1] && tabuleiro[1][1] == tabuleiro[2][2]) {
return 1;
}
if (tabuleiro[0][2] == tabuleiro[1][1] && tabuleiro[1][1] == tabuleiro[2][0]) {
return 1;
}
return -1;
}
private int verificaColunas(char[][] tabuleiro) {
for (int col = 0; col < 3; col++) {
if (tabuleiro[0][col] == tabuleiro[1][col] && tabuleiro[1][col] == tabuleiro[2][col]) {
return col;
}
}
return -1;
}
private int verificaLinhas(char[][] tabuleiro) {
for (int lin = 0; lin < 3; lin++) {
if (tabuleiro[lin][0] == tabuleiro[lin][1] && tabuleiro[lin][1] == tabuleiro[lin][2]) {
return lin;
}
}
return -1;
}
}
Teste da implementação:
public class Teste {
public static void main(String[] args) {
JogoDaVelha jogoDaVelha= new JogoDaVelha();
char[][] tabuleiro = new char[][] {
new char[] {'X', 'O', 'X'},
new char[] {'O', 'O', 'X'},
new char[] {'X', 'X', 'O'},
};
char ganhador = jogoDaVelha.verificaGanhador(tabuleiro);
System.out.println("Ganhador: " + ganhador);
tabuleiro = new char[][] {
new char[] {'O', 'X', ' '},
new char[] {'O', 'O', ' '},
new char[] {'X', 'X', 'O'},
};
ganhador = jogoDaVelha.verificaGanhador(tabuleiro);
System.out.println("Ganhador: " + ganhador);
tabuleiro = new char[][] {
new char[] {'X', 'X', 'X'},
new char[] {' ', 'O', ' '},
new char[] {'X', 'O', 'O'},
};
ganhador = jogoDaVelha.verificaGanhador(tabuleiro);
System.out.println("Ganhador: " + ganhador);
}
}
Ola
Obrigado pela dica, vou estar esse caminho que voce orientou !