Java GridWorld向随机位置添加鲜花

Java GridWorld向随机位置添加鲜花,java,actor,gridworld,Java,Actor,Gridworld,我正在尝试制作一个“正在生长的花”,它只是将花添加到随机位置。添加的花朵数量基于随机数。当我运行花后,我打了6次,它死了,就像它应该的,但它从来没有增加任何花,所以我需要你的帮助解决这个问题,请。先谢谢你 这是“成长之花”的代码 这是我的跑步者 package projects.firstProject; import projects.flowers.GrowingFlower; import info.gridworld.actor.ActorWorld; public class

我正在尝试制作一个“正在生长的花”,它只是将花添加到随机位置。添加的花朵数量基于随机数。当我运行花后,我打了6次,它死了,就像它应该的,但它从来没有增加任何花,所以我需要你的帮助解决这个问题,请。先谢谢你

这是“成长之花”的代码

这是我的跑步者

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();
    }
}

我对这个“GridWorld”框架不太熟悉,所以这个可能不是一个可以接受的答案,但是太长了,无法发表评论,而且。。。不过,这可能会有所帮助:

认为问题在于你正在你的
成长之花
实例中创造一个新世界:

public class GrowingFlower extends Flower {
    ...
    ActorWorld world = new ActorWorld();
稍后,在
act
方法中,您将向这个世界添加新的
GrowingFlower
实例,但不会向您在
main
方法中创建(并显示!)的世界添加新的
GrowingFlower
实例

因此,解决方案可能是如下更改代码:

1.更改您的
GrowingFlower
类的构造函数,以接受应在其中添加新花的“世界”:

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.将世界上的主要方法传递给您的第一个
生长的花朵

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

除此之外,您应该稍微重构一下
act
方法:

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());
    }
}
公共无效法案(){
增长=(int)(Math.random()*4);
年龄++;
if(年龄<6岁){
徒手划船();
}
否则{
removeSelfFromGrid();
}
}
私人划船
{
交换机(正在增长){
案例0:
removeSelfFromGrid();
案例1:
添加(新生长的花朵());
案例2:
添加(新生长的花朵());
添加(新生长的花朵());
案例3:
添加(新生长的花朵());
添加(新生长的花朵());
添加(新生长的花朵());
案例4:
添加(新生长的花朵());
添加(新生长的花朵());
添加(新生长的花朵());
添加(新生长的花朵());
}
}

(据我所知,这应该仍然具有相同的行为)

你知道,你可以将那些复制粘贴的
开关
语句和那条大
if else
链分解出来。对于一个答案,无论这是否是一个网格世界问题,都可以使用+1。(顺便说一句,GridWorld是AP CS帮助教授编程的“案例研究”)这非常有效,非常感谢。第一次使用stack over flow,这是一次很棒的体验,再次感谢!
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());
    }
}