Necessito de ajuda, está dando erro na dificuldade e na jogada do computador.
ABA COMPUTADOR
package com.uninter;
public class Computador extends Jogador{ //classe computador
public Computador(int jogador){ //definir jogador ou computador
super(jogador);
System.out.println("Jogador 'Computador' criado!");
}
@Override
public void jogar(Tabuleiro tabuleiro){
}
@Override
public void Tentativa(Tabuleiro tabuleiro){
}
}
ABA HUMANO
package com.uninter;
import java.util.Scanner;
public class Humano extends Jogador{ //classe humano
public Scanner entrada = new Scanner(System.in);
public Humano(int jogador){
super(jogador);
this.jogador = jogador;
System.out.println("Jogador 'Humano' criado!");
}
@Override
public void jogar(Tabuleiro tabuleiro){
Tentativa(tabuleiro);
tabuleiro.setPosicao(tentativa, jogador);
}
@Override
public void Tentativa(Tabuleiro tabuleiro){ //mensagem que apareceram em cada rodada do jogo
do{
do{
System.out.print("Linha: ");
tentativa[0] = entrada.nextInt();
if( tentativa[0] > 3 ||tentativa[0] < 1)
System.out.println("Linha inválida. É 1, 2 ou 3");
}while( tentativa[0] > 3 ||tentativa[0] < 1);
do{
System.out.print("Coluna: ");
tentativa[1] = entrada.nextInt();
if(tentativa[1] > 3 ||tentativa[1] < 1)
System.out.println("Coluna inválida. É 1, 2 ou 3");
}while(tentativa[1] > 3 ||tentativa[1] < 1);
tentativa[0]--;
tentativa[1]--;
if(!checaTentativa(tentativa, tabuleiro)) //para chegar se o local esta livre
System.out.println("Esse local já foi marcado. Tente outro.");
}while( !checaTentativa(tentativa, tabuleiro) );
}
}
ABA JOGADOR
package com.uninter;
public abstract class Jogador { //classe jogador
protected int[] tentativa = new int[2];
protected int jogador;
protected int computador;
public Jogador(int jogador){
this.jogador = jogador;
}
public abstract void jogar(Tabuleiro tabuleiro);
public abstract void Tentativa(Tabuleiro tabuleiro);
public boolean checaTentativa(int[] tentativa, Tabuleiro tabuleiro){
if(tabuleiro.getPosicao(tentativa) == 0)
return true;
else
return false;
}
}
ABA JOGO
package com.uninter;
import java.util.Scanner;
public class Jogo { //classe jogo
private Tabuleiro tabuleiro;
private int rodada=1, vez=1;
private Jogador jogador1;
public Scanner entrada = new Scanner(System.in);
private int opcao;
public Jogo(){ //inicia o jogo
tabuleiro = new Tabuleiro();
iniciarJogadores();
dificuldade();
while( Jogar() );
}
public void iniciarJogadores(){ //mensagem de inicio para esolher o jogador
System.out.println("Escolha o Jogador");
if(escolherJogador() == 1)
this.jogador1 = new Humano(1);
else
new Computador(2);
if(escolherJogador() == 1)
new Computador(2);
}
public void dificuldade() { //escolher dificuldade
try (Scanner entrada = new Scanner(System.in)) {
System.out.println(" Jogo da velha");
System.out.println("Escolha a dificuldade 1,2 ou 3:");
setOpcao(entrada.nextInt());
}
}
public int escolherJogador(){ //opção para escolher qual jogador
int opcao=1;
do{
System.out.println("1. Humano");
System.out.println("2. Computador\n");
System.out.print("Opção: ");
opcao = entrada.nextInt();
System.out.println();
System.out.println("Agora selecione a opção 2");
System.out.println();
if(opcao != 1)
System.out.println("Jogador VS Computador");
}while(opcao != 1 && opcao != 2);
return opcao;
}
public boolean Jogar(){
if(ganhou() == 0 ){
System.out.println("");
System.out.println("Rodada "+rodada);
if(vez()==1)
jogador1.jogar(tabuleiro);
if(tabuleiro.tabuleiroCompleto()){ //traz a mensagem se o tabuleiro estiver completo
System.out.println("Tabuleiro Completo. Jogo empatado");
return false;
}
vez++;
rodada++;
return true;
} else{
if(ganhou() == -1 ) //mensagem de ganhador
System.out.println("Jogador 1 ganhou!");
return false;
}
}
public int vez(){ // evita o jogo ficar em loop separando a vez de cada um
if(vez%2 == 1)
return 1;
else
return 2;
}
public int ganhou(){ //checa quem ganhou
if(tabuleiro.Linhas() == 1)
return 1;
if(tabuleiro.Colunas() == 1)
return 1;
if(tabuleiro.Diagonais() == 1)
return 1;
if(tabuleiro.Linhas() == -1)
return -1;
if(tabuleiro.Colunas() == -1)
return -1;
if(tabuleiro.Diagonais() == -1)
return -1;
return 0;
}
public int getOpcao() {
return opcao;
}
public void setOpcao(int opcao) {
this.opcao = opcao;
}
}
ABA JOGO DA VELHA
package com.uninter;
public class JogoDaVelha { //classe jogo da velha
private static Jogo jogo1;
public static void main(String[] args) { //inicia o jogo
setJogo1(new Jogo());
}
public static Jogo getJogo1() {
return jogo1;
}
public static void setJogo1(Jogo jogo1) {
JogoDaVelha.jogo1 = jogo1;
}
}
ABA TABULEIRO
package com.uninter;
public class Tabuleiro { //classe tabuleiro
private int[][] tabuleiro= new int[3][3]; //Matriz 3x3 criada para o jogo
public Tabuleiro(){
}
public void exibeTabuleiro(){ //exibe o tabuleiro
System.out.println();
for(int linha=0 ; linha<3 ; linha++){
for(int coluna=0 ; coluna<3 ; coluna++){
if(tabuleiro[linha][coluna]==-1){
System.out.print(" X ");
}
if(tabuleiro[linha][coluna]==1){
System.out.print(" O ");
}
if(tabuleiro[linha][coluna]==0){
System.out.print(" ");
}
}
System.out.println();
}
}
public int getPosicao(int[] tentativa){ //pega as posiçoes
return tabuleiro[tentativa[0]][tentativa[1]];
}
public void setPosicao(int[] tentativa, int jogador){ //define as posições
if(jogador == 1)
tabuleiro[tentativa[0]][tentativa[1]] = -1;
else
tabuleiro[tentativa[0]][tentativa[1]] = 1;
exibeTabuleiro();
}
public int Linhas(){ //checa as linhas
for(int linha=0 ; linha<3 ; linha++){
if( (tabuleiro[linha][0] + tabuleiro[linha][1] + tabuleiro[linha][2]) == -3)
return -1;
if( (tabuleiro[linha][0] + tabuleiro[linha][1] + tabuleiro[linha][2]) == 3)
return 1;
}
return 0;
}
public int Colunas(){ // chegca as colunas
for(int coluna=0 ; coluna<3 ; coluna++){
if( (tabuleiro[0][coluna] + tabuleiro[1][coluna] + tabuleiro[2][coluna]) == -3)
return -1;
if( (tabuleiro[0][coluna] + tabuleiro[1][coluna] + tabuleiro[2][coluna]) == 3)
return 1;
}
return 0;
}
public int Diagonais(){ //checa as diagonais
if( (tabuleiro[0][0] + tabuleiro[1][1] + tabuleiro[2][2]) == -3)
return -1;
if( (tabuleiro[0][0] + tabuleiro[1][1] + tabuleiro[2][2]) == 3)
return 1;
if( (tabuleiro[0][2] + tabuleiro[1][1] + tabuleiro[2][0]) == -3)
return -1;
if( (tabuleiro[0][2] + tabuleiro[1][1] + tabuleiro[2][0]) == 3)
return 1;
return 0;
}
public boolean tabuleiroCompleto(){ //tabuleiro completo
for(int linha=0 ; linha<3 ; linha++)
for(int coluna=0 ; coluna<3 ; coluna++)
if( tabuleiro[linha][coluna]==0 )
return false;
return true;
}
}