sketchDownload
/* Jiayi Chen
jiayiche Section A */
//arrays for display
var birds=[];
var clouds=[];
var flyObject =[];
//array for image storage
var birdsImg=[];
var cloudsImg=[];
var flyObjectImg =[];
//array for links
var cloudLinks = [
"https://i.imgur.com/suIXMup.png",
"https://i.imgur.com/7ZHCI63.png",
"https://i.imgur.com/EFb0w3u.png",
"https://i.imgur.com/PxLKy41.png"];
var birdLinks = [
"https://i.imgur.com/Gr1VTU5.png",
"https://i.imgur.com/EmRp42l.png",
"https://i.imgur.com/vLWSU4h.png",
"https://i.imgur.com/Y9BecjA.png"];
var flyObjectLink = [
"https://i.imgur.com/IXz53Lj.png",
'https://i.imgur.com/UsKzDwg.png'];
//load the images
function preload(){
airplane = loadImage("https://i.imgur.com/bEPeF8a.png");
for (var i = 0; i < cloudLinks.length; i++){
cloudsImg[i] = loadImage(cloudLinks[i]);
}
for (var i = 0; i < birdLinks.length; i++){
birdsImg[i] = loadImage(birdLinks[i]);
}
for (var i = 0; i < flyObjectLink.length; i++){
flyObjectImg[i] = loadImage(flyObjectLink[i]);
}
}
function setup() {
createCanvas(480, 480);
imageMode(CENTER);
//initial clouds
for (var i = 0; i < 3; i++){
var rc = floor(random(cloudsImg.length));
clouds[i] = makeCloud(random(width),random(100,300),random(height),cloudsImg[rc]);
}
frameRate(10);
}
function draw() {
background(135,206,235);
sun()
updateAndDisplayClouds();
addNewobjectsWithSomeRandomProbability();
removeObjectsThatHaveSlippedOutOfView();
image(airplane,200,constrain(250+random(-5,5),240,260),200,200);
}
function sun(){
push();
fill('orange');
circle(60,60,50);
fill('red');
circle(60,60,40);
}
function updateAndDisplayClouds(){
// Update the clouds's positions, and display them.
for (var i = 0; i < clouds.length; i++){
clouds[i].move();
clouds[i].display();
}
// Update the birds's positions, and display them.
for (var i = 0; i < birds.length; i++){
birds[i].move();
birds[i].display();
}
// Update the flyThings's positions, and display them.
for (var i = 0; i < flyObject.length; i++){
flyObject[i].move();
flyObject[i].display();
}
}
//remove out of sight things
function removeObjectsThatHaveSlippedOutOfView(){
//remove out of sight clouds
var cloudsToKeep = [];
for (var i = 0; i < clouds.length; i++){
if (clouds[i].x + clouds[i].size/2 > 0) {
cloudsToKeep.push(clouds[i]);
}
}
clouds = cloudsToKeep; // remember the surviving clouds
//remove out of sight birds
var birdsToKeep = [];
for (var i = 0; i < birds.length; i++){
if (birds[i].x + birds[i].size/2 > 0){
birdsToKeep.push(birds[i]);
}
}
birds = birdsToKeep; // remember the surviving birds
//remove out of sight fly things
var FlyesToKeep = [];
for (var i = 0; i < flyObject.length; i++){
if (flyObject[i].x + flyObject[i].size/2 > 0) {
FlyesToKeep.push(flyObject[i]);
}
}
flyObject = FlyesToKeep; // remember the surviving fly things
}
function addNewobjectsWithSomeRandomProbability() {
// With a low probability, add a new clouds to the end.
var newCloudLikelihood = 0.02;
if (random(0,1) < newCloudLikelihood) {
var rc = floor(random(cloudsImg.length));
clouds.push(makeCloud(width+75,random(100,150),random(height),cloudsImg[rc]));
}
// With a low probability, add a new birds to the end.
var newbirdLikelihood = 0.03;
if (random(0,1) < newbirdLikelihood) {
var rc = floor(random(birdsImg.length));
clouds.push(makeBirds(width+30,random(30,60),random(height),floor(random(birdsImg.length))));
}
// With a low probability, add a new flying things to the end.
var newObejctLikelihood = 0.01;
if (random(0,1) < newObejctLikelihood) {
var rc = floor(random(flyObjectImg.length));
clouds.push(makeFly(width+50,random(50,100),random(0,240),flyObjectImg[rc]));
}
}
//make clouds as objects
function makeCloud(birthLocationX,cs,ch,cloudCartoon) {
var cldg = {x: birthLocationX,
size: cs,
y:ch,
speed: -1.0,
cartoon:cloudCartoon,
move: cloudMove,
display: cloudDisplay}
return cldg;
}
function cloudMove() {//move clouds
this.x += this.speed;
}
function cloudDisplay(){
image(this.cartoon, this.x, this.y,this.size, this.size);
}
//make birds as objects
function makeBirds(birthLocationX,cs,ch,birdCartoon) {
var mb = {x: birthLocationX,
size: cs,
y:ch,
speed: -3.0,
cartoonNumber:birdCartoon,
move: birdsMove,
display: birdsDisplay}
return mb;
}
function birdsMove() {
if(this.cartoonNumber == 0 || this.cartoonNumber == 1){
this.x += this.speed/2; //birds facing to the left are flying slower
this.y += random(-3,3); //randomly fly
}else{
this.x += this.speed;
this.y += random(-5,5); //randomly fly
}
}
function birdsDisplay(){
image(birdsImg[this.cartoonNumber], this.x, this.y,this.size, this.size);
}
//make other flying things as objects
function makeFly(birthLocationX,cs,ch,flyCartoon) {
var mf = {x: birthLocationX,
size: cs,
y:ch,
speed: -2.0,
cartoon:flyCartoon,
move: flyMove,
display: flyDisplay}
return mf;
}
function flyMove() {//move flying objects
this.x += this.speed;
//gravity for things without wings
this.y -=this.speed/4;
}
function flyDisplay(){
image(this.cartoon, this.x, this.y,this.size, this.size);
}