Game Of Life 中细胞规则LifeScan实现

    技术2022-05-14  0

    /** * 节点基本检查 * 1.处在地图范围内 * 2.节点是处于活动(0)状态 * * @param point 坐标原点为(0, 0) (x, y)=>数组(y,x) * * @return boolean,OK...NG */ private boolean unitCheck(Point point) { /* 对角变换 */ int row = point.y; int col = point.x; /* 处在地图范围内 */ if ((row < 0 || row >= mazeGrid.length) || (col < 0 || col >= mazeGrid[0].length)) { return false; } /* 点上没有节点状态 */ if (mazeGrid[row][col] != 0) { return false; } return true; } /** * 节点规则检查 * 1.是否遵循规则,保证节点可以存活 * 2.存活的话,按照规则修改网格地图的节点 * * @param point 坐标原点为(0, 0) (x, y)=>数组(y,x) * * @return boolean,OK...NG */ private boolean ruleCheck(Point point) { /* 对角变换 */ int row = point.y; int col = point.x; /* 创建新的网格地图 */ int ai[][] = new int[rows + 2][cols + 2]; for (int i = 0; i < rows + 2; i++) { for (int j = 0; j < cols + 2; j++) { ai[i][j] = 0; } } /* * 如果life数组中life[i][j] = 1则,设置al数组[i][j]四周都是+1 * 1 1 1 * 1 0 1 * 1 1 1 * 叠加之后,就可以算出life[i][j]点周围有几个节点,就是al[i][j]的值。 */ for (int i = 1; i < rows + 1; i++) { for (int j = 1; j < cols + 1; j++) { if ((mazeGrid[i - 1][j - 1] & 1) == 1) { ai[i - 1][j - 1]++; ai[i - 1][j]++; ai[i - 1][j + 1]++; ai[i][j - 1]++; ai[i][j + 1]++; ai[i + 1][j - 1]++; ai[i + 1][j]++; ai[i + 1][j + 1]++; } } } /* 坐标点转换为数组(对角变换)获取节点周围节点个数 */ if ((ai[row + 1][col + 1] < 2) || (ai[row + 1][col + 1] > 3)) { return false; } /* * 数组按照规则重新布置处理 * 因为节点是同时发生的,所以保证有一个副本(al数组)存在才能判断(周围节点个数), * 否则life数据变更,而无法判断节点出生 */ for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { /* 1.如果有节点存在 */ if (mazeGrid[i][j] == 1) { /* 1.1 判断时候可以存活(周围为0或者1,或者大于3) */ if (ai[i + 1][j + 1] < 2 || ai[i + 1][j + 1] > 3) { mazeGrid[i][j] = 0; } } /* 2.如果没有节点存在,如果周围节点数位3,则出生 */ else if (ai[i + 1][j + 1] == 3) { mazeGrid[i][j] = 1; } } } return true; }

     

    /*  * 检查下一个点  * 1.处在地图范围内  * 2.点是出于活动(0)状态  */ if (unitCheck(nextPoint)) {     mazeGrid[(curNode.point).y][(curNode.point).x] = 0;     mazeGrid[nextPoint.y][nextPoint.x] = 1;     /*      * 检查下一个点      * 1.是否遵循规则,保证节点可以存活      * 2.存活的话,按照规则修改网格地图的所以点      */     if (ruleCheck(nextPoint)) {

          // 处理

        }


    最新回复(0)