Sunday, March 14, 2010

snakePatch

int[] x;
int[] y;
int LEN = 19;
int xDir = 0;
int yDir = 1;
int xMax = 32;
int yMax = 32;
float yScale;
float xScale;

void setup() {
  smooth();
  size(300,300);
  x = new int[LEN];
  y = new int[LEN];
  background(255);
  for (int i = 0; i < LEN; ++i) {
    x[i] = 0;
    y[i] = 0;
  }
  xScale = (float) width / (float) xMax;
  yScale = (float) height / (float) yMax;
  frameRate(10);
}

void draw() {
  noStroke();
  // clear tail
  fill(255);
  rect(x[LEN-1] * xScale, y[LEN-1] * yScale, xScale, yScale);  

  // shift body (can't be arsed with ring buffer)
  for (int i = LEN-1; i > 0; --i) {
    x[i] = x[i-1];
    y[i] = y[i-1];
  }

  // move head
  x[0] += xDir;
  y[0] += yDir;

  // connect edges
  x[0] %= xMax;
  y[0] %= yMax;

  if (x[0] < 0) {
    x[0] = xMax;
  }
  if (y[0] < 0) {
    y[0] = yMax;
  }

  // draw head
  fill(255,0,255);
  rect(x[0] * xScale, y[0] * yScale, xScale, yScale);  

  // draw first segment
  fill(128);
  rect(x[1] * xScale, y[1] * yScale, xScale, yScale);  

  if (random(1) > 0.8) {
    spin();
  }
}

void spin() {
  float r = random(1);
  // Either turn left or right
  if (yDir == 0) {
    xDir = 0;
    yDir = r > 0.5 ? 1 : -1;
  }
  else {
    xDir = r > 0.5 ? 1 : -1;
    yDir = 0;
  }
}

info info

submitted by: lxyxpx
views: 



Tags: snake, worm

comments comment

loading loading...

 

Add a comment: