当它在Java中不应该时变为180
所以我试着用吃豆人做鬼魂(小指),但我的动作有问题。所以我使用getX()和getY()来确定pacman在哪里,因此幽灵应该去哪里 然而,当吃豆人在东方,而鬼魂已经向西移动时,问题就出现了。然后,当幽灵探测到吃豆人X或Y时,它立即变为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
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轴
这无疑远远不够完美,但我认为它允许更简单的调试。这不会直接解决您的问题,但会使运动逻辑更简单,这可能会有所帮助
如果有人发现逻辑中有任何问题,请发表评论,我会更新它