// Abstract keys. Number keys set what color the background is and goes to if
// fade is set. 6-0 will clear the image as well. Fade can be activated with
// q and deactivated with p. All other alphabet keys draw different abstract
// figures based on the current frame and the previous frame in which a key was
// pressed or released.
int prevPressFrame, curPressFrame, frameReleased, bgColor, squareCount, dropOff;
float decay;
void setup(){
size(400,400);
bgColor = 255;
background(bgColor);
smooth();
squareCount = 0;
dropOff = 32;
}
void draw(){
}
void keyPressed(){
prevPressFrame = curPressFrame;
curPressFrame = frameCount;
decay = 400.0/(curPressFrame - prevPressFrame);
noFill();
stroke(255);
ellipse(200,200, decay, decay);
stroke(0);
ellipse(200,200, abs(decay-400), abs(decay-400));
fill(bgColor, dropOff);
rect(-1,-1,401,401);
char mykey = key;
switch(mykey){
case '1':
bgColor = 0;
break;
case '2':
bgColor = 64;
break;
case '3':
bgColor = 128;
break;
case '4':
bgColor = 192;
break;
case '5':
bgColor = 255;
break;
case '6':
bgColor = 0;
background(bgColor);
break;
case '7':
bgColor = 64;
background(bgColor);
break;
case '8':
bgColor = 128;
background(bgColor);
break;
case '9':
bgColor = 192;
background(bgColor);
break;
case '0':
bgColor = 255;
background(bgColor);
break;
case 'a':
fill(255);
stroke(0);
ellipse((curPressFrame%400), (curPressFrame%400), 40, 40);
break;
case 'b':
fill(255);
stroke(0);
ellipse((curPressFrame%400), 400-(curPressFrame%400), 40, 40);
break;
case 'c':
fill(255);
stroke(0);
ellipse(400-(curPressFrame%400), (curPressFrame%400), 40, 40);
break;
case 'd':
fill(255);
stroke(0);
ellipse(400-(curPressFrame%400), 400-(curPressFrame%400), 40, 40);
break;
case 'e':
fill(0);
stroke(255);
ellipse((curPressFrame%400), 200, 50, 50);
break;
case 'f':
fill(0);
stroke(255);
ellipse(200, (curPressFrame%400), 50, 50);
break;
case 'g':
fill(prevPressFrame%255);
stroke(255-prevPressFrame%255);
ellipse(random(400), curPressFrame%400, decay, decay);
break;
case 'h':
fill(255-prevPressFrame%255);
stroke(prevPressFrame%255);
ellipse(random(400), 400-frameReleased%400, decay, decay);
break;
case 'i':
for(int i = 0; i < (curPressFrame-prevPressFrame); i +=2){
stroke(i*(255/(curPressFrame-prevPressFrame)));
line(200, 200, (prevPressFrame + i)%400, 0);
}
break;
case 'j':
for(int i = 0; i < (curPressFrame-prevPressFrame); i +=2){
stroke(i*(255/(curPressFrame-prevPressFrame)));
line(200, 200, 0, 400-(prevPressFrame + i)%400);
}
break;
case 'k':
for(int i = 0; i < (curPressFrame-prevPressFrame); i +=2){
stroke(i*(255/(curPressFrame-prevPressFrame)));
line(200, 200, 400-(prevPressFrame + i)%400, 400);
}
break;
case 'l':
for(int i = 0; i < (curPressFrame-prevPressFrame); i +=2){
stroke(i*(255/(curPressFrame-prevPressFrame)));
line(200, 200, 400, (prevPressFrame + i)%400);
}
break;
case 'm':
noStroke();
fill(frameReleased%255);
rect(squareCount%4*100, (squareCount/4)%4*100, 100, 100);
squareCount ++;
break;
case 'n' :
noStroke();
fill(curPressFrame%255);
rect((int)random(4)*100, (int)random(4)*100, 100, 100);
break;
case 'o':
noStroke();
fill(random(255));
rect((int)random(2)*200, (int)random(2)*200, 200, 200);
break;
case 'p':
dropOff = 0;
break;
case 'q':
dropOff = 32;
break;
case 'r':
for(int i = 0; i < curPressFrame - frameReleased; i += 3){
stroke(random(255));
line((curPressFrame+i)%400, 0, 0, (curPressFrame+i)%400);
}
break;
case 's':
for(int i = 0; i < curPressFrame - frameReleased; i += 3){
stroke(random(255));
line(400-((curPressFrame+i)%400), 400, 400, 400-((curPressFrame+i)%400));
}
break;
case 't':
for(int i = 0; i < curPressFrame - frameReleased; i += 3){
stroke(random(255));
line(0, (curPressFrame+i)%400, 400-(curPressFrame+i)%400, 400);
}
break;
case 'u':
for(int i = 0; i < curPressFrame - frameReleased; i += 3){
stroke(random(255));
line(400, 400-((curPressFrame+i)%400), ((curPressFrame+i)%400), 0);
}
break;
case 'v':
for(int i = 0; i < curPressFrame - frameReleased; i += 3){
stroke(random(255));
line((curPressFrame+i)%400, 0, 0, 400-(curPressFrame+i)%400);
}
break;
case 'w':
for(int i = 0; i < curPressFrame - frameReleased; i += 3){
stroke(random(255));
line(400-((curPressFrame+i)%400), 400, 400, ((curPressFrame+i)%400));
}
break;
case 'x':
for(int i = 0; i < curPressFrame - frameReleased; i += 3){
stroke(random(255));
line(0, (curPressFrame+i)%400, (curPressFrame+i)%400, 400);
}
break;
case 'y':
for(int i = 0; i < curPressFrame - frameReleased; i += 3){
stroke(random(255));
line(400, 400-((curPressFrame+i)%400), 400-((curPressFrame+i)%400), 0);
}
break;
case 'z':
noStroke();
fill(random(255));
ellipse((int)random(2)*400, (int)random(2)*400, 400, 400);
break;
}
}
void keyReleased(){
frameReleased = frameCount;
switch(key){
}
}
Exercise 09: Create a black-and-white abstract image that changes in response to input from the keyboard. Utilize the keyPressed() and keyReleased() functions.