Make it rain… again.

This is the updated version of my raincloud sketch, rewritten with functions and a few improvements. And now you can play with it directly in my blog! (If it doesn’t work, here’s the link.)

And here is the code:

[code lang="java"]
//Kim Ash
//Raincloud program redone with functions.

int x;  //moving cloud position
int y;  

int x1 = 180;  //stationary cloud 1 position
int y1 = 120;
int x2 = 690;  //stationary cloud 2 position
int y2 = 120;

int cloudfill = 255;

void setup()
{
  size(700, 700);
}

void draw()
{
  //sky
  background(153, 218, 252);
  
  smooth();
  
  //sun
  fill(255,255, 0);
  ellipse(390, 97, 100, 100);
  
  //grass
  fill(85, 252, 3);
  rect(0, 450, 700, 250);
  for(int g=450; g<=700; g+=20)
  {
      stroke(29, 137, 0);
      line(0, g, 700, g);
      line(0, g, 700, g+40);
  }
  
  //println("x = " + mouseX + "t y = " + mouseY);
  cloud(mouseX, mouseY);
  
  scale(.9);
  cloud(x1, y1);
  scale(1.11);
  scale(.8);
  cloud(x2, y2);
  scale(1.25);
  
  //rain falls when the moving cloud covers the sun
  if (mouseX >= 310 && mouseX <= 387 && mouseY >= 13 && mouseY <= 96)
  {
    cloudfill = 150;
    for(int i=0; i<=200; i++)
    {
      //rain
      fill(0, 0, 255);
      rect(random(700), random(210,700), 2, 15);
    }
    
  }
 else
  cloudfill = 255; 

}

void cloud(int x, int y)
{
  noStroke();
  fill(cloudfill);
  ellipse(x, y, 110, 110);
  ellipse(x-60, y+40, 110, 110);
  ellipse(x+60, y+40, 110, 110);
  ellipse(x+60, y+80, 250, 100);
  ellipse(x-60, y+80, 250, 100);
  ellipse(x, y+80, 250, 100);
}[/code]