Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/*Title: Sailboat

By: Alex Olechnowicz

Date Submitted: October 4, 2017

Description: The sailboat moves horizontaly towards the mouse. The clouds loop through randomly.
When clicking in the water, the third that was clicked with corespond with eithor R,G, or B
and will tint that colour. Three lines are drawn towards where the mouse clicks in the water.*/

//Sail variables (most things are based on these)
int x1TrianglePos = 210;
int x2TrianglePos = 230;
int x3TrianglePos = 220;
int y1TrianglePos = 340;
int y2TrianglePos = 340;
int y3TrianglePos = 320;
//Cloud variables
float speed = 3;
int wind = 0;
//Default no tint
char colour = 'c';

//Initilization
void setup() {
  size(400, 400);
  frameRate(30);
}

//Draw function
void draw() {
  background(random(10, 30), random(10, 30), random(150, 180));
  fill(255);
  playerMovement();
  boat();
  sky();
  clouds();
  colourWater();
}

//Sky assets
void sky() {
  noStroke();
  fill(random(100, 150), random(175, 225), random(205, 250)); //Random shading
  rect(width-width, height-height, width, height/2.5); //Sky
}

//Movement controls
void playerMovement() {
  //Moves right toward mouse
  if (mouseX > x3TrianglePos &&  x2TrianglePos < width) {
    x1TrianglePos += speed;
    x2TrianglePos += speed;
    x3TrianglePos += speed;
  }
  //Moves Left toward mouse
  if (mouseX < x3TrianglePos &&  x1TrianglePos > 0) {
    x1TrianglePos -= speed;
    x2TrianglePos -= speed;
    x3TrianglePos -= speed;
  }
}  

//Boat assets
void boat() {
  triangle(x1TrianglePos, y1TrianglePos, x2TrianglePos, y2TrianglePos, x3TrianglePos, y3TrianglePos);
  stroke(1);
  line(x3TrianglePos, y1TrianglePos, x3TrianglePos, y1TrianglePos+5);
  fill(102, 51, 0);
  quad(x1TrianglePos-10, y1TrianglePos+5, x2TrianglePos+10, y2TrianglePos+5, x2TrianglePos+5, y2TrianglePos+15, x1TrianglePos-5, y1TrianglePos+15);
}

//Cloud assets
void clouds() {
  ellipseMode(CORNER);
  if (wind > width) {
    wind =0;
  } else {
    wind += 1;
  }
  for (int i = 0; i < 100; i++) {
    fill(150);
    noStroke();
    ellipse(random(-400+wind, 400+wind), random(0, 120), random(55, 70), random(20, 40));
  }
}

//Tinted water assets
void colourWater() {
  stroke(0);
  if (colour == 'c') {
    noFill();
  }
  if (colour == 'r') {
    fill(255, 0, 0, 75);
    rect(0, height/2.5, width/3, 239);
  }
  if (colour == 'g') {
    fill(0, 255, 0, 75);
    rect(width/3, height/2.5, width/3, 239);
  }
  if (colour == 'b') {
    fill(0, 0, 255, 75);
    rect(width/3*2, height/2.5, width/3, 239);
  }
}

//Runs when mouse is pressed
void mousePressed() {
  fill(0);
  stroke(0);
  if (mouseX > 0 && mouseX < 400 && mouseY > 150) {
    float xSpot = mouseX;
    float ySpot = mouseY;
    line(xSpot, ySpot, x3TrianglePos, y3TrianglePos);
    line(xSpot, ySpot, x2TrianglePos, y2TrianglePos);
    line(xSpot, ySpot, x1TrianglePos, y1TrianglePos);
    if (mouseX < width/3 &&  mouseY > 150) {
      colour = 'r';
    } else if (mouseX > width/3 && mouseX < width/3*2 && mouseY >150) {
      colour = 'g';
    } else if (mouseX > width/3*2 &&  mouseY >150) {
      colour = 'b';
    }
  }
}