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