Java 中的元胞自动机

Cell automat in Java

我正在尝试在 Java 中创建一个类似康威生命游戏的模型,但要适应某些特定条件和细胞行为。我没有足够的编程经验,所以如果你能给我一些答案,我将不胜感激。

到目前为止我有这个代码:

package project_cells;

import java.util.Random;

public class Field {

    public static void main(String[] args) {
        int size = 4;
        char[][] field = new char[size][size];          // field 
        char[] cell_type = {'A','B','a','b'};          // fill out vector with cell type

        for(int i = 0; i <size; i++ ) {                 // checking the matrix positions
            for (int j = 0; j <size; j++) {
                Random rand = new Random();  
                int celltype_option = rand.nextInt((3-0)+1)+0;       // creating a random number from 0 to 3 
                field[i][j]=cell_type[celltype_option];             // Filling the field with cell types
            }
        }
        System.out.println("Клетки первого поколения");                     // checking the first generation of cells
        for (int x=0; x < field.length; x++) {
            System.out.print("|");
            for (int y=0; y < field[x].length; y++) {
                System.out.print (field[x][y]);
                if (y!=field[x].length-1) System.out.print("\t");

            }
            System.out.println("|");
        }
    }
}

通过这段代码,我只获得了具有 4 种类型单元格 (A、B、a、b) 的数组,A 和 B 改变了它的行为,a 和 b 没有改变。

问题是我需要创建 3 种方法来验证邻居: 1. 当单元仅验证 4 个邻居(上、右、左、下)时。 2.当小区验证8个周围的邻居和3.当小区验证任何随机邻居时。

我怎样才能得到这样的验证?

x的左右邻居是x-1x+1。它们仅在 >= 0<= size - 1:

时存在
for (int i = -1; i <= 1; i+= 2) { // i = -1, +1
    final int neighborIndex = x + i; 
    if (neighborIndex >= 0 && neighborIndex < size) {
        // ...   
    }
}

up/down的情况可以类推。

要获得所有八个邻居,从 x-1 迭代到 x+1 并在其内部从 y-1 迭代到 y+1(同样,仅当 >=0< size) 并过滤掉中心 (x, y):

for (int xNeighbor = Math.max(0, x - 1); xNeighbor <= Math.min(size - 1, x + 1); xNeighbor += 1) {
    for (int yNeighbor = Math.max(0, y - 1); yNeighbor <= Math.min(size - 1, y + 1); yNeighbor += 1) {
        if (!(xNeighbor == x && yNeighbor == y)) {
            // ...
        }
    }
}

要获得随机邻居,首先计算邻居的数量,然后使用 rand.nextInt(numNeighbors) 到 select 一个。