0

我正在尝试制作一个“GrowingFlower”,它只是将鲜花添加到随机位置。添加的鲜花数量基于随机数。当我在击中 6 次后运行 Flower 时,它会像预期的那样死掉,但它从来没有添加任何花,所以我需要你的帮助来解决这个问题。先感谢您。

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



}

}

这是我的跑步者

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

1 回答 1

1

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

认为问题在于您正在GrowingFlower实例中创建一个新世界:

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

稍后,在该act方法中,您GrowingFlower将向这个世界添加新实例,但不会向您在该方法中创建(并显示!)的世界添加新实例main

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

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.将世界从主要方法传递到您的第一个GrowingFlower

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

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

于 2014-05-18T01:15:51.573 回答