Olá, estou fazendo um exercício sobre o Game Of Life (https://pt.wikipedia.org/wiki/Jogo_da_vida) , porém não estou conseguindo fazer o sistema de regras, que é responsável pela troca dos caracteres
A primeira regra é assim
Qualquer célula viva com menos de dois vizinhos vivos morre de solidão.
M = celulas mortas
V = Vivas
Segue a matriz
M M M M M
M M M M M
M M V M M
M M M M M
meu problema é que não consigo comparar os vizinhos da célula viva o array estoura (ArrayIndexOutOfBoundsException) e não dá certo
fiz o seguinte método:
obs: no código as células mortas são representadas pelo ponto e as vivas pelo X
public void check() {
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j] == 'X') {
if (a[i++][j] == '.' && a[i--][j] == '.' ) {
if(a[i][j++] == '.' && a[i][j--] == '.')
a[i][j] = '.';
} else {
a[i][j] = 'X';
}
}
}
}
}
Alguém poderia me orientar nessa questão de comparar os “vizinhos”?
Grato
Aqui está o restante do código
package gameoflife;
public class GameOfLife {
protected char a[][];
GameOfLife(int lin, int col) {
a = new char[lin][col];
for (int i = 0; i < lin; i++) {
for (int j = 0; j < col; j++) {
a[i][j] = '.';
}
}
}
public void setCellAlive(int lin, int col) {
a[lin][col] = 'X';
}
public void setCellDead(int lin, int col) {
a[lin][col] = '.';
}
public void check() {
//Qualquer célula viva com menos de dois vizinhos vivos morre de solidão.
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j] == 'X') {
if (a[i++][j] == '.' && a[i--][j] == '.') {
if (a[i][j++] == '.' && a[i][j--] == '.') {
a[i][j] = '.';
}
} else {
a[i][j] = 'X';
}
}
//Qualquer célula viva com mais de três vizinhos vivos morre de superpopulação.
//Qualquer célula morta com exatamente três vizinhos vivos se torna uma célula viva
}
}
}
public void excCycle() {
check();
}
public void show() {
for (int i = 0; i < a.length; i++) {
System.out.println();
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j] + "\t");
}
System.out.println();
}
}
}