public Action getMove(CritterInfo info) {
count++;
Direction d = info.getDirection();
if (count < 100) {
if (info.getFront() == Neighbor.OTHER) {
return Action.INFECT;
} else {
return Action.RIGHT;
}
}
if (count >= 100) {
if (info.getFront() == Neighbor.OTHER) {
return Action.INFECT;
} else if (count / 100.0 < 2.0 && count / 100.0 >= 1.0 && !(d == Direction.EAST)) {
return Action.LEFT;
} else if (count / 100.0 < 3.0 && count / 100.0 >= 2.0 && !(d == Direction.WEST)) {
return Action.RIGHT;
} else {
return Action.HOP;
}
}
return Action.INFECT;
}
现在我有这个代码是我的生物的一部分,我遇到的问题是代码的if (count >= 100)
部分。我不能让我向东走,然后去西码重复自己,因为当我将计数除以100.0时,它只能工作到299然后才会继续向西跑到墙上。在我的西方代码陈述
} else if (count == 299) {
count = 0;
}
但这也没有解决我的问题。有任何想法吗?我只想让我的小动物一遍又一遍地向西和向西扫过。
答案 0 :(得分:0)
只需使用变量而不是数字,并在每次到达数字时更改它们。然后,您可以创建一个方法,每次数量达到100+(100 * n)时更改方向。 因此,如果你达到200,它将检查我设置的条件是否为真,因此将改变接下来的100个数字的方向。 这是你在寻找什么,还是我误解了你想要的东西?
答案 1 :(得分:0)
您可以使用某种“循环”功能,例如 modulo (%
),而不是count
的绝对值。 E.g。
public Action getMove(CritterInfo info) {
count++;
Direction d = info.getDirection();
if (count < 100) {
if (info.getFront() == Neighbor.OTHER) {
return Action.INFECT;
} else {
return Action.RIGHT;
}
}
else {
int choiceOfAction = (count - 100)%200;
if (0 <= choiceOfDir && choiceOfDir < 100 && !(d == Direction.EAST)) {
return Action.LEFT;
} else if (100 <= choiceOfDir && choiceOfDir < 200 && !(d == Direction.WEST)) {
return Action.RIGHT;
} else {
return Action.HOP;
}
}
}
行int choiceOfAction = (count - 100)%200;
将产生choiceOfAction
的值:
count
在[100,200 [:choiceOfAction
中,则为[0,100 [count
在[200,300 [:choiceOfAction
在[100,200 [count
在[300,400 [:choiceOfAction
在[0,100 [请注意,我删除了您的方法中从未到过的最后一个return
,并且在上述情况下,只有当您达到限制并更改方向时才会HOP
。