Game Of Life Notes

>>>> Game of Life Due Next Wednesday <<<<

Project Euler 17

  • lots of special cases.

Project Euler 24

  • One option: 9 nested loops
    • counter for something
    • only 1 million things, ints will work.
  • Better option: recursive calls.

Game of Life

  • Based off of Conway's game of life.
  • See the rules on the assingment page.

You'll need two grids: the current generation and the next generation. The next gen will be computed off of the current gen.

GUI Ideas

  • Arrays of buttons, etc.

Toroidal Arrays

  • necessary part of the program (the array wraps around)
// for A[0][0], to find the neighboors to the left.
neighboorLeft = A[r][c-1] if c > 0
neighboorLeft =   A[r][c+A[0].length - 1] otherwise

// or better way:

neighboorLeft =  A[r][(c + A[0].length - 1) % A[0].length];
                 A[r][(c+1) % A[0].length]

Example method to find all live neighboors:

// for an array of booleans
// called by the 
public int liveNeighboors(boolean[][] A, int r, int c)
{
    for(int row = r-1; row <= r+1; row++) {
        for (int col = c-1; col <= c+1; col++) {
            int nr = (row + A.length) % A.length;
            int nc = (col + A[0].length) % A[0].length;
            if (A[nr][nc] == true) count ++;
        }
    }
    if (A[r][c]) count--;
    return count;
}

ActionPerformed

actionPerformed(   )
{
    if (source == timer) {
        computeGenerations(); // key routine, probably should return void.
        repaint();
    }
}

public void computeGeneration(Boolean[][] A, Boolean[][] B)
{
    for (int r=0; r<A.length; r++) {
        for (int c=0; c<A[r].length; r++) {
            int ln = liveNeighboors(A,r,c);
            boolean isLive = A[r][c];
            if (isLive) {
                if (ln <= 2 || ln > 3) B[r][c] = false;
                else B[r][c] = true;
            else {
                if (ln == 3) B[r][c]
                
}

Timer

in the constructor:

animationTimer = new javax.swing.Timer(30, this);
animationTimer.netInitialDelay(50);
animationTimer.start();

paintComponent method:

public void paintComponent