Cindy - M

By Cindy Chi
/* CINDY CHI NOV. 19, 2008 DMA 28: INTERACTIVITY EXCERCISE M For processing monsters. http://rmx.cz/monsters/ Click somewhere to produce a piece of food and the monsters will come and eat it! The monsters take turns to eat startig from the top left corner. */ int numMonsters = 9; Monster[] monsters = new Monster[numMonsters]; float[] monsterX = {64, 190, 320, 66.5, 185, 320, 70, 220, 335}; float[] monsterY = {66.5, 70, 80, 175, 185, 210, 330, 325, 330}; int[] monsterSize = {3, 5, 7, 4, 3, 6, 5, 6, 3}; float[] monsterEyes = {10, 13, 20, 12, 10, 15, 12, 14, 10}; float[] monsterMouthW = {8, 12, 15, 10, 8, 13, 12, 13, 8}; float[] monsterMouthH = {7, 10, 13, 8, 7, 12, 10, 11, 7}; boolean drawn = false; float circleX = 0.0; float circleY = 0.0; int counter = 0; //counts which monster gets to eat float easing = 0.07; float startMillis; boolean smile = false; void setup() { size(400, 400); smooth(); for(int i = 0; i < monsters.length; i++) { monsters[i] = new Monster(); } } void draw() { background(0); //Assign and display monsters for(int i = 0; i < monsterX.length; i++) { monsters[i].assign(monsterX[i], monsterY[i], monsterSize[i], monsterEyes[i], monsterMouthW[i], monsterMouthH[i]); monsters[i].display(); } //Feeding monsters if(drawn == true) { stroke(255); strokeWeight(2); monsters[counter - 1].eat(counter - 1); ellipse(circleX, circleY, 20, 20); } } class Monster { float inc = 0.0; //for tal float currentTime = millis(); float x; float y; int tents; float eyes; float mouthW; float mouthH; void assign(float xpos, float ypos, int tentacles, float eyeSpace, float mouthWidth, float mouthHeight) { x = xpos; y = ypos; tents = tentacles; eyes = eyeSpace; mouthW = mouthWidth; mouthH = mouthHeight; } void display() { currentTime = millis(); stroke(255); inc += 0.02; //increases speed of tail bending float angle = sin(inc) / 10.0 + sin(inc * 1.2) / 20.0; pushMatrix(); translate(x, y); tail(0, 0, tents, angle * 1.01); rotate(radians(5)); tail(0, 0, tents + 5, angle * .5); rotate(radians(5)); tail(0, 0, tents + 3, angle * 1.01); rotate(radians(5)); tail(0, 0, tents - 2, angle * 1.04); rotate(radians(5)); tail(0, 0, tents, angle * .3); rotate(radians(5)); tail(0, 0, tents, angle * 1.05); rotate(radians(5)); tail(0, 0, tents + 2, angle * .5); rotate(radians(5)); tail(0, 0, tents - 3, angle * 1.03); rotate(radians(5)); tail(0, 0, tents + 1, angle * .7); rotate(radians(5)); tail(0, 0, tents + 4, angle * .3); rotate(radians(5)); tail(0, 0, tents, angle * .3); rotate(radians(5)); tail(0, 0, tents + 2, angle * 1.03); rotate(radians(5)); tail(0, 0, tents - 3, angle * .5); rotate(radians(5)); tail(0, 0, tents + 3, angle * 1.02); rotate(radians(5)); tail(0, 0, tents - 1, angle * 1.01); rotate(radians(5)); tail(0, 0, tents, angle * .4); rotate(radians(5)); tail(0, 0, tents + 5, angle * 1.05); rotate(radians(5)); tail(0, 0, tents + 3, angle * .6); rotate(radians(5)); tail(0, 0, tents - 2, angle * 1.03); rotate(radians(5)); tail(0, 0, tents, angle * .9); rotate(radians(5)); tail(0, 0, tents + 2, angle * .3); rotate(radians(5)); tail(0, 0, tents + 1, angle * 1.03); rotate(radians(5)); tail(0, 0, tents - 2, angle * 1.05); rotate(radians(5)); tail(0, 0, tents + 4, angle * .5); rotate(radians(5)); tail(0, 0, tents - 3, angle * 1.04); rotate(radians(5)); tail(0, 0, tents + 5, angle * .9); rotate(radians(5)); tail(0, 0, tents + 2, angle * .6); rotate(radians(5)); tail(0, 0, tents - 2, angle * 1.02); rotate(radians(5)); tail(0, 0, tents, angle * 1.03); rotate(radians(5)); tail(0, 0, tents + 4, angle * .3); rotate(radians(5)); tail(0, 0, tents, angle * .3); rotate(radians(5)); tail(0, 0, tents + 2, angle * .5); rotate(radians(5)); tail(0, 0, tents - 1, angle * 1.03); rotate(radians(5)); tail(0, 0, tents + 3, angle * 1.02); rotate(radians(5)); tail(0, 0, tents - 1, angle * 1.03); rotate(radians(5)); tail(0, 0, tents + 1, angle * .5); rotate(radians(5)); tail(0, 0, tents, angle * .9); rotate(radians(5)); tail(0, 0, tents - 3, angle * .2); rotate(radians(5)); tail(0, 0, tents + 2, angle * 1.02); rotate(radians(5)); tail(0, 0, tents + 3, angle * .4); rotate(radians(5)); tail(0, 0, tents + 5, angle * .3); rotate(radians(5)); tail(0, 0, tents, angle * 1.03); rotate(radians(5)); tail(0, 0, tents + 2, angle * 1.01); rotate(radians(5)); tail(0, 0, tents - 2, angle * 1.04); rotate(radians(5)); tail(0, 0, tents - 3, angle * .4); rotate(radians(5)); tail(0, 0, tents - 2, angle * .2); rotate(radians(5)); tail(0, 0, tents, angle * .6); rotate(radians(5)); tail(0, 0, tents + 5, angle * 1.02); rotate(radians(5)); tail(0, 0, tents - 1, angle * 1.03); rotate(radians(5)); tail(0, 0, tents + 2, angle * .9); rotate(radians(5)); tail(0, 0, tents, angle * .7); rotate(radians(5)); tail(0, 0, tents + 2, angle * 1.03); rotate(radians(5)); tail(0, 0, tents + 5, angle * 1.01); rotate(radians(5)); tail(0, 0, tents - 1, angle * 1.04); rotate(radians(5)); tail(0, 0, tents -3, angle * 1.03); rotate(radians(5)); tail(0, 0, tents, angle * .2); rotate(radians(5)); tail(0, 0, tents - 2, angle * .3); rotate(radians(5)); tail(0, 0, tents + 4, angle * 1.03); rotate(radians(5)); tail(0, 0, tents + 1, angle * 1.05); rotate(radians(5)); tail(0, 0, tents, angle * .3); rotate(radians(5)); tail(0, 0, tents + 2, angle * .4); rotate(radians(5)); tail(0, 0, tents + 4, angle * .7); rotate(radians(5)); tail(0, 0, tents - 2, angle * 1.02); rotate(radians(5)); tail(0, 0, tents, angle * .9); rotate(radians(5)); tail(0, 0, tents - 3, angle * 1.03); rotate(radians(5)); tail(0, 0, tents + 5, angle * 1.05); rotate(radians(5)); tail(0, 0, tents + 2, angle * .7); rotate(radians(5)); tail(0, 0, tents + 1, angle * .4); rotate(radians(5)); tail(0, 0, tents, angle * 1.03); rotate(radians(5)); tail(0, 0, tents - 1, angle * 1.02); rotate(radians(5)); tail(0, 0, tents + 1, angle * 1.03); rotate(radians(5)); tail(0, 0, tents + 4, angle * .8); rotate(radians(5)); tail(0, 0, tents - 3, angle * .3); popMatrix(); //blinking eyes fill(0); if(smile == true) //when eats food { monsters[counter-1].smile(); } else { if(currentTime%50 == 0) //blink { stroke(0); strokeWeight(2); line(x - eyes, y, x - (eyes - 3), y); line(x + eyes, y, x + (eyes - 3), y); } else //regular eyes { ellipse(x - (eyes - 5), y, 5, 15); ellipse(x + (eyes - 5), y, 5, 15); } } } //EATING void eat(int whichMonster) { int i = whichMonster; //mouth for eating strokeWeight(2); rect(monsterX[i] - (mouthW/2), monsterY[i] + 5, mouthW, mouthH); monsterX[i] += (circleX - monsterX[i]) * easing; monsterY[i] += ((circleY - 15) - monsterY[i]) * easing; if(circleX >= monsterX[i] - 10 && circleX <= monsterX[i] + 10 && circleY >= monsterY[i] + 5 && circleY <= monsterY[i] + 35) { drawn = false; startMillis = millis(); smile = true; } } //HAPPY EYES WHEN EATS void smile() { if(currentTime - startMillis <= 1000) { stroke(0); strokeWeight(2); //left eye line(x - eyes, y, x - (eyes - 5), y - 5); line(x - (eyes - 5), y - 5, x - (eyes - 10), y); //right eye line(x + eyes, y, x + (eyes - 5), y - 5); line(x + (eyes - 5), y - 5, x + (eyes - 10), y); inc += 0.4; //increases speed of tentacles } else { smile = false; inc += 0.02; } } } void tail(int x, int y, int units, float angle) //x, y, length, angle of bend { pushMatrix(); translate(x, y); for (int i = units; i > 0; i--) { strokeWeight(i); //changes thickness line(0, 0, 0, .5); translate(0, -8); //controls closeness of lines rotate(angle); } popMatrix(); } void mousePressed() { drawn = true; circleX = mouseX; circleY = mouseY; if(counter < 9) { counter++; } else { counter = 1; } }

One Comment

  1. Posted November 25, 2008 at 2:55 pm | Permalink

    Cindy, this is programmed in a strange way. Let’s talk about it to clarify some things.

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*