Olá, sou novo e tive um problema na execução de um código...
Problema:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at campominado.CampoMinado.ContarVizinhos(CampoMinado.java:73)
at campominado.CampoMinado.
at campominado.Facil.
public class CampoMinado {
private Celula[][] campo;
private Random rdm;
private int x, y;
private int Pontuacao = 0;
public CampoMinado( int x, int y, int bombas ){
campo = new Celula[x][y];
this.x = x;
this.y = y;
rdm = new Random();
int c, d, b = 0;
// Criar campo
for ( c = 0; c < x; c++ ){
for ( d = 0; d < y; d++ ){
campo[c][d] = new Celula();
}
}
// Colocar minas!
do
{
c = RandomLimitado( 0, x - 1 );
d = RandomLimitado( 0, y - 1 );
if ( !campo[c][d].bomba )
{
campo[c][d].bomba = true;
b++;
}
}
while ( b < bombas );
// Calcular adjacentes:
for ( c = 0; c < x; c++ ){
for ( d = 0; d < y; d++ ){
campo[c][d].vizinhos = ContarVizinhos( c, d );
}
}
}
private int RandomLimitado( int menor, int maior ){
int num = 0;
do{
// Acelerador da função!
num = rdm.nextInt() / 255;
}
while ( num < menor || num > maior );
return num;
}
private byte ContarVizinhos( int x, int y ){
byte adjacentes = 0;
if ( ((((x >= 0 && y >= 0) && x < this.x) && y < this.y) && x != -1) && y != -1 ){
adjacentes += campo[x - 1][y - 1].bomba ? 1 : 0;
adjacentes += campo[x - 1][y].bomba ? 1 : 0;
adjacentes += campo[x - 1][y + 1].bomba ? 1 : 0;
adjacentes += campo[x][y - 1].bomba ? 1 : 0;
adjacentes += campo[x][y + 1].bomba ? 1 : 0;
adjacentes += campo[x + 1][y - 1].bomba ? 1 : 0;
adjacentes += campo[x + 1][y].bomba ? 1 : 0;
adjacentes += campo[x + 1][y + 1].bomba ? 1 : 0;
} else {
}
return adjacentes;
}
public void Abrir( int x, int y ){
if ( ((((x >= 0 && y >= 0) && x < this.x) && y < this.y) && x != -1) && y != -1 ){
if ( !campo[x][y].bomba
&& campo[x][y].fechado){
campo[x][y].aberto = true;
campo[x][y].fechado = false;
// Linha superior:
Abrir( x - 1, y - 1 );
Abrir( x - 1, y );
Abrir( x - 1, y + 1 );
// Linha média sem o elemento central:
Abrir( x, y - 1 );
Abrir( x, y + 1 );
// Linha inferior:
Abrir( x + 1, y - 1 );
Abrir( x + 1, y );
Abrir( x + 1, y + 1 );
}
} else {
campo[x][y].aberto = true;
campo[x][y].fechado = false;
}
}
public boolean Checar(int x, int y){
boolean resp;
if(campo[x][y].bomba){
return resp = true;
}
else{
return resp = false;
}
}
public int Pontuar(){
int z = 0;
for(int i = 0; i < campo.length; i++){
for(int j = 0; j < campo.length; j++){
while(campo[i][j].bomba){
while(campo[i][j].aberto = true){
z = z + 1;
}
}
}
}
Pontuacao = z * 100;
return Pontuacao;
}
public class Celula{
public byte vizinhos;
public boolean bomba;
public boolean aberto;
public boolean fechado;
public Celula(){
vizinhos = 0;
bomba = false;
fechado = true;
aberto = false;
}
}
}
private CampoMinado objCM = new CampoMinado(9, 9, 15);