I have a program and if a player comes near a chest I want to give him extra lives and go to the next level.
some times if you go to the next level I get an infinite loop.
if I do manually it doesn't stop. and it prints all of the print statements this is the constructor of RandomisedLevel
why does it stop ? why does it only stops sometimes ? how can I fixs this ?
public void act()
{
if(getObjectsInRange(50,Player.class).isEmpty() == false) {
System.out.println("active");
Player p = (Player) getObjectsInRange(50,Player.class).get(0);
System.out.println("got player");
p.lives+=lives;
System.out.println("gave it lives");
getWorld().removeObject(this);
System.out.println("removed me");
Greenfoot.setWorld(new RandomisedLevel(level+1));
System.out.println("set the new world");
}
}Greenfoot.setWorld(new RandomisedLevel(level+1));
private int level;
private double dif; //lower is harder
static final int maxXdiference = 125;
static final int maxYdiference = 50;
static final int minY = 100;
static final int minX = 20;
private int x;
private int y;
public RandomisedLevel(int level) {
super(600,400,1);
this.level = level;
dif = 1.0/level; //0.5
int maxMobs = level+1; //2
makePlatforms();
for(int i = 0; i < maxMobs; i++) {
}
//addObject(new Player(),20,550);
}
private void makePlatforms() {
int maxPlatforms = level+3; //4
int platLenght = 50 - ((int) (level*dif*5)); //45
int xDif =(int) platLenght+10+level*2; //59
int yDif = (int) 20+level*2; //24
if(xDif > maxXdiference) xDif = maxXdiference;
if(yDif > maxYdiference) yDif = maxYdiference;
setX(minX);
setY(Greenfoot.getRandomNumber(getHeight()));
addObject(new Platform(platLenght+Greenfoot.getRandomNumber(20)-10),x,y);
addObject(new Player(),x,y-25);
for(int i = 0; i < maxPlatforms-1; i++) {
setX(x+xDif+Greenfoot.getRandomNumber(20)-10);
int stateToken = Greenfoot.getRandomNumber(2);
if(stateToken == 0) stateToken = -1;
setY(y+(yDif+Greenfoot.getRandomNumber(20)-10)*stateToken);
addObject(new Platform(platLenght+Greenfoot.getRandomNumber(20)-10),x,y);
if(x+10 >= getWidth()) {
addObject(new Chest(level),x,y-25);
return;
}
}
addObject(new Chest(level),x,y-25);
}
private void setX(int x) {
if(x < minX) x = minX;
this.x = x;
}
private void setY(int y) {
if(y < minY) y = minY;
this.y = y;
}

