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;
}
}
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;
}
}
comments
loading...
Add a comment:
