www.pudn.com > onedimca.rar > CCA.java


package ca;
// Simple Java class for visualization of cellular automata.
// Juha Haataja, CSC, Finland.
// E-mail: Juha.Haataja@csc.fi.

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

// Container for the CA image data
class CA_Canvas extends Canvas implements Runnable {

  private int width = -1;
  private int height = -1;
  private int gridwidth=1;
  private int number,number2;
  private int type=0;
  private TotalisticCA CA = null;
  private int[] config = null;
  private Color[] coloring = null;
  private Image ca_picture = null;

  public CA_Canvas(int k, int r, long nr,int type1) {
    CA = new TotalisticCA(k, r, nr,type1);
    type=type1;
    coloring = get_colors(k);
  }

  public void reinit(int k, int r, long nr,int type1) {
    CA = new TotalisticCA(k, r, nr,type1);
    type=type1;
    coloring = get_colors(k);
  }

  private Color[] get_colors(int n) {
    Color[] result = new Color[n];
    float hue;
    int i;
    result[0] = Color.white;
    result[1] = Color.black;
    if (n > 2) {
      for (i = 2; i < n; i++) {
        hue = (i-2.0F)/(n-1.0F);
        result[i] = Color.getHSBColor(hue,1.0F,1.0F);
      }
    }
    return result;
    }

  public void run() {
    Graphics g;
    Dimension d = size();
    int[] ca_line;

    width = d.width;
    number= (int)(width/gridwidth);
    height = d.height;
    number2=(int)(height/gridwidth);

    config = CA.config_init(number);
    ca_picture = createImage(width,height);
    g = ca_picture.getGraphics();

    // Draw the background
    g.setColor(coloring[0]);
    g.fillRect(0, 0, width, height);

    // Draw the initial configuration
    for (int i = 0; i < number; i++) {
      g.setColor(coloring[config[i]]);
      g.fillRect(i*gridwidth, 0, gridwidth, gridwidth);
    }
    show_picture();

    // Compute and draw rest of the picture
    ca_line = config;
    for (int j = 1; j