繁体   English   中英

在康威生命游戏中计算二维数组中的(8 个可能的)邻居

[英]Counting (8 possible) neighbours in 2D array in conways Game Of Life

我必须计算每个单元格有多少“活着”(在这种情况下是一个字符:'O')邻居。 每个单元格有 8 个邻居。 (这是康威的“生命游戏”)

“正如你所注意到的,每个细胞都有八个邻居。我们认为宇宙是周期性的:边界细胞也有八个邻居。例如:来自“正常”细胞的邻居

如果单元格是右边界,则其右(东)邻居是同一行中最左边的单元格。 如果单元格是底部边界,则其底部(南)邻居是同一列中的最顶部单元格。 角单元格同时使用这两种解决方案。”当一个单元格是边界并且一个单元格是顶角时

这些链接是在“异常”情况下如何检查单元格的可视化。

我在网上找到了这个:

for (int x = -1; x <= 1; x += 1) {
    for (int y = -1; y <= 1; y += 1) {
        int r = i + y;
        int c = j + x;
        if (r >= 0 && r < n && c >= 0 && c < n
                && !(y == 0 && x == 0)
                && currentUniverse[i][j] == 'O') {
            neighbours++;
        }

但是,这似乎不起作用...我无法想出一个整洁且最重要的是智能/方便/简短的代码来检查 position 的一个单元格有多少活着的邻居(假设currentUniverse[i][j] ) 有...

有没有人建议,提示或其他帮助?

试一试。 我使用 n 作为数组的大小(假设为正方形)。

int n = 4;
System.out.println();
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        int neighbours = 0;
        for (int x = -1; x <= 1; x += 1) {
            for (int y = -1; y <= 1; y += 1) {
                if (!(y == 0 && x == 0)) {
                    int r = i + y;
                    int c = j + x;
                    //normalize
                    if (r < 0) r = n - 1;
                    else if (r == n) r = 0;

                    if (c < 0) c = n - 1;
                    else if (c == n) c = 0;
                    if (currentUniverse[r][c] == 0)
                        neighbours++;
                }
            }
        }
        System.out.print("\t" + neighbours);
    }
    System.out.println();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM