import processing.core.*; import java.applet.*; import java.awt.*; import java.awt.image.*; import java.awt.event.*; import java.io.*; import java.net.*; import java.text.*; import java.util.*; import java.util.zip.*; public class Spuren extends PApplet {/**
 * @version Spuren.pde, Fre Aug  5 15:04:50 CEST 2006
 * @version spuren.java, Wed Jan 10 22:57:09 CET 1999
 * @author  Copyright (c) 1991 - 2006 by
 * @author  Thomas Feuerstein <http://feuerstein.myzel.net/>, Idee
 * @author  Armin Hanika, erste DOS Version 1991
 * @author  Peter Chiocchetti, Java Portierung 99-01-03
 * @author  Peter Chiocchetti <http://arton.cunst.net/>, Processing 06-08-05
 *
 * Das Spuren Sketch verschiebt in Streifen angeordnete Rechtecke in
 * unterschiedlichen Geschwindigkeiten von links nach rechts.
 * Ein Zufallsgenerator erzeugt verschiedene Werte, die Spuren
 * an ein Bild von Malewitsch oder an den Barcode auf einer
 * Verpackung erinnern lassen
 */

int numCols;
int numRows;
int cellWidth, cellHeight, maxPix;
int d[] = new int[300]; // per line shift speed
int i[] = new int[300]; // per line shift from the left
boolean r[] = new boolean[300]; // per line start color toggle
int black = color(0);
int white = color(255);

public void initSpuren() {
  initSpuren(PApplet.toInt(random(2, 50)), PApplet.toInt(random(2, 200)), 0);
}

public void initSpuren(int nc, int nr, int mp) {
  cellWidth  = width / nc;
  cellHeight = height / nr;
  numCols    = width / cellWidth;
  numRows    = height / cellHeight;
  if (width % cellWidth != 0)
    numCols++;
  if (height % cellHeight != 0)
    numRows ++;
  if (mp == 0)
    maxPix     = PApplet.toInt(random(5, cellWidth / 2));
  else
    maxPix = mp;
  println("Cols=" + numCols + " Rows=" + numRows
    + " cellW=" + cellWidth + " cellH=" + cellHeight 
    + " Speed=" + maxPix);

  for (int j = 0; j < numRows; ++j) {
    i[j] = 0;
    d[j] = PApplet.toInt(random(1, maxPix));
    r[j] = (j % 2 == 0) ? true : false;
  }
  background(192);
}

public void setup()
{
  size(768, 576);
  framerate(25);
  /*
  String pR = param("Rows");
  String pC = param("Cols");
  int pri = 0, prc = 0;
  print (pri);
  if (pR != null)
    pri = Integer.parseInt(pR);
  if (pC != null)
    prc = Integer.parseInt(pC);
  */
  initSpuren();
  noStroke();
}

public void draw() {
  int j, k, x, y, v;

  for (j = 0; j < numRows; ++j) {
    if (i[j] + d[j] < cellWidth)
      i[j] += d[j];
    else {
      i[j] = 0;
      d[j] = PApplet.toInt(random(1, maxPix));
      r[j] = !r[j];
    }
    y = j * cellHeight;
    x = 0;
    for (k = 0; k <= numCols; ++k) {
      if ((k % 2) == (r[j] ? 0 : 1))
        fill(white);
      else
        fill(black);
      switch(k) {
      case 0:
        x = 0;
        v = i[j];
        break;
      case 1:
        x += i[j];
        v = cellWidth;
        break;
      default:
        x += cellWidth;
        if (k == numCols)
          v = cellWidth -i[j];
        else
          v = cellWidth;
      }
      rect(x, y, v, cellHeight);
    }
  }
}

public void mousePressed() {
  initSpuren();
}

public void keyPressed() {
  if (key == 'b' || key == 'B')
    initSpuren(1, 200, 9);
  if (key == 'm' || key == 'M')
    initSpuren(2, 2, 3);
}
static public void main(String args[]) {   PApplet.main(new String[] { "Spuren" });}}