Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当它在Java中不应该时变为180_Java_Localization_Location_Game Physics - Fatal编程技术网

当它在Java中不应该时变为180

当它在Java中不应该时变为180,java,localization,location,game-physics,Java,Localization,Location,Game Physics,所以我试着用吃豆人做鬼魂(小指),但我的动作有问题。所以我使用getX()和getY()来确定pacman在哪里,因此幽灵应该去哪里 然而,当吃豆人在东方,而鬼魂已经向西移动时,问题就出现了。然后,当幽灵探测到吃豆人X或Y时,它立即变为180 这是代码,你不需要阅读所有内容,它是相似的。我正在努力报道每一个案件 import ch.aplu.jgamegrid.*; import java.awt.Color; import java.util.*; public class Ghost ex

所以我试着用吃豆人做鬼魂(小指),但我的动作有问题。所以我使用getX()和getY()来确定pacman在哪里,因此幽灵应该去哪里

然而,当吃豆人在东方,而鬼魂已经向西移动时,问题就出现了。然后,当幽灵探测到吃豆人X或Y时,它立即变为180

这是代码,你不需要阅读所有内容,它是相似的。我正在努力报道每一个案件

import ch.aplu.jgamegrid.*;
import java.awt.Color;
import java.util.*;

public class Ghost extends Actor    

Set<Location.CompassDirection> random2SubDirs = new HashSet<Location.CompassDirection>();
    Location pakLocation = pakman.wherePakman();
    Location.CompassDirection dir = Location.EAST; 
    if (pakLocation.getX() > this.getLocation().getX()){
        dir = Location.EAST;
    }
    else if (pakLocation.getX() < this.getLocation().getX()){
        dir = Location.WEST;
    }
    else if (pakLocation.getY() > this.getLocation().getY()){
        dir = Location.SOUTH;
    }
    else if (pakLocation.getY() < this.getLocation().getY()){
        dir = Location.NORTH;
    }

    if (pakLocation.getX() == this.getLocation().getX()){
        if((pakLocation.getY() > this.getLocation().getY())){
            dir = Location.SOUTH;
        else if((pakLocation.getY() < this.getLocation().getY())){
            dir = Location.NORTH;
    }
    else if (pakLocation.getY() == this.getLocation().getY()){
        if((pakLocation.getX() > this.getLocation().getX())){
            dir = Location.EAST;
        else if((pakLocation.getX() < this.getLocation().getX())){
            dir = Location.WEST;
    }

    if (pakLocation.getY() > this.getLocation().getY() && pakLocation.getX() < this.getLocation().getX()){
        //southwest  
       random2SubDirs.add(Location.SOUTH);
       random2SubDirs.add(Location.WEST);
            int n = randomNumberGen.nextInt(2);
     System.out.println("southwest " + n);
            switch(n){
                case 0 : dir = Location.SOUTH;
                case 1 : dir = Location.WEST;
            }
     no180Turn(dir);
    }else if(pakLocation.getY() > this.getLocation().getY() && pakLocation.getX() > this.getLocation().getX()){
     //southeast   
       random2SubDirs.add(Location.SOUTH);
       random2SubDirs.add(Location.EAST);
            int n = randomNumberGen.nextInt(2);
       System.out.println("southeast " + n);
            switch(n){
                case 0 : dir = Location.SOUTH;
                case 1 : dir = Location.EAST;
            }
    }else if(pakLocation.getY() < this.getLocation().getY() && pakLocation.getX() < this.getLocation().getX()){
        //northwest
       random2SubDirs.add(Location.NORTH);
       random2SubDirs.add(Location.WEST);
            int n = randomNumberGen.nextInt(2);
       System.out.println("northwest " + n);
            switch(n){
                case 0 : dir = Location.NORTH;
                case 1 : dir = Location.WEST;
            } 
    }else if(pakLocation.getY() < this.getLocation().getY() && pakLocation.getX() > this.getLocation().getX()){
        //northeast
        random2SubDirs.add(Location.NORTH);
       random2SubDirs.add(Location.EAST);
            int n = randomNumberGen.nextInt(2);
       System.out.println("northeast " + n);
            switch(n){
                case 0 : dir = Location.NORTH;
                case 1 : dir = Location.EAST;
            }
    }
    if (fleeing){
        dir = oppositeDir(dir);
    }
    this.setDirection(dir);
    if (canMove(dir)){
        lastDir = dir;
        move();
    }else {randomMode = 10;
           System.out.println("now it is random");
    }
}
导入ch.aplu.jgamegrid.*;
导入java.awt.Color;
导入java.util.*;
公共类幽灵扩展演员
Set random2SubDirs=new HashSet();
Location pakLocation=pakman.wherePakman();
Location.CompassDirection=Location.EAST;
if(pakLocation.getX()>this.getLocation().getX()){
dir=Location.EAST;
}
else if(pakLocation.getX()this.getLocation().getY()){
dir=Location.SOUTH;
}
else if(pakLocation.getY()this.getLocation().getY())){
dir=Location.SOUTH;
else if((pakLocation.getY()this.getLocation().getX())){
dir=Location.EAST;
else if((pakLocation.getX()this.getLocation().getY()&&pakLocation.getX()this.getLocation().getY()&&pakLocation.getX()>this.getLocation().getX()){
//东南
随机2子目录添加(位置:南);
random2SubDirs.add(Location.EAST);
int n=随机数nextInt(2);
System.out.println(“东南”+n);
开关(n){
案例0:dir=Location.SOUTH;
案例1:dir=Location.EAST;
}
}else if(pakLocation.getY()this.getLocation().getX()){
//东北
随机2子目录添加(位置:北);
random2SubDirs.add(Location.EAST);
int n=随机数nextInt(2);
系统输出打印LN(“东北”+n);
开关(n){
案例0:dir=Location.NORTH;
案例1:dir=Location.EAST;
}
}
如果(逃离){
dir=对立的dir(dir);
}
这是设置方向(dir);
如果(可以移动(直接)){
lastDir=dir;
move();
}else{randomMode=10;
System.out.println(“现在是随机的”);
}
}
是在IFs中,还是我应该为此制定另一种方法


任何帮助都将不胜感激。

与其使用枚举方向(我假设这就是
北部
东部
…的方向),为什么不直接计算方向呢?您可以执行以下操作:

int xDifference = pakLocation.getX() - this.getLocation.getX();
它给出了从幽灵到帕克曼人沿x轴的距离,并包括一个指示方向的标志(在x坐标的情况下为东或西)

然后,要仅获取方向,请使用
signum

int xDirection = Math.signum(xDifference);
它将返回1(向东)、-1(向西)或0(不改变横向位置)。然后,如果需要调整速度,请将
xDirection
乘以您希望重影每“滴答”一次移动的量。然后只需复制上述两条线以处理y轴

这无疑远远不够完美,但我认为它允许更简单的调试。这不会直接解决您的问题,但会使运动逻辑更简单,这可能会有所帮助

如果有人发现逻辑中有任何问题,请发表评论,我会更新它