Java-为什么不';我的鼠标不能正常移动吗?
我目前正在制作一个程序,显示一种动物在野外的运动。这些动物用一个字符标记(例如:“M”代表鼠标),每个动物都有自己的移动方式。我遇到麻烦的方法是一种可以让我的老鼠移动的方法Java-为什么不';我的鼠标不能正常移动吗?,java,methods,interface,abstract-class,Java,Methods,Interface,Abstract Class,我目前正在制作一个程序,显示一种动物在野外的运动。这些动物用一个字符标记(例如:“M”代表鼠标),每个动物都有自己的移动方式。我遇到麻烦的方法是一种可以让我的老鼠移动的方法 它们应该沿着对角线(先北后东或西、先东后北或南)移动一定的时间,然后改变对角线方向。 鼠标沿对角线移动的次数由myCount控制。如果myCount小于myTarget,则小鼠应沿对角线移动。当myCount等于myTarget时,小鼠改变方向。然后myCount被设置回0。在改变对角线方向之前,我想让我的鼠标沿对角线移
- 它们应该沿着对角线(先北后东或西、先东后北或南)移动一定的时间,然后改变对角线方向。
- 鼠标沿对角线移动的次数由
控制。如果myCount
小于myCount
,则小鼠应沿对角线移动。当myTarget
等于myCount
时,小鼠改变方向。然后myTarget
被设置回0。在改变对角线方向之前,我想让我的鼠标沿对角线移动8次myCount
- 鼠标沿对角线移动的次数由
- 然而,相反我的老鼠有时会朝对角线方向移动一点,但它们总是先上后下或先左后右反复移动大约5次李>
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;
}
}
}
抽象类:
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;
}
}
}
我遇到问题的方法:
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
,如果方向是东、西,索引将是2,3
。对于北部、南部
,除以2再乘以2等于0,对于东部、西部
,等于2。然后我们使用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)];
}
}