In the first level i hit the 25 percent mark and it repopulates the world but then as soon as i hit one Boid it repopulates again and the same thing happens over and over. Im trying to make the game so after i finish level 1 it requires more boids to be hit in order to reach the next level.
import greenfoot.*; // (World, Actor, GreenfootImage, and Greenfoot)
import java.awt.Color;
/**
* A world for the boids.
*
* @author Poul Henriksen
* @version 2.0
*/
public class Sky extends World
{
/**
* Counter Object Used to keep the score
*/
private Counter scoreCounter;
private Timer gameTimer;
private int numberOfBoids;
private double percentageToWin;
private int level = 1;
/**
* Constructor for objects of class Sky.
*
*/
public Sky()
{
super(800, 600, 1);
/**
* Create a new scoreCounter object and then add it to the world
*/
scoreCounter = new Counter("Score: ");
addObject(scoreCounter, 55, 580);
getBackground().setColor(new Color(220,220,100));
getBackground().fill();
levelUp();
}
public void levelUp()
{
/**
* add a timer to the world
*/
level = 1;
gameTimer = new Timer("Time Remaining: ");
addObject(gameTimer, 100, 560);
numberOfBoids = 100;
percentageToWin = 0.25;
populateTrees(100);
populateBoids(numberOfBoids);
/**
* Make a Shooter
*/
Shooter myShooter = new Shooter();
addObject(myShooter, getWidth()/2, getHeight()/2);
}
public void clearWorld()
{
Greenfoot.delay(120);
removeObject(gameTimer);
removeObjects(getObjects(Boid.class));
removeObjects(getObjects(Tree.class));
removeObjects(getObjects(Shooter.class));
}
public void populateBoids(int number) {
for(int i=0; i < number; i++) {
int x = (int) (Math.random() * getWidth());
int y = (int) (Math.random() * getHeight());
Boid b = new Boid();
addObject(b, x, y);
}
}
public void populateTrees(int number) {
// Size of block in pixels
int blockSize = 70;
// Trees per block
int treesPrBlock = 10;
// How close together trees in a block are. Higher number, the closer they are.
int blockCoherence = 1;
for(int block = 0; block < number / treesPrBlock; block++) {
int x = Greenfoot.getRandomNumber(getWidth()/blockSize) * blockSize;
int y = Greenfoot.getRandomNumber(getHeight()/blockSize) * blockSize;
for(int t = 0; t < treesPrBlock; t++) {
int dx = Greenfoot.getRandomNumber(blockSize/blockCoherence);
int dy = Greenfoot.getRandomNumber(blockSize/blockCoherence);
Tree b = new Tree();
addObject(b, x + dx, y + dy);
}
}
}
/**
* This method is called when the game is over to display the final score.
*/
public void gameOver()
{
addObject(new ScoreBoard(scoreCounter.getValue()), getWidth()/2, getHeight()/2);
levelUp();
}
/**
* Add a value to the current score counter object
*/
public void countScore(int input)
{
scoreCounter.add(input);
/**
* The game is over if we hit percentageToWin number of the boids
*/
if(scoreCounter.getValue() >= numberOfBoids*percentageToWin)
{
clearWorld();
levelUp();
}
}
public void act()
{
}
}

