gpt4 book ai didi

Java Gridworld 如何改变一个 Actor 的行为?

转载 作者:太空宇宙 更新时间:2023-11-04 11:54:00 29 4
gpt4 key购买 nike

嗨,我正在与 Gridworld 合作。我有一个名为 Cow 的类,它是另一个子类 Animal 的子类。

此类在网格中移动牛的图像。对于奶牛来说,每一步都是一年,并且奶牛每走一步,就有 0.16666 的可能性在空闲的相邻区域中创建一头新奶牛。

现在我尝试创建另一个类 Calf,它也是 Animal 的子类。这个类不应该允许新生的奶牛立即成为奶牛。相反,新生儿应该是小牛,直到他们 4 岁(步数)。我该如何改变它?

import java.util.ArrayList;
import gridworld.framework.actor.Actor;
import gridworld.framework.grid.Grid;
import gridworld.framework.grid.Location;
import Hausaufgabe.Cow;

public class Calf extends Animal{

public void Act()
{
Grid<Actor> gr = getGrid();
ArrayList<Location> actors = gr.getOccupiedLocations();

super.act();

for (int ii=0; ii < actors.size(); ii++)
{
Actor actor = gr.get(actors.get(ii));
Location Loc = actor.getLocation();

if ((actor instanceof Cow) && this.getAge()<5)
{
actor.removeSelfFromGrid();
Calf calf = new Calf();
calf.putSelfInGrid(gr,Loc);
}
}
}
}

谢谢

最佳答案

一个简单的解决方案是让牛移动。当小牛出生时,新的小牛就会被安置在相邻的位置。当小牛本身达到 5 岁时,它将被新的 Cow 实例取代。奶牛总是从 5 岁开始。

但是,这个解决方案表明,作为小牛更多的是该动物的一个属性。但这些解决方案使其变得更加复杂。下面是如何实现这种“重生”的概念。

class Animal {
protected int age;

protected void birthday() {
age++;
}
}

class Cow extends Animal {

public Cow() {
age = 5;
}

public void act() {
super.act();
//make the cow move
birthday();

if(birthACalf()) {
Calf calf = new Calf();
calf.putSelfInGrid(....);
}
}
}

class Calf extends Animal {

public void act() {
super.act();
birthday();

if(age >= 5) {
removeSelfFromGrid();
Cow cow = new Cow();
cow.putSelfInGrid(....);
}
}
}

关于Java Gridworld 如何改变一个 Actor 的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41522860/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com