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()メソッドで非常に感謝します。前もって感謝します。
をcohesianするパラメータとしてのArrayListを渡す、または静的フィールドとして宣言し、私は、パラメータとしてのArrayListを追加しようとしている:{(turtles.get(I))cohesian(カメ); }と結束方法は、次のようにarraylistを許可します:{public static void cohesian(ArrayListカメ)}しかし、私はまだそれを動作させることができません、あなたはさらに助けることができますか?乾杯。 –
jHornsby
同じ方法で同じパラメータをgameLoopに渡します。 – aviad
@aviadに返信してくれてありがとうございます。しかし、 "public:void cohesian(ArrayListカメ)で"エラー:シンボルを見つけることができません "というエラーが表示されます。助けてくれてありがとうございます。 –
jHornsby