2016-05-13 4 views
0

メインクラスで作成したAraayListをタートルクラスでスキャンして、さまざまな基準をチェックしようとしています。私は可能な限りコードを簡略化しました。別のクラスのArrayListを使ってオブジェクトをスキャンする

メインクラス:

import javax.swing.*; 
 
import java.awt.*; 
 
import java.util.ArrayList; 
 
import java.awt.event.*; 
 
import javax.swing.event.ChangeEvent; 
 
import javax.swing.event.ChangeListener; 
 

 
class TurtleProgram 
 
{ \t 
 
\t public ArrayList<DynamicTurtle> turtles; 
 

 
\t public static void main(String[] args) 
 
\t { 
 
\t \t new TurtleProgram(); 
 
\t } 
 

 
\t public TurtleProgram() 
 
\t { 
 
\t \t //INSTANTIATED JFRAME WITH BUTTONS/SLIDER AND CREATED LISTENER METHODS 
 

 
\t \t turtles = new ArrayList<DynamicTurtle>(); //THE ARRAYLIST I AM WANTING TO USE IN ANOTHER CLASS 
 
\t \t turtles.add(new RandomTurtleB(canvas, 400, 300, 100, 0)); //THIS ARRAYLIST BECOMES LARGER WHEN BUTTONS ON JFRAME TO ADD NEW TURTLES 
 
\t \t 
 
\t \t gameLoop(); //LOOP FOREVER 
 
\t } \t \t \t 
 

 
\t private void gameLoop() 
 
\t { 
 
\t \t int deltaTime = 20; 
 
\t \t 
 
\t \t while(true) 
 
\t \t { 
 
\t \t \t for (int i = 0; i < turtles.size(); i++) 
 
\t \t \t { 
 
\t \t \t \t (turtles.get(i)).unDrawTurtle(); //REMOVE FROM CANVAS \t \t \t \t 
 
\t \t \t \t (turtles.get(i)).wrapPosition((turtles.get(i)).getPositionX(), (turtles.get(i)).getPositionY()); //MAKE SURE TURTLES NOT OFF SCREEN 
 
\t \t \t } 
 

 
\t \t \t for (int i = 0; i < turtles.size(); i++) 
 
\t \t \t { 
 
\t \t \t \t (turtles.get(i)).update(1000); //MAKE THE TURTLES MOVE WITH A CHANCE OF TURNING 
 
\t \t \t } 
 

 
\t \t \t for (int i = 0; i < turtles.size(); i++) 
 
\t \t \t { 
 
\t \t \t \t (turtles.get(i)).drawTurtle(); //DRAW TO CANVAS \t \t \t 
 
\t \t \t } 
 

 
\t \t \t for(int i = 0; i < turtles.size(); i++) 
 
\t \t \t { 
 
\t \t \t \t (turtles.get(i)).cohesian(); //THIS IS HOW I WOULD LIKE TO ADDRESS THE COHESIAN METHOD 
 
\t \t \t } 
 
\t \t 
 
\t \t 
 
\t \t Utils.pause(deltaTime/2); 
 
\t \t } \t 
 
\t } 
 
}

その後、私はそれがアクションを実行するための凝集()メソッドでは近いですかどうかを確認するために、他のカメに対して、現在のカメをチェックしたいと思います:

class Turtle 
 
{ 
 
    protected Canvas canvas; // private field reference to a canvas private   
 
    private CartesianCoordinate myLocation, oldLocation; 
 
    private boolean penDown = true; 
 
    private double angle, maxX, maxY, nowPosX, nowPosY, maximumX, maximumY, x, y; 
 
    public double d, e, first, second; 
 
    private int speed; 
 

 
    public Turtle(Canvas canvas, CartesianCoordinate initLocation) 
 
    { 
 
     this.canvas = canvas; 
 
     this.myLocation = new CartesianCoordinate(0,0);   
 
     penDown = true; 
 
     myLocation = initLocation.copy();   
 
    }  
 

 
    public void cohesian() 
 
    { 
 
     double flockingDistanceLimit = 200; 
 
     double numberOfFlockers = 0; 
 
     double combinedX = 0; 
 
     double combinedY = 0; 
 
     double averageCombinedX, averageCombinedY, averageCombinedY, moveToFlock, turnToFlock, distanceToPotentialFlock;   
 

 
     for (DynamicTurtle t : turtles) //CANNOT USE THE ARRAYLIST TO SCAN THROUGH ITS ELEMENTS 
 
     { 
 
      if(this.getPositionX() != t.getPositionX() && this.getPositionY() != t.getPositionY()) //MAKE SURE TURTLE ISNT SCANNING ITS SELF 
 
      { 
 
       distanceToPotentialFlock = Math.sqrt(Math.pow((this.getPositionX()-t.getPositionX()),2) + Math.pow((this.getPositionY()-this.getPositionY()),2)); //FIND DISTANCE BETWEEN CURRENT AND SCANNED TURTLE 
 

 
       if(distanceToPotentialFlock < flockingDistanceLimit) //MAKE SURE THE FOUND TURTLE IS WITHIN RANGE USING THE DISTANCE BETWEEN POINTS METHOD 
 
       { 
 
        combinedX = combinedX + t.getPositionX(); //FIND SUMMATION OF X POSITIONS 
 
        combinedY = combinedY + t.getPositionY(); //FIND SUMMATION OF Y POSITIONS 
 
        numberOfFlockers++; //AS A FLOCKER HAS BEEN FOUND INCREMENT THE NUMBER OF FLOCKERS 
 
       } 
 
      } 
 

 
      if(numberOfFlockers > 0) 
 
      { 
 
       averageCombinedX = (combinedX/numberOfFlockers); //FIND AVERAGE X POSITION 
 
       averageCombinedY = (combinedY/numberOfFlockers); //FIND AVERAGE Y POSITION 
 
       moveToFlock = Math.sqrt(Math.pow(averageCombinedX,2) + Math.pow(averageCombinedY, 2)); //CALCULATE DISTANCE TO CENTER OF FLOCKING 
 
       turnToFlock = Math.atan(averageCombinedY/averageCombinedX); 
 

 
       if(turnToFlock < 0) 
 
       { 
 
        turnToFlock = 360 - (-turnToFlock); //ADJUSTING FOR NEGATIVES 
 
       } 
 
      } 
 
     } 
 
    } 
 

 
    public void wrapPosition(double x, double y) 
 
    { 
 
     this.maxX = x; 
 
     this.maxY = y; 
 

 
     if(maxX < 0) 
 
     { 
 
      this.setPositionX(800); 
 
     } 
 

 
     else if(maxX > 800) 
 
     { 
 
      this.setPositionX(0); 
 
     } 
 

 
     if(maxY < 0) 
 
     { 
 
      this.setPositionY(600); 
 
     } 
 

 
     else if(maxY > 600) 
 
     { 
 
      this.setPositionY(0); 
 
     }   
 
    } 
 
} 
 

 

TurtleクラスのArrayListの使用に関する助けがあれば、cohesian()メソッドで非常に感謝します。前もって感謝します。

答えて

0

いずれこんにちは@aviad

+0

をcohesianするパラメータとしてのArrayListを渡す、または静的フィールドとして宣言し、私は、パラメータとしてのArrayListを追加しようとしている:{(turtles.get(I))cohesian(カメ); }と結束方法は、次のようにarraylistを許可します:{public static void cohesian(ArrayList カメ)}しかし、私はまだそれを動作させることができません、あなたはさらに助けることができますか?乾杯。 – jHornsby

+0

同じ方法で同じパラメータをgameLoopに渡します。 – aviad

+0

@aviadに返信してくれてありがとうございます。しかし、 "public:void cohesian(ArrayList カメ)で"エラー:シンボルを見つけることができません "というエラーが表示されます。助けてくれてありがとうございます。 – jHornsby

関連する問題