Я делаю игру, в которой игровой объект, белка, пытается уклониться от другого объекта - терьера. Вот то, что я до сих пор: 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) Выберите ход (типа eMove), который находится в прямо противоположном направлении от ближайшего терьера. Например, если терьер остается в той же строке, двигайтесь вправо. Если терьер находится ниже того же столбца, двигайтесь вверх. Если терьер находится выше и справа, двигайтесь вниз и влево. Если терьер находится внизу и справа, двигайтесь вверх и влево, и так далее.
ШАГ 2) Отрегулируйте выбранный ход (типа eMove), чтобы избежать ухода с борта, запускаясь в терьер или бегая в другую Белку, тщательно выполняя следующее поведение (в указанном порядке). Вероятно, вам захочется реализовать частный метод, чтобы узнать, действительно ли определенный ход.
Если вы планируете перемещать DOWN_LEFT, но этот ход недействителен по одной из причин, указанных выше, вместо этого переместите LEFT. Если вы планируете перемещать LEFT, но этот ход недействителен по одной из причин, указанных выше, переместите UP_LEFT вместо этого. Если вы планируете перемещать UP_LEFT, но этот ход недействителен по одной из причин выше, переместите UP вместо этого. Если вы планируете перемещение вверх, но этот ход недействителен по одной из причин выше, переместите UP_RIGHT вместо этого. Если вы планируете перемещать UP_RIGHT, но этот ход недействителен по одной из причин, указанных выше, переместите RIGHT вместо этого. Если вы планируете перемещать ПРАВО, но этот ход недействителен по одной из причин, указанных выше, вместо этого переместите DOWN_RIGHT. Если вы планируете перемещать DOWN_RIGHT, но этот ход недействителен по одной из причин, указанных выше, вместо этого переместите DOWN. Если вы планируете перемещать DOWN, но этот ход недействителен по одной из причин, указанных выше, вместо этого переместите DOWN_LEFT. Если вы пройдете настройку перемещения, как указано выше, и движение все еще недействительно, установите переход на NO_MOVE и вернитесь без обновления позиции.
Если информация больше не требуется, сообщите мне, спасибо!
В: Является ли школьное задание? – Stormcloud