检查游戏对象位置

时间:2015-12-10 16:36:31

标签: java validation

我正在制作一个游戏,其中一个游戏对象,一只松鼠,试图逃避另一个对象,即猎犬。这是我到目前为止: 的 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并返回而不更新位置。

如果需要更多信息,请告诉我,谢谢!

1 个答案:

答案 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)...