我正在尝试使用布尔矩阵在java中制作一个生命游戏,但是当我尝试读取一个点的所有邻居时,由于某种原因,附近位置的返回总是错误的......有任何线索吗?我的想法是使用 if 表达式来增加计数器并使用它来更新矩阵。
public void create() {
setDefaultFontSize( 20 );
grade = new boolean[DIMENSAO_GRADE][DIMENSAO_GRADE];
tempoAtualizacao = 0.4;
mostrarAjuda = true;
prepararCenarioInicial();
}
这部分是创建一些变量和成绩实例的函数
private void prepararCenarioInicial() {
executando = false;
for ( int i = 0; i < DIMENSAO_GRADE; i++ ) {
for ( int j = 0; j < DIMENSAO_GRADE; j++ ) {
grade[i][j] = false;
}
}
int iIni = DIMENSAO_GRADE / 2 + 2;
int jIni = DIMENSAO_GRADE / 2;
// glider
grade[iIni][jIni] = true;
grade[iIni+1][jIni+1] = true;
grade[iIni+2][jIni-1] = true;
grade[iIni+2][jIni] = true;
grade[iIni+2][jIni+1] = true;
}
我还创建了一个滑翔机,这意味着矩阵中有真实值
private void geraGrade(int i, int j){
int somaVivos = 0;
int ni, nj;
for(int x = - 1; x <= 1; x++){
for(int y = - 1; y <= 1; y++){
ni = x + i;
nj = y + j;
if((ni <= 0 || nj <= 0) || (ni > DIMENSAO_GRADE - 1 || nj > DIMENSAO_GRADE - 1))continue;
if(grade[ni][nj] == true && !(x == 0 && y == 0)){
somaVivos++;
}
}
}
System.out.println(somaVivos);
}
但是在该代码块中矩阵总是返回 false
抱歉我的英语不好,这里是巴西语
如果将以下部分添加到代码中,您将看到错误所在:
private void geraGrade( int i, int j ) {
int somaVivos = 0;
int ni, nj;
for( int x = - 1; x <= 1; x ++ ) {
for( int y = - 1; y <= 1; y ++ ) {
ni = x + i;
nj = y + j;
if( ( ni <= 0 || nj <= 0 ) || ( ni > DIMENSAO_GRADE - 1 || nj > DIMENSAO_GRADE - 1 ) )
continue;
System.out.println( ni +" " + nj );
if( grade[ni][nj] == true && ! ( x == 0 && y == 0 ) ) {
somaVivos ++;
}
}
}
System.out.println( somaVivos );
printA();
printB();
}
void printA() {
for( int i = 0; i < grade.length; i ++ ) {
for( int j = 0; j < grade.length; j ++ ) {
if( grade[ i ][j ]) System.out.print( "T" );
else System.out.print( "." );
}
System.out.println( "" );
}
}
void printB() {
int ni, nj, i = 0, j = 0;
for( int x = - 1; x <= 1; x ++ ) {
for( int y = - 1; y <= 1; y ++ ) {
ni = x + i;
nj = y + j;
if( ( ni <= 0 || nj <= 0 ) || ( ni > DIMENSAO_GRADE - 1 || nj > DIMENSAO_GRADE - 1 ) )
continue;
if( grade[ni][nj] ) System.out.println( "T" );
else System.out.println( "." );
}
}
}
printA()方法,绘制棋盘图形,显示“T”,其中有true,以及“.”,其中有false,所以你会查看您放置 true 的位置。
printB()方法显示了geraGrade()遍历的项目...无(使用作为参数“0, 0”)...我认为你应该重写这个方法,或者详细解释你需要什么一起做,一起工作。