# Assignment 2

Concept

This code creates a canvas and displays a rainy scene with clouds and raindrops. The position of the x coordinate of the ellipse is set to 10 and the position of the y coordinate of the ellipse is set to 70. The sound of rain is preloaded and the setup function creates the canvas and sets the frame rate to 20. The function “raindrops” takes in two arguments, xPosition and ySpeed, and implements gravity by increasing the ySpeed by 0.05 and adding it to the yPosition. The ellipse is drawn at the updated x and y positions. The for loop in the draw function displays three clouds using multiple ellipses and creates falling raindrops using the raindrops function with random x positions and speeds. The code also plays the sound of rain every 15 frames.

Code

```let xPosition = 10; // Position of x coordinate of ellipse
let yPosition =70; // Position of y coordinate of ellipse
let gravityAcceleration = 0.05; // gravity acc set to 0.05
function setup() {
createCanvas(400, 400);
rainSound.play(); // playing sound
frameRate(20); // to control the speed of rain
}

soundFormats('mp3');
}
function raindrops(xPosition,ySpeed){
fill('#C4D3DF ');
ySpeed = ySpeed + gravityAcceleration; // implementing gravity
yPosition = yPosition + ySpeed;
ellipse(xPosition,yPosition,6,10);
if(yPosition > 450) // to make the rain drops fall again when the rain drops go past 450 in the canvas
{
yPosition =70;
ySpeed = 0;
}

}

function draw() {

background("#9099a1");
if (frameCount % 15 == 0)
{
rainSound.play(); //sound of rain plays
}

fill(255, 255, 255, 200); // opacity set to 200 and color is white
noStroke();

for (let i = 0; i < 3; i++) { //making three clouds with ellipses
let x = 70 + i * 130;
let y = 70;

ellipse(x, y, 80, 80);
ellipse(x - 30, y, 80, 80);
ellipse(x + 30, y, 80, 80);
ellipse(x - 15, y - 20, 80, 80);
ellipse(x + 15, y - 20, 80, 80);
}

for (let i = 10; i < 400; i+=10) //rain drops looped with different x position and  different speeds
{
raindrops(random(0,400),random(0,10));
}

}

```

Reflection and Future Improvements

Overall, it was a very fun project to work on as I tried to implement a Rain Storm. I tried to make it using what we have studied so far but learned the use of gravity to make the rain fall. Implementing gravity was the best part of the project. There are several areas where improvements could be made to enhance the realism and overall quality of the code. For instance, the raindrops could be made more random in both their appearance and speed to create a more realistic simulation. Instead of hardcoding the raindrops and clouds, the code could be optimized by using arrays and loops to create them, making the code more efficient and scalable. Furthermore, the code could be extended to include other elements such as lightning or wind, adding to the overall atmosphere of the rainy scene. Another area for improvement is adding user interactivity, such as the ability for the user to control the volume of the sound or the size of the raindrops. The code provides a basic foundation for creating a rainy scene, but there is still room for development and improvement to create an even more immersive and engaging experience.