GridWorld Adding flowers to random locations

340 Views Asked by At

I'm trying to make a a "GrowingFlower" that just adds flowers to random locations. The amount of Flowers that are added is based off of a random number. When I run the Flower after I hit act 6 times it dies like its supposed to but it never adds any flowers so I need your help solving this please. Thank You in advance.

Here is the code for the "GrowingFlower"

package projects.flowers;

import info.gridworld.actor.ActorWorld;
import info.gridworld.actor.Flower;

public class GrowingFlower extends Flower {

private int Growing = (int) (Math.random() * 4);
private int age = 0;
ActorWorld world = new ActorWorld();



public void act(){
    Growing = (int) (Math.random() * 4);
    age++;
    if (age == 1){
        switch(Growing){
        case 0:
            removeSelfFromGrid();
        case 1:
            world.add(new GrowingFlower());
        case 2:
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
        case 3:
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
        case 4:
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
        }
    }
    else if (age == 2){
        switch(Growing){
        case 0:
            removeSelfFromGrid();
        case 1:
            world.add(new GrowingFlower());
        case 2:
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
        case 3:
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
        case 4:
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
        }
    } else if(age == 3)  {
        switch(Growing) {
        case 0:
            removeSelfFromGrid();
        case 1:
            world.add(new GrowingFlower());
        case 2:
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
        case 3:
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
        case 4:
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());

        }
    } else if (age == 4){
        switch(Growing) {

        case 0:
            removeSelfFromGrid();
        case 1:
            world.add(new GrowingFlower());
        case 2:
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
        case 3:
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
        case 4:
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());

        }

    } else if (age == 5){
        switch(Growing) {

        case 0:
            removeSelfFromGrid();
        case 1:
            world.add(new GrowingFlower());

        case 2:
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
        case 3:
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
        case 4:
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());
            world.add(new GrowingFlower());

        }

    } else if (age == 6){
        removeSelfFromGrid();
    }



}

}

And Here is my runner

package projects.firstProject;



import projects.flowers.GrowingFlower;
import info.gridworld.actor.ActorWorld;

public class FlowerRunner
{
    public static void main(String[] args)
    {
    ActorWorld world = new ActorWorld();
    world.add(new GrowingFlower());
    world.show();
    }
}
1

There are 1 best solutions below

2
On BEST ANSWER

I'm not so familiar with this "GridWorld" framework, so this might not be an acceptable answer, but too long for a comment, and ... may be helpful nevertheless:

I think that the problem is that you are creating a new world in your GrowingFlower instances:

public class GrowingFlower extends Flower {
    ...
    ActorWorld world = new ActorWorld();

Later, in the act method, you are adding new GrowingFlower instances to this world, but not to the world that you created (and showed!) in the main method.

So the solution might be to change the code as follows:

1. Change the constructor of your GrowingFlower class to accept the "world" where the new flowers should be added:

public class GrowingFlower extends Flower {

    private int Growing = (int) (Math.random() * 4);
    private int age = 0;

    ActorWorld world; // Don't create a new world here!

    // Instead, use the world that is passed in 
    // in the constructor:
    GrowingFlower(ActorWorld world)
    {
        this.world = world;
    }

    ...

2. Pass in the world from the main method to your first GrowingFlower:

public static void main(String[] args)
{
    ActorWorld world = new ActorWorld();
    world.add(new GrowingFlower(world)); // Pass it in here!
    world.show();
}

Apart from that, you should refactor your act method a bit:

public void act(){
    Growing = (int) (Math.random() * 4);
    age++;
    if (age < 6){
        handleGrowing();
    }
    else {
        removeSelfFromGrid();
    }
}

private void handleGrowing()
{
    switch(Growing){
    case 0:
        removeSelfFromGrid();
    case 1:
        world.add(new GrowingFlower());
    case 2:
        world.add(new GrowingFlower());
        world.add(new GrowingFlower());
    case 3:
        world.add(new GrowingFlower());
        world.add(new GrowingFlower());
        world.add(new GrowingFlower());
    case 4:
        world.add(new GrowingFlower());
        world.add(new GrowingFlower());
        world.add(new GrowingFlower());
        world.add(new GrowingFlower());
    }
}

(As far as I see, this should still have the same behavior)