我正在制作一个游戏,其中一个游戏对象,一只松鼠,试图逃避另一个对象,即猎犬。这是我到目前为止: 的 Squirrel.java
import java.io.File;
import java.io.FileNotFoundException;
import java.lang.Math;
import java.util.Scanner;
public class Squirrel implements AnimalInterface {
//
// DO NOT MODIFY BELOW
//
private int currentRow;
private int currentCol;
private int previousRow = -1;
private int previousCol = -1;
private int closestRow;
private int closestCol;
private char[][] field;
// Initializes position and field
public Squirrel(int row, int col, char[][] field){
this.currentRow = row;
this.currentCol = col;
this.field = field;
}
// Getters
public int getCurrentRow(){ return currentRow; }
public int getCurrentCol(){ return currentCol; }
public int getPreviousRow(){ return previousRow; }
public int getPreviousCol(){ return previousCol; }
public int getClosestRow(){ return closestRow; }
public int getClosestCol(){ return closestCol; }
//
// DO NOT MODIFY ABOVE
//
// Find closest terrier
public void findClosest(){
int rows = 0; int cols = 0;
//rows = field[0][0]; cols = field[1][0];
// TO DO: Replace with code to find closest
closestRow = -1;
closestCol = -1;
rows = field.length;
cols = field[0].length;
double dist = 0;
double newDist = 0;
for(int i = currentRow; i < rows; i++) {
for(int j =0; j < cols; j++) {
//if its 'D' for Terrier
if(i != currentRow && j != currentCol && field[i][j] == 'D') {
//find Euclidean distance
newDist = Math.sqrt( Math.pow(currentRow - i, 2)+Math.pow(currentCol - j, 2));
if(dist == 0) {
dist = newDist;
closestRow = i;
closestCol = j;
} else if(newDist < dist) {
dist = newDist;
closestRow = i;
closestCol = j;
}
}
}
}
}
// Move squirrel according to the rules
public void moveAnimal() {
eMove move;
// Store previous position
previousRow = currentRow;
previousCol = currentCol;
// TO DO: replace with code to select move (Step 1)
move = eMove.RIGHT;
// TO DO: replace with code to adjust move (Step 2)
move = move;
// TO DO: replace with code to make move (Step 3)
currentCol++;
}
//
// Private Methods, if you need them
//
}
我需要完成这两个步骤,但我不确定如何检查小猎犬的位置,这样我就可以让松鼠向相反的方向移动:
步骤1)选择与最近的Terrier完全相反的移动(eMove类型)。例如,如果Terrier保留在同一行,请向右移动。如果Terrier位于同一列的下方,请向上移动。如果小猎犬在上方和右方,则向下和向左移动。如果小猎犬在下方和右方,请向上和向左移动,依此类推。
步骤2)调整所选择的移动(eMove类型),以避免通过仔细执行以下行为(按所示顺序)离开棋盘,跑进小猎犬或跑进另一只松鼠。您可能希望实现一个私有方法来查看特定移动是否有效。
如果您计划移动DOWN_LEFT,但由于上述原因之一,此移动无效,请改为移动LEFT。 如果您计划移动LEFT,但由于上述原因之一,此移动无效,请移动UP_LEFT。 如果您计划移动UP_LEFT,但由于上述原因之一,此移动无效,请改为向上移动。 如果您计划向上移动,但由于上述原因之一,此移动无效,请改为移动UP_RIGHT。 如果您计划移动UP_RIGHT,但由于上述原因之一,此移动无效,请改为移动右移。 如果您计划移动RIGHT,但由于上述原因之一,此移动无效,请改为移动DOWN_RIGHT。 如果您计划移动DOWN_RIGHT,但由于上述原因之一,此移动无效,请改为向下移动。 如果您计划移动DOWN,但由于上述原因之一,此移动无效,请改为移动DOWN_LEFT。 如果您按上述指定调整移动,并且移动仍然无效,请将移动设置为NO_MOVE并返回而不更新位置。
如果需要更多信息,请告诉我,谢谢!
答案 0 :(得分:0)
添加setter
public void setCurrentRow(int newRow){ currentRow=newRow; }
public void setCurrentCol(int currentCol){ currentCol=newCol; }
如果梗的列位置比您高,则向下移动(将列设置为较低的值),如果它更高,则向下移动。对于行也是如此。
if (mySquirrel.getCurrentCol() > aTerrior.getCurrentColumn())
{
mySquirrel.setCurrentCol(mySquirrel.getCurrentCol()+1)
}
//...etc (one for < aTerrior and two for the rows)...