gpt4 book ai didi

Java - 为什么我的鼠标不能正确移动?

转载 作者:行者123 更新时间:2023-11-30 08:02:29 26 4
gpt4 key购买 nike

我目前正在开发一个程序,该程序显示田野中小动物的运动。这些小动物用字符标记(例如:“M”代表老鼠),并且每种动物都有自己的移动方式。我遇到问题的方法应该是让我的老鼠小动物移动的方法。

  • 它们应该沿对角线移动(先向北,然后向东或向西。向东,然后向北或向南)移动一定的次数,然后改变对角线方向。
    • 鼠标对角移动的次数由myCount控制。如果 myCount 小于 myTarget,则鼠标应沿对角线移动。当myCount等于myTarget时,鼠标改变方向。然后将 myCount 设置回 0。我希望我的鼠标在改变对角线方向之前沿对角线移动 8 次。
  • 然而,相反我的老鼠有时会沿对角线移动一点,但它们最终总是向上然后向下或向左然后向右移动大约 5 次。

Here这就是我的程序的输出的样子。 (S 是不会移动的石头,在这种情况下它们被视为另一种生物)。

界面:

public interface Critter
{
public static final int NORTH = 0;
public static final int WEST = 1;
public static final int SOUTH = 2;
public static final int EAST = 3;
public static final int CENTER = 4;

public char getChar();
public int getMove(CritterInfo theInfo);
}

抽象类:

public abstract class AbstractCritter implements Critter
{
private char myCritterName;

public AbstractCritter(final char theChar)
{
myCritterName = theChar;
}
public char getChar()
{
return myCritterName;
}
}

我遇到问题的方法:

import java.util.*;
public class Mouse extends AbstractCritter
{
private int myDirection;
private int myCount;
private boolean myFirst;
private int myTarget;
private Random myRand;
private int myCheck;

public Mouse()
{
super('M');
myRand = new Random();
myDirection = myRand.nextInt(4);
myCount = 0;
myFirst = false;
myTarget = 16;
myCheck = 0;
}
public int getMove(CritterInfo theInfo)
{
if (myCount == myTarget)
{
myCount = 0;
int direction = myRand.nextInt(4);
myFirst = false;

}
int direction = myDirection;
int direction2 = myRand.nextInt(4);
myCount++;

if (!myFirst)
{

myCheck = myRand.nextInt(2);
if (myDirection == NORTH || myDirection == SOUTH)
{
if (myCheck == 0)
{
direction2 = EAST;
}
else
{
direction2 = WEST;
}
}
else if (myDirection == EAST || myDirection == WEST)
{
if (myCheck == 0)
{
direction2 = NORTH;
}
else
{
direction2 = SOUTH;
}
}
myFirst = true;
}

if (myCount % 2 == 0)
{
return direction;
}
else
{
return direction2;
}
}
}

最佳答案

如果您创建 enum保持你的老鼠可以处于的两种不同状态,它就变得不再那么困惑了。每 8 步在两种状态之间切换,然后使用 enum它本身会告诉您应该使用哪些移动规则。

逻辑的关键部分是这里的这一行:

int offset = 2 - ((index / 2) * 2);

索引将为0,1如果方向是NORTH, SOUTH ,它将是 2,3如果方向是EAST, WEST 。除然后乘以二,得到 0对于 NORTH, SOUTH ,并使其成为 2对于 EAST, WEST 。然后我们使用2 -该值将其翻转,然后添加 1再次随机选择一个正交方向。

代码如下:

import java.util.*;
public class Mouse extends AbstractCritter {
private static final int[] allDirections = { NORTH, SOUTH, EAST, WEST };
private static final Random myRand = new Random();

private final int myTarget = 16;
private int myCount = 0;
private int firstDirection;
private int secondDirection;

public Mouse() {
super('M');
randomizeDirection();
}

public int getMove(CritterInfo info)
{
myCount++;
if(myCount == myTarget) {
randomizeDirection();
myCount = 0;
}
return myCount % 2 == 0 ? firstDirection : secondDirection;
}

private void randomizeDirection() {
int index = myRand.nextInt(4);
firstDirection = allDirections[index];
int offset = 2 - ((index / 2) * 2); // this turns 0, 1 -> 2; 2, 3 -> 0
secondDirection = allDirections[offset + myRand.nextInt(2)];
}
}

关于Java - 为什么我的鼠标不能正确移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31688104/

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