So far for my final project, I worked on the software for the game. I made 3 distinct classes: one for the raindrops, one for a timer and one for the ‘catcher’. I also added a timer onto the screen; however, it is currently counting up and needs to do the opposite. I also worked out how to print out the values for each time a raindrop intersects with the ‘catcher’ which I can further use to build the levels of my game. I also found the images I would like to use in an array to portray the growing flower and need to code this next as opposed to the ‘catcher’.
I found most aspects of coding thus far very difficult as I didn’t understand the logic to use, I solved this by asking a lot of questions from the Unix Lab. I’m still very unsure on how I am going to resolve all the upcoming issues regarding the animation aspect of the game and also connecting the IR camera.
Catcher catcher; // One catcher object Timer timer; // One timer object Drop[] drops; // An array of drop objects int totalDrops = 0; int numCaught = 0; // Starting a count for the number of caught raindrops PImage background; void setup() { size(480, 270); background = loadImage("background.jpg"); // Putting in a background catcher = new Catcher(32); // Create the catcher with a radius of 32 drops = new Drop[1000]; // Create 1000 spots in the array timer = new Timer(300); // Create a timer that goes off every 300 milliseconds timer.start(); // Starting the timer } void draw() { background(255); // Set catcher location catcher.setLocation(mouseX, height); // Display the catcher catcher.display(); // Check the timer if (timer.isFinished()) { // Deal with raindrops // Initialize one drop drops[totalDrops] = new Drop(); // Increment totalDrops totalDrops ++ ; // If we hit the end of the array if (totalDrops >= drops.length) { totalDrops = 0; // Start over } timer.start(); } { text(timer.getTime(), 420, 50); fill(30); textSize(30); // Move and display all drops for (int i = 0; i < totalDrops; i++ ) { drops[i].move(); drops[i].display(); if (catcher.intersect(drops[i])) { drops[i].caught(); numCaught++; print(numCaught); } } } }
class Catcher { float r; // radius color col; // color float x, y; // location Catcher(float tempR) { r = tempR; col = color(50, 10, 10, 150); x = 0; y = 0; } void setLocation(float tempX, float tempY) { x = tempX; y = tempY; } void display() { stroke(0); fill(col); ellipse(x, y, r*2, r*2); } // A function that returns true or false based on // if the catcher intersects a raindrop boolean intersect(Drop d) { // Calculate distance float distance = dist(x, y, d.x, d.y); // Compare distance to sum of radii if (distance < r + d.r) { return true; } else { return false; } } }
class Drop { float x, y; // Variables for location of raindrop float speed; // Speed of raindrop color c; float r; // Radius of raindrop Drop() { r = 8; // All raindrops are the same size x = random(width); // Start with a random x location y = -r*4; // Start a little above the window speed = random(1, 5); // Pick a random speed c = color(50, 100, 150); // Color } // Move the raindrop down void move() { // Increment by speed y += speed; } // Check if it hits the bottom boolean reachedBottom() { // If we go a little beyond the bottom if (y > height + r*4) { return true; } else { return false; } } // Display the raindrop void display() { // Display the drop fill(c); noStroke(); for (int i = 2; i < r; i++ ) { ellipse(x, y + i*4, i*2, i*2); } } // If the drop is caught void caught() { // Stop it from moving by setting speed equal to zero speed = 0; // Set the location to somewhere way off-screen y = -1000; } }
class Drop { float x, y; // Variables for location of raindrop float speed; // Speed of raindrop color c; float r; // Radius of raindrop Drop() { r = 8; // All raindrops are the same size x = random(width); // Start with a random x location y = -r*4; // Start a little above the window speed = random(1, 5); // Pick a random speed c = color(50, 100, 150); // Color } // Move the raindrop down void move() { // Increment by speed y += speed; } // Check if it hits the bottom boolean reachedBottom() { // If we go a little beyond the bottom if (y > height + r*4) { return true; } else { return false; } } // Display the raindrop void display() { // Display the drop fill(c); noStroke(); for (int i = 2; i < r; i++ ) { ellipse(x, y + i*4, i*2, i*2); } } // If the drop is caught void caught() { // Stop it from moving by setting speed equal to zero speed = 0; // Set the location to somewhere way off-screen y = -1000; } }
class Timer { int savedTime; // When Timer started int totalTime; // How long Timer should last Timer(int tempTotalTime) { totalTime = tempTotalTime; } // Starting the timer void start() { // When the timer starts it stores the current time in milliseconds. savedTime = millis(); } // The function isFinished() returns true if 5,000 ms have passed. // The work of the timer is farmed out to this method. boolean isFinished() { // Check how much time has passed int passedTime = millis()- savedTime; if (passedTime > totalTime) { return true; } else { return false; } } int getTime() { return millis()/600; } }
Next, I’m going to be working on using the IR camera and learning how to program it with the interaction I would like.