簡體   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