2015-12-10 5 views
-1

Я делаю игру, в которой игровой объект, белка, пытается уклониться от другого объекта - терьера. Вот то, что я до сих пор: 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 и вернитесь без обновления позиции.

Если информация больше не требуется, сообщите мне, спасибо!

+0

В: Является ли школьное задание? – Stormcloud

ответ

0

Добавить сеттеры

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)... 
Смежные вопросы