//------------// Introduction to Programming Using Java: An Object-Oriented Approach//	Arnow/Weiss//------------import java.awt.*;import java.awt.event.*;import java.applet.*;class LifeThread extends Thread {    public LifeThread(LifeDisplay lifeDisplay, int size) {        this.lifeDisplay = lifeDisplay;        world = new boolean[size][size];        for (int i = world.length*4/10; i <              world.length*6/10; i++)           for (int j = world.length*4/10; j <                 world[i].length*6/10; j++)           world[i][j] = true;    }    public void run() { // was doGenerations        amRunning = true;        amStopped = false;        lifeDisplay.displayWorld(world);        while (!amStopped && !lifeIsExtinct()) {           try {               Thread.sleep(25);           } catch (Exception e) {}           if (!amStopped && amRunning)               nextGeneration();           if (!amStopped && amRunning)               lifeDisplay.displayWorld(world);        }    }    public void ourStop() {        amStopped = true;    }    public void ourSuspend() {        amRunning = false;    }    public void ourResume() {        amRunning = true;    }    private boolean lifeIsExtinct() {        for (int i = 0; i < world.length; i++)           for (int j = 0; j < world[i].length; j++)               if (world[i][j])                   return false;        return true;    }    private void nextGeneration() {        boolean[][]     newWorld =                   new boolean[world.length][world.length];        for (int i = 0; i < world.length; i++)           for (int j = 0; j < world[i].length; j++) {               int x = livingNeighbors(i, j);               newWorld[i][j] = MinNeighbors <= x  &&  x <=                                               MaxNeighbors;           }        world = newWorld;    }    private int livingNeighbors(int i, int j) {        int result = 0;        if (isAlive(i-1, j-1)) result++;        if (isAlive(i-1, j)) result++;        if (isAlive(i-1, j+1)) result++;        if (isAlive(i, j-1)) result++;        if (isAlive(i, j+1)) result++;        if (isAlive(i+1, j-1)) result++;        if (isAlive(i+1, j)) result++;        if (isAlive(i+1, j+1)) result++;        return result;    }    boolean isAlive(int i, int j) {        if (i >= 0 && i < world.length &&               j >= 0 && j < world[i].length &&               world[i][j])           return true;        else           return false;    }    boolean amRunning, amStopped;    boolean[][] world;    LifeDisplay lifeDisplay;    static final int MinNeighbors = 2, MaxNeighbors = 3;}