Fiz alterações!
Tabuleiro
public class Tabuleiro {
public String[][] matriz;
public String[][] posicoes;
public Tabuleiro() {
posicoes = new String[3][3];
for (int i = 0; i < posicoes.length; i++) {
for (int j = 0; j < posicoes[i].length; j++) {
posicoes[i][j] = "";
}
}
}
public String getPosicao(int linha, int coluna) {
return posicoes[linha][coluna];
}
public String getPosicoes(int a, int b){
return matriz[a][b];
}
public void setPosicao(int linha, int coluna, String valor) {
posicoes[linha][coluna] = valor;
}
public boolean verificaVitoria(String sinal) {
if ((posicoes[0][0] == sinal && posicoes[0][1] == sinal && posicoes[0][2] == sinal) || //linha 1
(posicoes[1][0] == sinal && posicoes[1][1] == sinal && posicoes[1][2] == sinal) || //linha 2
(posicoes[2][0] == sinal && posicoes[2][1] == sinal && posicoes[2][2] == sinal) || //linha 3
(posicoes[0][0] == sinal && posicoes[1][0] == sinal && posicoes[2][0] == sinal) || //coluna 1
(posicoes[0][1] == sinal && posicoes[1][1] == sinal && posicoes[2][1] == sinal) || //coluna 2
(posicoes[0][2] == sinal && posicoes[1][2] == sinal && posicoes[2][2] == sinal) || //coluna 3
(posicoes[0][0] == sinal && posicoes[1][1] == sinal && posicoes[2][2] == sinal) || //diagonal
(posicoes[0][2] == sinal && posicoes[1][1] == sinal && posicoes[2][0] == sinal)) { //diagonal inversa
return true;
}
return false;
}
}
Jogador
public class Jogador{
private int qtd, id, id_jogador;
public int linha=0, coluna=0;
//Construtor
public Jogador(int id_jogador){
this.id_jogador = id_jogador;
}
public int getid(){
return this.id;
}
public void jogada(Tabuleiro tabuleiro, int linha, int coluna){
this.linha = linha;
this.coluna = coluna;
if (posicoes[linha][coluna] == sinal || posicoes[linha][coluna] == 'O') {
return false;
} else { //jogada válida
posicoes[linha][coluna] = sinal;
jogada++;
return true;
}
}
public void jogada(Tabuleiro tabuleiro){
System.out.println(tabuleiro);
menu.lerLinha();
menu.lerColuna();
}
public void jogada(Tabuleiro tabuleiro){
if (id ==1)
tabuleiro.setPosicao(linha, coluna, "X");
else
tabuleiro.setPosicao(linha, coluna, "O");
}
}
Menu
import java.util.Scanner;
public class Menu{
private Scanner sc = new Scanner (System.in);
private int linha=0, coluna=0;
public Menu(){
}
public void imprimeTabuleiro(int oi, int ola, Tabuleiro tabuleiro){
String[][] matriz = tabuleiro.getPosicoes();
for (int a = 0; a < matriz.length; a++) {
for (int b = 0; b < matriz[0].length; b++) {
System.out.print(matriz[a][b] + " | ");
}
System.out.println();
}
}
public int lerLinha(){
System.out.println("Digite a linha: ");
this.linha = sc.nextInt();
return linha;
}
public int lerColuna(){
System.out.println("Digite a coluna: ");
this.coluna = sc.nextInt();
return coluna;
}
}
Main
public class JogoDaVelha {
public static void main(String[] args) {
Menu menu = new Menu();
Tabuleiro tabuleiro = new Tabuleiro();
int linha, coluna, contador=0;
Jogador jogador1;
Jogador jogador2;
boolean vitoriaX=false, vitoriaO=false;
//Identifica o jogador 1 como humano ( usando id 1 )
jogador1 = new Jogador(1);
jogador2 = new Jogador(2);
//Impressão inicial para começar o jogo
menu.imprimeTabuleiro(tabuleiro);
do{
//Faz a jogada do primeiro jogador, considerando o método para usuário humano
jogador1.jogada(tabuleiro,menu.lerLinha(), menu.lerColuna());
//contabiliza a jogada com sucesso, visto que os métodos já garantem que a jogada sempre acontecerá com sucesso
contador++;
//Imprime o tabuleiro para o usuário ver a situação atual
menu.imprimeTabuleiro(tabuleiro);
//Verifica se alguém venceu
vitoriaX = tabuleiro.verificaVitoria("X");
vitoriaO = tabuleiro.verificaVitoria("O");
//Caso ngm tenha vencido ainda e não tenha acabado as jogadas, o segundo jogador joga.
if(vitoriaX == false && vitoriaO == false && contador < 9){
//Faz a jogada do primeiro jogador, considerando o método para usuário computador
jogador2.jogada(tabuleiro);
//contabiliza a jogada com sucesso, visto que os métodos já garantem que a jogada sempre acontecerá com sucesso
contador++;
//Imprime o tabuleiro para o usuário ver a situação atual
menu.imprimeTabuleiro(tabuleiro);
//Verifica se alguém venceu
vitoriaX = tabuleiro.verificaVitoria("X");
vitoriaO = tabuleiro.verificaVitoria("O");
}
//Repete a estrutura enquanto ngm vencer e houver jogadas disponíveis.
}while(vitoriaX == false && vitoriaO == false && contador < 9);
//Verifica se o jogador 1 ganhou
if (vitoriaX) {
System.out.println("Vitória do jogador X");
}else{
//Verifica se o jogador 2 ganhou
if (vitoriaO) {
System.out.println("Vitória do jogador O");
}else{
//Verifica se deu velha
System.out.println("Deu velha!");
}
}
}
}
Agora, dá os seguintes erros:
.\Jogador.java:29: error: method jogada(Tabuleiro) is already defined in class J
ogador
public void jogada(Tabuleiro tabuleiro){
^
JogoDaVelha.java:15: error: method imprimeTabuleiro in class Menu cannot be appl
ied to given types;
menu.imprimeTabuleiro(tabuleiro);
^
required: int,int,Tabuleiro
found: Tabuleiro
reason: actual and formal argument lists differ in length
JogoDaVelha.java:23: error: method imprimeTabuleiro in class Menu cannot be appl
ied to given types;
menu.imprimeTabuleiro(tabuleiro);
^
required: int,int,Tabuleiro
found: Tabuleiro
reason: actual and formal argument lists differ in length
JogoDaVelha.java:34: error: method imprimeTabuleiro in class Menu cannot be appl
ied to given types;
menu.imprimeTabuleiro(tabuleiro);
^
required: int,int,Tabuleiro
found: Tabuleiro
reason: actual and formal argument lists differ in length
.\Menu.java:8: error: method getPosicoes in class Tabuleiro cannot be applied to
given types;
String[][] matriz = tabuleiro.getPosicoes();
^
required: int,int
found: no arguments
reason: actual and formal argument lists differ in length
.\Jogador.java:15: error: cannot find symbol
if (posicoes[linha][coluna] == sinal || posicoes[linha][coluna]
== 'O') {
^
symbol: variable posicoes
location: class Jogador
.\Jogador.java:15: error: cannot find symbol
if (posicoes[linha][coluna] == sinal || posicoes[linha][coluna]
== 'O') {
^
symbol: variable sinal
location: class Jogador
.\Jogador.java:15: error: cannot find symbol
if (posicoes[linha][coluna] == sinal || posicoes[linha][coluna]
== 'O') {
^
symbol: variable posicoes
location: class Jogador
.\Jogador.java:16: error: incompatible types: unexpected return value
return false;
^
.\Jogador.java:19: error: cannot find symbol
posicoes[linha][coluna] = sinal;
^
symbol: variable posicoes
location: class Jogador
.\Jogador.java:19: error: cannot find symbol
posicoes[linha][coluna] = sinal;
^
symbol: variable sinal
location: class Jogador
.\Jogador.java:20: error: cannot find symbol
jogada++;
^
symbol: variable jogada
location: class Jogador
.\Jogador.java:21: error: incompatible types: unexpected return value
return true;
^
.\Jogador.java:26: error: cannot find symbol
menu.lerLinha();
^
symbol: variable menu
location: class Jogador
.\Jogador.java:27: error: cannot find symbol
menu.lerColuna();
^
symbol: variable menu
location: class Jogador
15 errors