我正在创建一个迷你游戏,其中猫必须捕捉随机移动的鼠标。代码背后的想法是首先随机移动鼠标,然后检查猫的位置与鼠标相比。代码适用于较小的网格(CatAndMouse(...)中的第一个输入),但是通过这个例子(n = 100),鼠标开始移动到0以下。我确定会有更聪明的方式让猫移动,但主要是我的问题是为什么鼠标移动太负y值?如果当前位置大于0,它应该只在负y方向移动而不是如果它等于0?
public class CatAndMouse {
public static void main(String[] args) {
// runs a test
CatAndMouse.runCatAndMouse(100, 7, 88, 98, 13);
}
// method here
public static void runCatAndMouse(int n, int catX, int catY, int mouseX,int mouseY) {
// print user input
System.out.println(n+" ["+catX+";"+catY+"]"+" ["+mouseX+";"+mouseY+"]");
int k = 0;
Random random = new Random();
// checks for valid input
if ( catX < 0 || catY < 0 || mouseX < 0 || mouseY < 0 || n < 0 ||catX > n || catY > n || mouseX > n || mouseY > n) {
System.out.println("ERROR");
}
else {
while ( catX != mouseX || catY != mouseY) {
k ++;
int mouseMovement = random.nextInt(5);
if ( mouseMovement == 1 && mouseX < n) {
mouseX ++;
}
else if ( mouseMovement == 2 && mouseY < n) {
mouseY ++;
}
else if ( mouseMovement == 3 && mouseX > 0) {
mouseX --;
}
else if ( mouseMovement == 4 && mouseY > 0) {
mouseY --;
}
// cat
if ( catX < mouseX && catY < mouseY){
catX ++;
catY ++;
}
else if ( catX > mouseX && catY > mouseY) {
catX --;
catY --;
}
else if ( catX < mouseX && catY > mouseY) {
catX ++;
mouseY --;
}
else if ( catX > mouseX && catY < mouseY) {
catX --;
catY ++;
}
else if ( catX == mouseX+1) {
catX ++;
}
else if ( catY == mouseY+1) {
catY ++;
}
else if ( catX == mouseX-1) {
catX --;
}
else if ( catY == mouseY-1) {
catY --;
}
else if ( catX < mouseX) {
catX += 2;
}
else if ( catY < mouseY) {
catY +=2 ;
}
else if ( catX > mouseX) {
catX -= 2;
}
else if ( catY > mouseY) {
catY -= 2;
}
System.out.println("move "+k+" ["+catX+";"+catY+"]"+" ["+mouseX+";"+mouseY+"]");
}
}
}
}
答案 0 :(得分:1)
再次查看else if
块。
else if ( catX < mouseX && catY > mouseY) {
catX ++;
mouseY --;
}
从逻辑上讲,您认为这是做什么的?我相信如果你将它从mouseY--
更改为catY--
,它将与你对猫和老鼠游戏应该做的逻辑相匹配。