/*
Title: Art World
Creator: Aaron Munavish Hogarth
Intro to Media Computation
Oct 3, 2018
Instructor: Nicolas Hesler
Instructions: Hit the play button to begin playing "Art World" (Disclaimer no longer a game
fully about art because rules). Once in, use the mouse click function
to draw lines and use the WASD keys to move the eraser around.
"We don't make mistakes, just happy little accidents." - Bob Ross
*/
//Colour value list starts
int redColourR = 240;
int redColourG = 29;
int redColourB = 31;
int eraserPinkR = 255;
int eraserPinkG = 172;
int eraserPinkB = 246;
int mountainR = 71;
int mountainG = 94;
int mountainB = 163;
int purplePaintR = 100;
int purplePaintG = 0;
int purplePaintB = 240;
int bluePaintR = 0;
int bluePaintG = 0;
int bluePaintB = 255;
int greenPaintR = 0;
int greenPaintG = 255;
int greenPaintB = 0;
int yellowPaintR = 245;
int yellowPaintG = 255;
int yellowPaintB = 0;
int orangePaintR = 255;
int orangePaintG = 152;
int orangePaintB = 0;
int redPaintR = 255;
int redPaintG = 0;
int redPaintB = 0;
int pinkPaintR = 255;
int pinkPaintG = 0;
int pinkPaintB = 188;
int blackPaint = 0;
int whitePaint = 255;
int i = 10;
int j = 10;
//Colour value list ends
//Eraser tool varaibles
int eraserTool = 255;
int eraserX = 20;
int eraserY = 340;
int eraserXmove = 0;
int eraserYmove = 0;
float eraserSpeed = 3;
//Sharpness value list
int sharpnessOne = 5;
int sharpnessTwo = 20;
int sharpnessThree = 40;
int sharpnessFour = 60;
//Cloud values
float cloudX = 0;
float cloudY = 0;
float cloudSpeed = 0.2;
//Draw mouse values
float mouseStartX;
float mouseStartY;
//Boolean values for menus
boolean isPlay = true;
boolean mousePressedDown = false;
// Booleans for art related mechanics
boolean doDrawLine;
boolean doRedStroke;
boolean doBlueStroke;
boolean doGreenStroke;
boolean doYellowStroke;
boolean doPurpleStroke;
boolean doOrangeStroke;
boolean doPinkStroke;
boolean doBlackStroke;
boolean doWhiteStroke;
boolean randomColour;
boolean sharpnessNormal;
boolean sharpnessThick;
boolean sharpnessThick2;
boolean sharpnessThick3;
boolean sharpnessThickRandom;
// Setup start
void setup() {
frameRate(60);
size (400, 400);
println("Click to start!");
}
void draw() {
// Boolean switching through menus from titlescreen to play
if (isPlay) {
titleScreen();
} else {
play();
updateEraser();
drawLine();
}
}
// Games title screen
void titleScreen() {
background(121, 82, 48);
//Looped background
stroke(0);
strokeWeight(1);
for (int i = 0; i <400; i+= 30) {
for (int j = 10; j <400; j+= 30) {
line(j, i, j, i+50);
}
}
noStroke();
// Drawing the Cavas
fill(255);
rect(20, 130, 200, 250);
//Drawing letters (Letter A)
fill(redColourR, redColourG, redColourB);
//Left side of letter
rect(20, 50, 10, 50);
//Right side of letter
rect(40, 50, 10, 50);
//Middle bridge of letter
rect(30, 60, 10, 10);
//Top bridge of A
rect(30, 40, 10, 10);
//End of A
//(Start of r) Stem of r
rect(60, 50, 10, 50);
//bridge of r 1
rect(70, 50, 10, 10);
//bridge of r 2
rect(80, 60, 20, 10);
//End of r
//(Start of t) Stem of t
rect(120, 40, 10, 60);
//bridge of t
rect(110, 50, 30, 10);
//end of t
//(Start of w) left side of w
rect(170, 40, 10, 50);
//First connection bridge of w
rect(180, 90, 10, 10);
//middle of w
rect(190, 40, 10, 50);
//Second connection bridge of w
rect(200, 90, 10, 10);
//Right side of w
rect(210, 40, 10, 50);
//end of w
//(Start of o) left side of o
rect(230, 50, 10, 40);
//bottom bridge of o
rect(240, 90, 20, 10);
//top bridge of o
rect(240, 40, 20, 10);
//right side of o
rect(260, 50, 10, 40);
//end of 0
//(Start of r) Stem of r
rect(280, 50, 10, 50);
//bridge of r 1
rect(290, 50, 10, 10);
//bridge of r 2
rect(300, 60, 20, 10);
//End of r
//(start of l) l
rect(330, 40, 10, 60);
//end of l
//(Start of d) left side of d
rect(350, 70, 10, 20);
//bottom bridge of d
rect(360, 90, 20, 10);
//stem of d
rect(370, 40, 10, 50);
//top bridge of d
rect(360, 70, 20, 10);
//Big red button
ellipse(300, 300, 100, 100);
//Shine on big red button
fill(0, 0, 0, 50);
ellipse(300, 300, 60, 60);
}
// End of title screen
// Beginning of play screen
void play() {
//Circle behind sky *test*
stroke(0);
fill(0);
ellipse(20, 20, 20, 20);
noStroke();
//Sky background list
fill(29, 226, 240);
rect(0, 370, 400, 30);
fill(29, 220, 240);
rect(0, 340, 400, 30);
fill(29, 215, 240);
rect(0, 310, 400, 30);
fill(29, 210, 240);
rect(0, 280, 400, 30);
fill(29, 205, 240);
rect(0, 250, 400, 30);
fill(29, 200, 240);
rect(0, 220, 400, 30);
fill(29, 195, 240);
rect(0, 190, 400, 30);
fill(29, 190, 240);
rect(0, 160, 400, 30);
fill(29, 185, 240);
rect(0, 130, 400, 30);
fill(29, 180, 240);
rect(0, 100, 400, 30);
fill(29, 175, 240);
rect(0, 70, 400, 30);
fill(29, 170, 240);
rect(0, 40, 400, 30);
fill(29, 165, 240);
rect(0, 10, 400, 30);
fill(29, 160, 240);
rect(0, 0, 400, 30);
// Sky background ends
//Sun top left
fill(yellowPaintR, orangePaintG, orangePaintB);
ellipse(40, 40, 40, 40);
//Mountains in the background
fill(mountainR, mountainG, mountainB);
triangle(0, 400, 25, 100, 200, 400);
fill(mountainR, mountainG, mountainB);
triangle(200, 400, 325, 100, 400, 400);
//Grass ground
fill(0, 140, 0);
ellipse(200, 400, 400, 50);
//Setting up the cloud speeds and making the clouds bounce back and forth when they reach the edges of the screen
cloudX = cloudX + cloudSpeed;
cloudY = cloudY + cloudSpeed;
if ((cloudX > width) || (cloudX < 0)) {
cloudSpeed = cloudSpeed * -1;
} else if ((cloudY > height) || (cloudY < 0)) {
cloudSpeed = cloudSpeed * -1;
}
//Cloud setting up ends
//Clouds floating in background
fill(255, 255, 255, 100);
ellipse(cloudX, 30, 30, 30);
fill(255, 255, 255, 100);
ellipse(cloudX + 20, 30, 30, 30);
fill(255, 255, 255, 100);
ellipse(cloudX + 10, 10, 30, 30);
fill(255, 255, 255, 100);
ellipse(cloudX + 40, 30, 30, 30);
fill(255, 255, 255, 100);
ellipse(cloudX + 30, 10, 30, 30);
fill(255, 255, 255, 100);
ellipse(cloudX + 200, 150, 30, 30);
fill(255, 255, 255, 100);
ellipse(cloudX + 220, 150, 30, 30);
fill(255, 255, 255, 100);
ellipse(cloudX + 210, 130, 30, 30);
fill(255, 255, 255, 100);
ellipse(cloudX + 240, 150, 30, 30);
fill(255, 255, 255, 100);
ellipse(cloudX + 230, 130, 30, 30);
// Canvas in middle of screen
fill(255);
rect(100, 80, 200, 250);
noFill();
rect(100, 80, 200, 250);
//Top of canvas
fill(208, 158, 109);
rect(185, 40, 30, 40);
//Shelf of the canvas
fill(208, 158, 109);
rect(80, 330, 245, 20);
//Tray for sharpness options
fill(208, 158, 109);
rect(10, 175, 40, 150);
//Tray for the colour options
fill(208, 158, 109);
rect(320, 70, 55, 230);
//Sharpness options
fill(blackPaint);
ellipse(30, 200, 40, 40);
ellipse(30, 240, 30, 30);
ellipse(30, 270, 20, 20);
ellipse(30, 290, 10, 10);
//Eraser tool
fill(eraserPinkR, eraserPinkG, eraserPinkB);
rect(eraserX, eraserY, 20, 40);
fill(whitePaint);
rect(eraserX, eraserY, 20, 10);
//Random sharpness
fill(blackPaint);
ellipse(30, 310, (int) random(10, 20), (int) random(10, 20));
//Sharpness options end
//Paint options
//Red paint
fill(redPaintR, redPaintG, redPaintB);
rect(325, 100, 20, 20);
//Blue paint
fill(bluePaintR, bluePaintG, bluePaintB);
rect(350, 125, 20, 20);
//Green paint
fill(greenPaintR, greenPaintG, greenPaintB);
rect(325, 150, 20, 20);
//Purple paint
fill(purplePaintR, purplePaintG, purplePaintB);
rect(350, 175, 20, 20);
//Yellow paint
fill(yellowPaintR, yellowPaintG, yellowPaintB);
rect(325, 200, 20, 20);
//Orange paint
fill(orangePaintR, orangePaintG, orangePaintB);
rect(350, 225, 20, 20);
//Black paint
fill(blackPaint);
rect(325, 250, 20, 20);
//White paint
fill(whitePaint);
rect(350, 275, 20, 20);
//Random paint
fill((int) random(50, 255), (int) random(50, 255), (int)random (50, 255));
rect(350, 75, 20, 20);
//Paint options end
}
// Colour stroke calls being sectioned off
void redStroke() {
stroke(redPaintR, redPaintG, redPaintB);
}
void blueStroke() {
stroke(bluePaintR, bluePaintG, bluePaintB);
}
void greenStroke() {
stroke(greenPaintR, greenPaintG, greenPaintB);
}
void purpleStorke() {
stroke(purplePaintR, purplePaintG, purplePaintB);
}
void orangeStroke() {
stroke(orangePaintR, orangePaintG, orangePaintB);
}
void yellowStroke() {
stroke(yellowPaintR, yellowPaintG, yellowPaintB);
}
void blackStroke() {
stroke(blackPaint);
}
void whiteStroke() {
stroke(whitePaint);
}
void randomStroke() {
stroke((int) random(50, 255), (int) random(50, 255), (int)random (50, 255));
}
//Colour calls end
//Mouse pressed down makes the drawing
void mousePressed() {
// Changes the title screen into play screen
if (isPlay) {
isPlay = false;
}
// Saving the mouse's current X position
else {
mouseStartX = mouseX;
// Saving the mouse's current Y posistion
mouseStartY = mouseY;
// The line should be drawn
doDrawLine = true;
//If red paint were clicked, change to red paint
if (pmouseX >= 325 && pmouseX <= 20 && pmouseY <= 20 && pmouseY >= 100);
{
redStroke();
}
}
}
// When the mouse is released the drawing will stop
void mouseReleased() {
// The line won't be drawn
doDrawLine = false;
}
void drawLine() {
//If the line should be drawn
if (doDrawLine) {
stroke(0, 0, 0);
strokeWeight(5);
line(mouseStartX, mouseStartY, mouseX, mouseY);
}
}
// Press keys to move eraser (The control input)
void keyPressed() {
if (key == 'w');
{
eraserYmove = -1;
}
if (key == 'a');
{
eraserXmove = -1;
}
if (key == 's') {
eraserYmove = 1;
}
if (key == 'd') {
eraserXmove = 1;
}
}
// When keys are released, eraser stops moving
void keyReleased() {
if (key == 'w');
{
eraserYmove = 0;
}
if (key == 'a');
{
eraserXmove = 0;
}
if (key == 's') {
eraserYmove = 0;
}
if (key == 'd') {
eraserXmove = 0;
}
}
void updateEraser() {
eraserX += eraserSpeed * eraserXmove;
eraserY += eraserSpeed * eraserYmove;
}