Exception in thread "main" java.lang.NullPointerException
at GeoplanoAPI.JogadaAleatoria.processaJogada(JogadaAleatoria.java:78)
/**
*Classe responsavel por implementar os metodos das jogadas aleatorias para o jogo
* @author Diego Balbinoi
*/
public class JogadaAleatoria implements Jogada {
/**
* armazena a posição da jogada da inteligencia
*/
private Posicao melhorJogada;
/**
* armazena a variavel inicializacao da jogada da inteligencia
*/
private VariaveisInicializacao variavel;
/*
*
**/
private CalculaProbabilidade calcula;
/*
*
**/
private ListaProbabilidade lista;
public JogadaAleatoria() {
}
/**
* metodo que processa a melhor jogada aleatoria
* @param posicoes
* @param valores
*/
public void processaJogada(ArrayList posicoes, ValoresJogada valores) {
/**
* posição auxiliar que armazena as jogadas retiradas da lista de jogadas
*/
Posicao novaPos = null;
/**
* comp é uma variavel complementar somada a i ou j para obter o valor I ou J das extremidades da jogada
*/
int comp = (valores.getLado() - 1);
/**
* variavel para armazenar o tabuleiro
*/
boolean tab[][] = valores.getTabueiro();
/**
* variavel que recebe o valor I da jogada
*/
int i;
/**
* variavel que recebe o valor J da jogada
*/
int j;
/**
* armazena o valor da melhor jogada
*/
double valorJogada = 0.0;
/**
* armazena o valor das jogadas
*/
double valorAux=0.0;
if(valores.getLado()==1){
try {
lista=calcula.calcularProbabilidade("l1.txt");
} catch (IOException ex) {
ex.printStackTrace();
}
NoProbabilidade n=lista.inicio;
// n=variavel.getNl1();
System.out.println("o valor de iii"+n.pI);
//for enquanto existir posiçoes na lista
for (int aux = 0; aux < posicoes.size(); aux++) {
novaPos = (Posicao) posicoes.get(aux);
i = novaPos.getI();
j = novaPos.getJ();
while(n.pI!=i && n.pJ!=j){
n=n.proxProbabilidade;
}
valorAux=n.probabilidade;
valorJogada = verificaMelhorJogada(valorAux, valorJogada, novaPos);
}
}
else if(valores.getLado()==2){
try {
lista=calcula.calcularProbabilidade("l2.txt");
} catch (IOException ex) {
ex.printStackTrace();
}
NoProbabilidade n=lista.inicio;
//NoProbabilidade n=variavel.getNl2();
System.out.println("o valor de iii"+n.pI);
//for enquanto existir posiçoes na lista
for (int aux = 0; aux < posicoes.size(); aux++) {
novaPos = (Posicao) posicoes.get(aux);
i = novaPos.getI();
j = novaPos.getJ();
while(n.pI!=i && n.pJ!=j){
n=n.proxProbabilidade;
}
valorAux=n.probabilidade;
valorJogada = verificaMelhorJogada(valorAux, valorJogada, novaPos);
}
}
else if(valores.getLado()==3){
try {
lista=calcula.calcularProbabilidade("l3.txt");
} catch (IOException ex) {
ex.printStackTrace();
}
NoProbabilidade n=lista.inicio;
//NoProbabilidade n=variavel.getNl3();
System.out.println("o valor de iii"+n.pI);
//for enquanto existir posiçoes na lista
for (int aux = 0; aux < posicoes.size(); aux++) {
novaPos = (Posicao) posicoes.get(aux);
i = novaPos.getI();
j = novaPos.getJ();
while(n.pI!=i && n.pJ!=j){
n=n.proxProbabilidade;
}
valorAux=n.probabilidade;
valorJogada = verificaMelhorJogada(valorAux, valorJogada, novaPos);
}
}
else if(valores.getLado()==4){
try {
lista=calcula.calcularProbabilidade("l4.txt");
} catch (IOException ex) {
ex.printStackTrace();
}
NoProbabilidade n=lista.inicio;
// NoProbabilidade n=variavel.getNl4();
System.out.println("o valor de iii"+n.pI);
//for enquanto existir posiçoes na lista
for (int aux = 0; aux < posicoes.size(); aux++) {
novaPos = (Posicao) posicoes.get(aux);
i = novaPos.getI();
j = novaPos.getJ();
while(n.pI!=i && n.pJ!=j){
n=n.proxProbabilidade;
}
valorAux=n.probabilidade;
valorJogada = verificaMelhorJogada(valorAux, valorJogada, novaPos);
}
}
else if(valores.getLado()==5){
try {
lista=calcula.calcularProbabilidade("l5.txt");
} catch (IOException ex) {
ex.printStackTrace();
}
NoProbabilidade n=lista.inicio;
//NoProbabilidade n=variavel.getNl5();
System.out.println("o valor de iii"+n.pI);
//for enquanto existir posiçoes na lista
for (int aux = 0; aux < posicoes.size(); aux++) {
novaPos = (Posicao) posicoes.get(aux);
i = novaPos.getI();
j = novaPos.getJ();
while(n.pI!=i && n.pJ!=j){
n=n.proxProbabilidade;
}
valorAux=n.probabilidade;
valorJogada = verificaMelhorJogada(valorAux, valorJogada, novaPos);
}
}
}
/**
* retorna a posicao para a jogada
* @return pos
*/
public Posicao getJogada() {
return melhorJogada;
}
/**
* Metodo que escolhe qual a melhor jogada entre a jogada atual e o melhor estado registrado,
* eh usado pelo metodo processaJogada() dessa mesma classe.
* @param valorAux
* @param valorJogada
* @param jogada
* @return
*/
public double verificaMelhorJogada(double valorAux, double valorJogada, Posicao jogada) {
if (valorAux > valorJogada) {
jogada.setValorJogadaAleatoria(valorJogada);
melhorJogada = jogada;
return valorAux;
} else {
return valorJogada;
}
}
/**
* Esse metodo verifica todos os espaços vizinhos a jogada, se a jogada tiver uma area completamente
* vazia ao redor ela ganha pontos a mais que são acrescentados na verificação da melhor jogada
* @param tab
* @param i
* @param j
* @param comp
* @return valorAdicional
*/
public int verificaEspecosAoRedor(boolean tab[][], int i, int j, int comp) {
/**
* variavel para contar os espaços ocupados
*/
int ocupado = 0;
/**
* variavel para contar os espaços vazios
*/
int vazio = 0;
/**
* valor adicional que será acrescentado caso haja uma area completamente vazia ao redor
*/
int valorAdicional = 0;
/**
* variavel auxiliar para i
*/
int auxI;
/**
* variavel auxiliar para j
*/
int auxJ;
//for para percorrer as casas e contar os espaços vazios e ocupados
for (auxI = i - 1; auxI <= (i + comp + 1); auxI++) {
for (auxJ = j - 1; auxJ <= (j + comp + 1); auxJ++) {
if (tab[auxI][auxJ] == true) {
ocupado++;
} else {
vazio++;
}
}
}
if((ocupado == 1 && vazio == 8) || (ocupado == 4 && vazio == 12) || (ocupado == 9 && vazio == 16) || (ocupado == 16 && vazio == 20) || (ocupado == 25 && vazio == 24)){
valorAdicional = 25;
}
return valorAdicional;
}
}
public ListaProbabilidade calcularProbabilidade(String nome) throws IOException {}