import java.applet.*; import java.awt.*; import java.awt.event.*; public class CATest extends Applet implements ActionListener { int number = 351; Cell c[]; int mode; boolean drawn = false; List list; public void init() { number = getSize().width / 2 - 5; c = new Cell[number]; try { mode = Integer.parseInt(getParameter("mode")); } catch (NumberFormatException e) {mode=30;} for (int i = 0; i < number; ++i) { c[i] = new Cell(mode); if (i == number / 2) { c[i].setState(true); } } list = new List(4); list.addActionListener(this); for (int i = 0; i < 255; ++i) { list.add(new Integer(i).toString()); } list.select(mode); add(list); } public void start() { setBackground(new Color(255, 255, 255)); } public void paint(Graphics g) { for (int i = 0; i < number; ++i) { c[i].setState(false); if (i == number / 2) { c[i].setState(true); } } for (int j = 0; j < number; ++j) { c[j].draw(g, j * 2, 100); } for (int i = 0; i < number / 2; ++i) { // int pos = 0; boolean next_states[] = new boolean[number]; next_states[0] = c[0].getNextState(new Cell(mode), c[1]); for (int j = 1; j < number - 1; ++j) { next_states[j] = c[j].getNextState(c[j - 1], c[j + 1]); } next_states[number - 1] = c[number - 1].getNextState(c[number - 2], new Cell(mode)); for (int j = 0; j < number; ++j) { c[j].setState(next_states[j]); c[j].draw(g, j * 2, (i + 1) * 2 + 100); } if (!drawn) { try { // Thread.sleep(50); } catch (Exception e) { ; } } } drawn = true; } public void stop(Graphics g) { } public void destroy(Graphics g) { } public void actionPerformed(ActionEvent e) { mode = Integer.parseInt(e.getActionCommand()); for (int i = 0; i < number; ++i) { c[i].setMode(mode); if (i == number / 2) { c[i].setState(true); } else { c[i].setState(false); } } repaint(); } } class Cell { private boolean state; private int mode = 30; public Cell(int the_mode) { state = false; mode = the_mode % 256; } public boolean getState() { return state; } public void setState(boolean new_state) { state = new_state; } public int getMode() { return mode; } public void setMode(int newmode) { mode = newmode % 256; } public boolean getNextState(Cell left, Cell right) { boolean left_state = left.getState(); boolean right_state = right.getState(); if (!left_state && !right_state && !state) { return ((mode & 1) > 0); } else if (!left_state && right_state && !state) { return ((mode & 2) > 0); } else if (!left_state && !right_state && state) { return ((mode & 4) > 0); } else if (!left_state && right_state && state) { return ((mode & 8) > 0); } else if (left_state && !right_state && !state) { return ((mode & 16) > 0); } else if (left_state && right_state && !state) { return ((mode & 32) > 0); } else if (left_state && !right_state && state) { return ((mode & 64) > 0); } else if (left_state && right_state && state) { return ((mode & 128) > 0); } return false; } public void draw(Graphics g, int x, int y) { if (state) { g.drawRect(x, y, 2, 2); } // else { // g.clearRect(x, y, 10, 10); // } } }