Java实现生命游戏时全局矩阵读取邻居值始终为false的问题求助
Java实现生命游戏时全局矩阵读取邻居值始终为false的问题求助
我正在用Java写一个生命游戏,用布尔矩阵来表示网格,但读取某个点的所有邻居时,返回的附近位置值总是false,有没有人能帮我找找原因?我的思路是用if语句来统计存活邻居的数量,再用这个计数器来更新矩阵。
首先是create方法,用来初始化一些变量和网格实例:
public void create() { setDefaultFontSize( 20 ); grade = new boolean[DIMENSAO_GRADE][DIMENSAO_GRADE]; tempoAtualizacao = 0.4; mostrarAjuda = true; prepararCenarioInicial(); }
接下来是初始化初始场景的方法,我在这里先把网格所有元素设为false,然后创建了一个滑翔机(glider),所以矩阵里肯定存在true值:
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; }
但问题出在下面这个统计邻居的geraGrade方法里——不管怎么读,矩阵返回的都是false,导致somaVivos的结果一直不对:
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); }
(注:程序运行时能看到滑翔机的图形,但统计邻居时就是读不到true值)
备注:内容来源于stack exchange,提问作者João Pedro Lopes Campos
相关产品推荐
相关产品推荐

