// Name: Aysha Zackria
// AndrewID: azackria
// Section D
var firelocationx = [];
var firelocationy = [];
var smoke = {
locationx:[],
locationy:[],
size: 75
}
var counter = 1;
var xoff = 0;
var firesize = 12;
var treelocationx = [];
var treelocationy = [];
var r = 133;
var g = 214;
var b = 139;
var waterr = 131;
var waterg = 228;
var waterb = 234;
var smokecolor = 240;
function setup() {
createCanvas(500, 500);
for (var i = 0; i < 25; i++) {
firelocationx.push(random(20, 480));
firelocationy.push(random(45, 330));
treelocationx.push(random(20, 480));
treelocationy.push(random(35, 330));
}
}
function draw() {
background(r, g, b);
r = map(firelocationx.length, 25, 100, 133, 43);
g = map(firelocationx.length, 25, 100, 214, 24);
b = map(firelocationx.length, 25, 100, 139, 8);
noStroke();
fill(0);
if (firelocationx.length < 30) {
text("Slowly drag the fire into the water to put it out.", 10, 15);
} else if (firelocationx.length >= 30 & firelocationx.length <= 35) {
text("Drag the fire into the water to put it out.", 10, 15);
} else if (firelocationx.length > 35 & firelocationx.length < 40) {
text("Drag the fire into the water.", 10, 15);
} else if (firelocationx.length >= 40) {
text("Put the fire out.", 10, 15);
}
noStroke();
fill(waterr, waterg, waterb);
waterr = map(firelocationx.length, 25, 100, 131, 25);
waterg = map(firelocationx.length, 25, 100, 228, 54);
waterb = map(firelocationx.length, 25, 100, 234, 92);
rect(0, 350, 500, 150); // water
let nx = noise(xoff) * 600;
let ny = noise(xoff+10) * 500;
if ((counter % 20) == 0) {
smoke.locationx.push(nx);
smoke.locationy.push(ny);
}
for (var i = 0; i < treelocationx.length; i++) {
drawtree(i);
}
for (var i = 0; i < firelocationx.length; i++) {
drawfire(i);
if (mouseIsPressed & dist(firelocationx[i], firelocationy[i],
mouseX, mouseY) < 12) {
firelocationx[i] = mouseX;
firelocationy[i] = mouseY;
}
if (firelocationy[i] > 350) {
firelocationy.splice(i, 1);
firelocationx.splice(i, 1);
}
}
fill(smokecolor, 100);
smokecolor = map(firelocationx.length, 25, 100, 240, 100);
for (var i = 0; i < smoke.locationx.length; i++) {
circle(smoke.locationx[i], smoke.locationy[i], smoke.size);
}
counter += 1;
xoff += 0.1;
if ((counter % 100) == 0) {
firelocationx.push(random(20, 480));
firelocationy.push(random(35, 330));
}
}
function drawtree(i) {
strokeWeight(4);
stroke(165, 115, 75);
line(treelocationx[i], treelocationy[i] - 2,
treelocationx[i], treelocationy[i] - 10);
stroke(50, 100, 50);
fill(50, 100, 50);
triangle(treelocationx[i], treelocationy[i] - 15, treelocationx[i] - 3,
treelocationy[i] - 10, treelocationx[i] + 3, treelocationy[i] - 10);
triangle(treelocationx[i], treelocationy[i] - 10, treelocationx[i] - 3,
treelocationy[i] - 5, treelocationx[i] + 3, treelocationy[i] - 5);
}
function drawfire(i) {
fill(255, 100, 0);
noStroke();
push();
translate(firelocationx[i], firelocationy[i]);
scale(firelocationx.length / 15);
circle(0, 0, firesize);
triangle(-(firesize / 2), -1, (firesize / 2), -1, 0, -20);
pop();
}
My program is a game that includes fire and smoke appearing at regular intervals on a background of grass and trees. The fire can be extinguished by dragging it into the water area. The game is designed to not be winnable to reflect my growing feeling of hopelessness in regards to the climate crisis. The smoke ultimately obscures a good portion of the screen while the colors of the background and water grow darker to mimic soot buildup. The text direction in the top left corner also changes to convey a sense of urgency as the user gets more frustrated. I didn’t end up implementing any separate sound or image files, so the program can be run normally. If I had more time, I would probably add simple sounds to accompany the fires appearing and disappearing.