Surprising Space: Movement, Gradation, Radiation, and Anomaly

By: Yuna Wu

let x, y;
var stars = [];
 
function setup() {
  createCanvas(1800,780)
  //Stars
  for (var i = 0; i < 1000; i++) {
		stars[i] = new Star();
	}
  // Starts in the middle
  x = width / 2;
  y = height / 2;
  //radiation  
 //noLoop();
}
 
class Planet {
  constructor (pSize, sColor, startingX, startingY)
  { this.planetSize = pSize;
    this.planetColor = sColor;
    this.positionX = startingX;
    this.positionY = startingY;
  }
  draw () {
  colorMode(RGB, 255)
  noStroke();
  fill(240, 235, 221);
  ellipse(this.positionX+80, 85, 150, 150); 
  fill(201, 195, 177)
  ellipse(this.positionX+40, 85, 30, 50);
  ellipse(this.positionX+100, 60, 50, 40);
  ellipse(this.positionX+100, 120, 40, 45);
}
}

class UFO {
  constructor (startingX, startingY, scale)
  { this.positionX = startingX;
    this.positionY = startingY;
    this.scale = scale;
  }
  draw () {
  colorMode(RGB, 255)
  noStroke();
  scale(this.scale);
  fill(57, 44, 153);
  rect(this.positionX+220, this.positionY+1, 6, 35, 20);
  circle(this.positionX+223, this.positionY+6, 10);
  fill(215, 215, 224);
  ellipse(this.positionX+226, this.positionY+46, 75, 45);
  fill(161, 161, 230);
  ellipse(this.positionX+226, this.positionY+66, 115, 45);
  fill(12, 72, 105);
  ellipse(this.positionX+226, this.positionY+66, 19, 19);
  fill(131, 133, 138);
  ellipse(this.positionX+205, this.positionY+55, 10, 10);
  ellipse(this.positionX+200, this.positionY+75, 10, 10);
  ellipse(this.positionX+185, this.positionY+60, 10, 10);
  ellipse(this.positionX+245, this.positionY+55, 10, 10);
  ellipse(this.positionX+250, this.positionY+75, 10, 10);
  ellipse(this.positionX+265, this.positionY+60, 10, 10);
  resetMatrix();
  
}
}
 
function uFOArray (n) {
    let outputArray = [];
    for (let i = 0; i < n ; i++) {
        outputArray.push(new UFO (10+(i*3), 120, (i*0.15)))
    }
    return outputArray
}
 
let myUFOs = uFOArray(8);

//black hole
class blackHole {
	constructor(startingX, startingY, s) {
		this.positionX = startingX;
        this.positionY = startingY;
        this.size = s
	}
	draw() {
      noStroke();
    colorMode(HSB, 360, 100, 100);
    let dim = this.size;
  let radius = dim/2;
  //let h = random(0, 360);
    let h = 10;
  let b = 0;
  for (let r = radius; r > 0; --r) {
    fill(h, 100, b);
    ellipse(this.positionX, this.positionY, r, r);
     h = (h + 0.2) % 360;
    b = b+1
    fill(0)
    ellipse(this.positionX, this.positionY,55, 55);
  }
	}
}

//Rockets class
class Rocket {
	constructor(startingX, startingY) {
		this.positionX = startingX;
        this.positionY = startingY
	}
	draw() {
        translate(this.positionX+180,this.positionY+50);
        rotate(radians(-10));
        //fire
        //fill(252, 210, 104);
        //ellipse(248, 406, 85, 185);
        //fill(122, 34, 24);
        //ellipse(248, 406, 55, 155);
        //rocket
        fill(191, 187, 187);
		rect(200, 250, 95, 155, 20);
        fill(201, 71, 71);
        triangle(200, 265, 295, 265, 248, 175);
        ellipse(248, 306, 55, 55);
        fill(186, 219, 230);
        ellipse(248, 306, 45, 45);
        noFill();
        stroke(255);
        resetMatrix();
	}
}



// star class //
class Star {
	constructor() {
		this.x = random(width);
		this.y = random(height);
		this.size = random(0.25, 3);
		this.t = random(TAU);
	}
	
	draw() {
		this.t += 0.1;
		var scale = this.size + sin(this.t) * 2;
        fill(255)
		noStroke();
		ellipse(this.x, this.y, scale, scale);
	}
}

 
function draw() {
  background(1, 3, 28);
  //stars
  for (var i = 0; i < stars.length; i++) {
		stars[i].draw();
	}
  let blackHole1 = new blackHole (500, 200, 500)
  blackHole1.draw();
  colorMode(RGB, 255)
  let g = drawingContext.createLinearGradient(200,250, 200,500);
  g.addColorStop(0, color(225,0));
  g.addColorStop(0.5, color(180, 208, 240));
  g.addColorStop(1, color(225,0));
  drawingContext.fillStyle = g;
  noStroke();
  square(0,0,1800)
  //rocket
  colorMode(RGB, 255)
  let g2 = drawingContext.createLinearGradient(280,250, 150,800);
  g2.addColorStop(0, color(255));
  g2.addColorStop(0.2, color(255, 180, 0));
  g2.addColorStop(1, color(45, 3, 0));
  drawingContext.fillStyle = g2;
  translate(this.positionX+180,this.positionY+50);
  rotate(radians(-10));
  ellipse(426, 620, 95, 485);
  resetMatrix();
  let g3 = drawingContext.createLinearGradient(350, 340, 250,500);
  g3.addColorStop(0, color(255));
  g3.addColorStop(0.5, color(255, 249, 194));
  g3.addColorStop(0.9, color(194, 164, 16));
  g3.addColorStop(1, color(200, 100, 0));
  drawingContext.fillStyle = g3;
  translate(this.positionX+180,this.positionY+50);
  rotate(radians(-10));
  ellipse(426, 520, 75, 205);
  resetMatrix();
  //plante
 let planet1 = new Planet (10, "blue", 10, 10)
  planet1.draw();
  
 let rockest1 = new Rocket(10, 10)
 rockest1.draw();
  for(let i = 0; i < myUFOs.length ; i++){
    myUFOs[i].draw()
  }
}

Back to Yuna Wu's Page