This repository contains a simple ant simulation sketch written in Processing. It serves as an educational example for teaching generative design, object-oriented programming (OOP), animation basics, and event-driven programming.
- Install Processing from Processing.org
- Clone this repository or download the
.pdefile. - Open the
.pdefile in the Processing editor and click the "Run" button.
The Ant class demonstrates OOP by encapsulating the properties and behaviors of an ant.
class Ant { float x, y; float size; color c; //... }
The Ant class constructor allows for flexibility in setting the initial x and y positions for each ant object.
In the draw loop, we use dot syntax to call methods like move and display on each Ant object. This is a fundamental aspect of OOP, allowing us to directly interact with individual objects. Here's how it's done:
for (Ant ants : antHill) { ants.move(); ants.display(); }
This is saying, "For each ant in antHill, move the ant and then display it on the screen."
The move() method uses random() and if statements to give ants a random direction of movement.
void move() { float choice = random(1); if (choice > 0.5) { x += random(-3, 3); } else { y += random(-3, 3); } //... }
The display() method uses the Processing fill and circle functions to display each ant object on the screen.
for (int i = 0; i<10; i+=1): Demonstrates a standard for-loop to initialize multiple ant objects.for (Ant ants : antHill): Demonstrates a for-each loop to iterate over each ant object for moving and displaying.antHill.length: A more efficient way of getting the size of an array.i++: A simpler way to increment each step.for(int i = 0; i < antHill.length; i++)
The code utilizes an array (antHill) to manage multiple ant instances efficiently.
The random() function is extensively used for varying ant movements, sizes, and colors.
mousePressed(): Changes ant colors and sizes based on user mouse clicks.keyPressed(): Saves the current frame when the 'S' key is pressed.
void mousePressed() { // ... float r = random(128, 255); // ... } void keyPressed() { if (key == 's' || key == 'S') { saveFrame(); exit(); } }