Ludum Dare 31, the last jam of the year, ended up very well for me. I created “baa ram ewe“, a game where you must herd sheeps with the mouse, moving them from a thin grass to a plentiful pasture. The game has a good – and solid, for an experimental game made in 48 hours – mechanics and a good overall aesthetics, I really liked the final result of this game. I also received a lot of positive feedbacks, mostly asking me to create a mobile version, which I decided to do.
Baa Ram Ewe uses a boiding algorithm (also known as flocking algorithm) to move the sheeps, to keep them together, and to avoid obstacles and dangerous elements. The boiding algorithm is a method to simulate collective movement of animals, such as fishes, birds, sheep, etc. For example, take a look a the following video, which shows a simulation of buffaloes running:
The algorithm is very simple. All agents in the simulation follow a set of simple rules. These rules defines how each agent will move accordingly to its neighbors flock-mates. The interaction between the agents generate an emergent behavior, as you can see in the video.
The rules used in these kind of simulation are really simple. Commonly, all boiding applications have the following ones:
- Separation: the agent must avoid the nearest flock-mates by steering away from them;
- Alignment: the agent try to head to the average position of the nearest flock-mates;
- Cohesion: the agent try to move to the average position considering the nearest flock-mates;
You can see a visual example of these rules on the figure below (copied of the Craig Reynold’s site, the creator of this algorithm)
In Baa Ram Ewe, I used the algorithms presented by Conrad Parker in his site as basis. Summarizing, I have a FLOCKING function that moves the sheeps accordingly to a set of rules:
FUNCTION FLOCKING VECTOR v1, v2, ..., vN FOR EACH boid IN boids v1 = rule1(boid) v2 = rule2(boid) ... vN = ruleN(boid) boid.velocity += v1 + v2 + ... + vN boid.position += boid.velocity END FOR EACH END FUNCTION
As you can see, you can define any number of rules, but be careful with that! More rules mean more complexity, you probably won’t be able to generate the behavior you want. Check it out the Conrad Parker site to a nice description of the basic rules.