Game of Life

1 生成二维数组

private void fillRandom(long seed) {
        final Random random = new Random(seed);
        IntStream.range(0, size)
                .forEach(row -> IntStream.range(0, size)
                        .forEach(col -> map[row][col] = random.nextBoolean())
                );
    }

2 Stage 2 另一种方法

import java.util.BitSet;
import java.util.Random;
import java.util.Scanner;
import java.util.function.BiPredicate;

public class Main {
    int size;
    BitSet[] rows;

    Main(int n, int seed, int generations) {
        size = n;
        var rand = new Random(seed);
        evolve((_i, _j) -> rand.nextBoolean());
        while (generations-- > 0) {
            evolve(this::toBeAlive);
        }
    }

    public static void main(String[] args) {
        var sc = new Scanner(System.in);
        new Main(sc.nextInt(), sc.nextInt(), sc.nextInt())
                .display();
    }

    private void evolve(BiPredicate<Integer, Integer> p) {
        var next = new BitSet[size];
        for (int i = 0; i < size; i++) {
            next[i] = new BitSet(size);
            for (int j = 0; j < size; j++) {
                if (p.test(i, j)) {
                    next[i].set(j);
                }
            }
        }
        rows = next;
    }

private boolean toBeAlive(int i, int j) {
        boolean isAlive = rows[i].get(j);
        int neighbors = isAlive ? -1 : 0;
        for (int di = -1; di < 2; di++) {
            for (int dj = -1; dj < 2; dj++) {
                int ii = (i + di + size) % size;
                int jj = (j + dj + size) % size;
                if (rows[ii].get(jj)) {
                    ++neighbors;
                }
            }
        }
        return neighbors == 3 || (isAlive && neighbors == 2);
    }

    private void display() {
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                System.out.print(rows[i].get(j) ? 'O' : ' ');
            }
            System.out.println();
        }
    }
}
posted @ 2020-11-19 17:19  longlong6296  阅读(149)  评论(0)    收藏  举报